zoukankan      html  css  js  c++  java
  • 2018第一次作业

    一:PTA

    1.计算两数的和与差

    (1).设计思路

    主要描述题目算法

    第一步:观察函数定义
    第二步:进行加减运算过程

    (2).实验代码

    `
    #include <stdio.h>
    
    void sum_diff( float op1, float op2, float *psum, float *pdiff );
    
    int main()
    {
    float a, b, sum, diff;
    
    scanf("%f %f", &a, &b);
    sum_diff(a, b, &sum, &diff);
    printf("The sum is %.2f
    The diff is %.2f
    ", sum, diff);
    
    return 0; 
    }
    void sum_diff( float op1, float op2, float *psum, float *pdiff )
    {
    *psum = op1+op2;
    *pdiff = op1-op2;
    }
    `
    

    (3).遇到的问题及解决方法

    开始指针忘记加*,加上后答案正确。

    2.拆分实数的整数与小数部分

    (1).设计思路

    主要描述题目算法

    第一步:观察函数定义。
    第二步:将整数部分赋值给int型传入数据,之后用float型传入数据减去整数部分得出小数部分。

    (2).实验代码

    `
    #include <stdio.h>
    
    void splitfloat( float x, int *intpart, float *fracpart );
    
    int main()
    {
    float x, fracpart;
    int intpart;
    
    scanf("%f", &x);
    splitfloat(x, &intpart, &fracpart);
    printf("The integer part is %d
    ", intpart);
    printf("The fractional part is %g
    ", fracpart);
    
    return 0;
    }
    void splitfloat( float x, int *intpart, float *fracpart )
    {
      *intpart = x;
      *fracpart=x - *intpart;
    }
    `
    

    (3).遇到的问题及解决方法

    本题没有遇到问题。

    3.在数组中查找指定元素

    (1).设计思路

    1).主要描述题目算法

    第一步:观察函数定义。
    第二步:判断遍历数字是否与查找数字相同,如果相同index=i,并跳出循环,不相同则等于-1,直到循环结束,返回index的值。

    2).流程图

    (2).实验代码

     `#include <stdio.h>
    #define MAXN 10
    
    int search( int list[], int n, int x );
    
    int main()
    {
    int i, index, n, x;
    int a[MAXN];
    
    scanf("%d", &n);
    for( i = 0; i < n; i++ )
        scanf("%d", &a[i]);
    scanf("%d", &x);
    index = search( a, n, x );
    if( index != -1 )
        printf("index = %d
    ", index);
    else
        printf("Not found
    ");
    
    return 0;
    }
    int search(int list[], int n, int x ){
    int i,index;
    for(i=0;i<n;i++)
    {
    if(list[i]==x){
    	index = i;
    	break;
    }else{
      index = -1;
    }
     } 
     return index;
    }
    `
    

    (3).遇到的问题及解决方法

    开始将return放进了循环中导致程序不能结束,改正后答案正确。

    4.找最大值及其下标

    (1).设计思路

    1).主要描述题目算法

    第一步:观察函数定义。
    第二步:用if语句判断遍历数与a[i]的大小,如果a[i]小于遍历数则把a[i]赋值给max,其下标存到指针b所指变量,函数返回最大值。

    2).流程图

    (2).实验代码

    `
    #include<stdio.h>
    #define N 10
    int fun(int *a,int *b,int n);
    int main()
    { int a[N],i,max,p=0;
    for(i=0;i<N;i++) scanf("%d",&a[i]);
     max=fun(a,&p,N);
     printf("max=%d,position=%d
    ",max,p);
     return 0;
    }
    int fun(int *a,int *b,int n){
      int i;
      for(i=0;i<n;i++){
        if(a[i]>*a){
          *a = a[i];
          *b = i;
        }
      }return *a;
    }
    `
    

    (3).遇到的问题及解决方法

    本题没有问题。

    5.最小数放前最大数放后

    (1).设计思路

    1).主要描述题目算法

    第一步:观察函数定义。
    第二步:用if语句比较当前数与最小值的大小,如果大于最大值则将数组下标赋值给idx,判断idx是否为0,如不等于0则将a[idx]与a[0]调换。

    2).流程图

    (2).实验代码

    `
    #include<stdio.h>
    void input(int *arr,int n);
    void max_min(int *arr,int n);
    void output(int *arr,int n);
    int main()
    { int a[10];
    input(a,10);
     max_min(a,10);
     output(a,10);
     return 0;
    }
    void input(int *arr,int n)
    {
        int i;
        for(i = 0;i < n;i++){
            scanf("%d",& *(arr + i));
        } 
    } 
    
    void max_min(int *arr,int n)
    {
        int idx=0,i,t;
        for ( i = 0; i < n; i++ ) 
        { 
             if ( arr[i] < arr[idx] )
            { 
              idx=i; }      
        }   
       
        if(idx!=0){
            t=arr[0];arr[0]=arr[idx];arr[idx]=t;
        }
        idx=0;
        for ( i = 0; i < n; i++ ) 
        { 
             if ( arr[i] > arr[idx] )
            { 
               idx=i;}      
        } 
    
        if(idx!=(n-1)){
            t=arr[n-1];
            arr[n-1]=arr[idx];
            arr[idx]=t;}
    }
    
    void output(int *arr,int n)
    {
        int i;
        for(i = 0;i < n;i++){
            printf("%3d",*(arr + i));
        }   
    }
    `
    

    (3).遇到的问题及解决方法

    arr[i]与arr[idx]比较大小时符号错误,改正后答案正确。

    6.指针选择法排序

    (1).设计思路

    1).主要描述题目算法

    第一步:观察函数定义。
    第二步:用for循环遍历数组,用if语句判断遍历数与后一个数的大小,若后一个数大于遍历数则两数交换。

    2).流程图

    (2).实验代码

    `
    #include<stdio.h>
    void sort(int *x,int n);
    int main ( )
    {int *p,i,a[10];
     p=a;
     for (i=0;i<10;i++)  scanf("%d",p++);
         p=a;
     sort(a,10);
     for(i=0;i<10;i++)  printf("%4d",*p++);
     printf("
    ");
     return 0;
     }    
     void sort(int *x,int n)
     {
        int j,i,t;
        for(j=1;j<=n-1;j++)
           for(i=0;i<=n-j-1;i++)
              if(x[i]<x[i+1])
             {t=x[i]; x[i]=x[i+1]; x[i+1]=t;}
     }
    `
    

    (3).遇到的问题及解决方法

    本题没有问题。

    7.判断回文字符串

    (1).设计思路

    1).主要描述题目算法

    第一步:观察函数定义。
    第二步:用for循环便利数组,用if语句判断相应字符是否相等,若相等则k加一,否则返回false,之后判断k是否等于n,相等则返回true。

    2).流程图

    (2).实验代码

    `
    #include <stdio.h>
    #include <string.h>
    
    #define MAXN 20
    typedef enum {false, true} bool;
    
    bool palindrome( char *s );
    
    int main()
    {
        char s[MAXN];
    
        scanf("%s", s);
        if ( palindrome(s)==true )
            printf("Yes
    ");
        else
            printf("No
    ");
        printf("%s
    ", s);
    
        return 0;
    }
    bool palindrome( char *s )
      {
    int n = strlen(s);
    int i , j , k = 0;
    for(i = 0 ,j = n - 1;i < n; i ++,j --)
    {
        if(*(s + i) == *(s + j)){
            k ++;
        }else{
            return false;
        }
    }
    
     if(k == n){
        return true;
     }
    
      }
    `
    

    (3).遇到的问题及解决方法

    开始误将k与n的比较放入for循环中,导致程序错误,放到循环外后答案正确。

    8.使用函数实现字符串部分复制

    (1).设计思路

    1).主要描述题目算法

    第一步:观察函数定义。
    第二步:先求出长度n,之后判断m与n的大小,若m>n则返回空数组,否则用for语句遍历,将数组t的第m个开始的元素数值赋值给数组s,最后一个地址填入'/0'。

    2).流程图

    (2).实验代码

    `
    #include <stdio.h>
    #define MAXN 20
    
    void strmcpy( char *t, int m, char *s );
    void ReadString( char s[] );
    
    int main()
    {
        char t[MAXN], s[MAXN];
        int m;
    
        scanf("%d
    ", &m);
        ReadString(t);
        strmcpy( t, m, s );
        printf("%s
    ", s);
    
        return 0;
     }
     void strmcpy( char *t, int m, char *s )
      {
    int n = strlen(t);
    int i;
    if(m <= n){
        for(i = 0;*(t + i) != '';i ++){
            *(s+i) = *(t + m - 1 + i);
        
        }
        *(s + n) = '';
    }else{
        *s = '';
    }
      }
    `
    

    (3).遇到的问题及解决方法

    if语句条件开始写错,且‘’表示错误,修改后正确。

    9.额外加题3

    (1).设计思路

    1).主要描述题目算法

    第一步:获取字符串并传入函数。
    第二步:用for语句遍历,用if语句判断遍历字符是否为y,z,若不是则码值加二,若是则分别变为a,b。

    2).流程图

    3).运行结果

    (2).实验代码

    `
    #include<stdio.h>
    #define max 100
    void jiami(char *);
    int main()
    {
        char name[max];
        gets(name);
        jiami(name);
        printf("%s",name);
        return 0;  
    }
    void jiami (char *s)
    {
        for(;*s!='';s++)
        {
            if(*s=='z'){
                *s='b';
            }else if(*s=='y'){
                *s='a';
            }else{
                *s=*s+2;
            }
        }
    } 
    `
    

    (3).遇到的问题及解决方法

    本题没有问题。

    二:学习总结和进度

    1.学习内容

    这两周所学知识对我来说比较困难,目前只了解了指针和字符串的基本知识,对这部分的知识还需要花费时间去练习。

    2.git

    https://coding.net/u/q807443119/p/zuoye/git/commit/ee2eff4fcacf5e380ffed10735d6d02a7ffe31bb?public=true

    3.点评

    丰大为 http://www.cnblogs.com/DavidPark/p/8551402.html
    高立彬 http://www.cnblogs.com/gao628526/p/8551285.html
    班庆泽 http://www.cnblogs.com/wsbqz/p/8641741.html

    4.学习进度

  • 相关阅读:
    链表
    std::map
    linux配置永久ip不生效解决方法
    linux命令英文缩写的含义(方便记忆)
    互联网创业其实就这24种商业模式
    当用反射获取一个model,这个model里面字段有nullable的时候,获取字段真实类型
    自定义alert和confirm
    web上传大文件的配置
    windows服务-log4net的使用
    vs中的各种快捷键
  • 原文地址:https://www.cnblogs.com/qq807443119/p/8641932.html
Copyright © 2011-2022 走看看