• yuan的第二次随笔


    第一题:

                计算两数的和与差
    

    设计思路:

                      1:看题目:主函数与函数声明,知道它要你干什么
                      2:理解与分析:在main中,定义两个实数a,b;要你求两数的和与差
                      3:解答:通过调用函数sum_diff,指针psum接收&sum,指针pdiff接收&diff,实数op1接收实数a,实数op2接收实数b,计算两数的和与差:*psum=op1+op2;,*pdiff=op1-op2
                      4:输出
    

    流程图:

    实验代码:

     void sum_diff( float op1, float op2, float *psum, float *pdiff )
    {
      *psum=op1+op2;
      *pdiff=op1-op2;
    }
    

    错误信息:

    第二题:

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

    设计思路:

                   1:看题目:主函数与函数声明,知道它要你干什么
                   2:理解与分析:在main中,给你一个实数x,要求你将他的整数与小数分离
                   3:解答:在splitfloat中,利用实数x接收main中的x,利用指针intpart接收main中的&intpart,利用指针fracpart接收main中的&fracpart,再先分解x整数部分:*intpart=(int)x,小数等于x减去整数:*fracpart=x-*intpart
    

    流程图:

    实验代码:

    void splitfloat( float x, int *intpart, float *fracpart )
    {
      *intpart=(int)x;
      *fracpart=x-*intpart;
    }
    

    错误信息:

                1:求整数时,写成了*intpart=x/1
    

    改正方式:

               1:将它改为:*intpart=(int)t;
    

    小结:

                 整数除以整数还是整数,浮点数(或者整数)除以整数(或者浮点数)是浮点数,浮点数除以浮点数还是浮点数
    

    疑问:为什么这个也可以通过?

    void splitfloat( float x, int *intpart, float *fracpart )
    {
      *intpart=x/1;
      *fracpart=x-*intpart;
    }
    

    第三题:

               在数组中查找指定元素
    

    设计思路:

                     1:看题目:主函数与函数声明,知道它要你干什么
                     2:理解与分析:题目给你一个数组a[MAXN],里面存有一些数字,然后再让你输入一个数字x,看数组中是否存在这个数,在调用函数list{},判断这个数是否在数组中,若在,返回这个数的下标,反之,返回-1
    

    流程图:

    实验代码:

    int search( int list[], int n, int x )
    {
      int s=-1;
      int i;
      for(i=0;i<n;i++)
      {
        if(list[i]==x)
        {
          s=i;break;
        }
      }
      return s;
    }
    

    错误信息:

    第四题:

                找最大值及其下标
    

    设计思路:

                       1:看题目:主函数与函数声明,知道它要你干什么
                       2:理解与分析:题目给你一个数组a[N],让你调用函数fun找出最大值max,,并输出它的下标p
                       3:解答:在函数fun中,指针a接受数组a[ ],n接受数组大小N,用指针p接受最大的下标,再用一个for循环找出最大值及其下标
    

    流程图:

    实验代码:

    int fun(int *a,int *b,int n)
    {
      int i;
      int s=a[0];
      for(i=1;i<n;i++)
      {
        if(s<a[i])
        {
          s=a[i];
          *b=i;
        }
      }
      return s;
    }
    

    错误信息:

    改正方式:

    我的总结

           在这两周中,我们学习了许多知识点,其中有通过调用函数:在数组中查找指定元素,这题目判断一个数是否在数组中;找最大值及其下标,这题目要求我们在数组中找出最大值及其下标;计算两数的和与差,这题目要求我们计算两个数的和与差;拆分实数的整数与小数部分,这题目要求我们将一个实数分解成整数部分,及小数部分;还有就是,这两周中,我的打字速度也进步了许多,以前不会用电脑画流程图,现在也会了。每次学到许多新的东西,我都会感到开心,并也感谢教我学习的人。
    

    第五题:

                最小数放前最大数放后
    

    设计思路:

                      1:看题目:主函数与函数声明,知道它要你干什么 
                      2:理解与分析:在main中,给你一个数组,其中有十个整数 ,希望你通过调用函数,把最小数放前最大数放后       
                      3:解答: 
                                    第一步:在input中,它用指针arr接收数组a[],用整数n接收数组的大小10,再用一个for循环,给数组a赋值
                                    第二步:在max_min中,它用指针arr接收数组a[],用整数n接收数组的大小10,先定义并赋值两个整形变量,分别为:max=a[0],min=a[0];利用两个for循环,找到最大值最小值,再定义一个整型变量t,实现把最小数放前最大数放后
                                    第三步:在output中,它用指针arr接收数组a[],用整数n接收数组的大小10,定义并赋值一个整型变量i =0,再用一个for循环,将数组a[]中的元素输出
    

    流程图:

    实验代码:

    void max_min(int *arr,int n)
    {
      int t,s,x=0,y=0,i,min,max;
      min=arr[0];max=arr[0];
      for(i=0;i<n;i++)
      {
        if(min>arr[i])
        {
          min=arr[i];
          x=i;
        }
      }
      t=arr[0];arr[0]=arr[x];arr[x]=t;
      for(i=0;i<n;i++)
      {
        if(max<arr[i])
        {
          max=arr[i];
          y=i;
        }
      }
      s=arr[n-1];arr[n-1]=arr[y];arr[y]=s;
    }
    void input(int *arr,int n)
    {
      int i;
      for(i=0;i<n;i++)
      scanf("%d",&arr[i]);
    }
    void output(int *arr,int n)
    {
      int i;
      for(i=0;i<n;i++)
      printf("%3d",arr[i]);
    }
    

    错误信息:

                        1.输出时:printf("  %d",arr[i]);
                         2.找最大值与最小值时,只用一个for循环
    

    改正方式:

                        1.printf("%3d",arr[i]);
                         2.找最大值与最小值时,只用两个for循环,分别.找最大值与最小值
    

    小结:

                “  %d”与“%3d”不同,一个是前面空两格在输出,一个是元素输出占3个字符宽
    

    第六题:

                 指针选择法排序
    

    设计思路:

                      1:看题目:主函数与函数声明,知道它要你干什么 
                      2:理解与分析:在main中,给你一个数组,其中有十个整数 ,希望你通过调用函数,将10个数进行由大到小的排序输出
                      3:解答:
                                     第一步:定义t,i=0,j=i+1,max;其中t记录最大值下标,i用于选择法排序中外层for循环,而(i+1)表示进行到了第几轮交换,j用于选择法排序中内层for循环,表示x[i]后面元素的下标,max用于储存最大值
                                     第二步:进入第一个for循环:将max,t初始化,max=x[i]; t=i;
                                     第三步:进入第二个for循环:判断max<x[j]?若成立:max=x[j];t=j;
                                     第四步:离开第二个for循环后,判断t!=i?若成立:max=x[t];x[t]=x[i];x[i]=max;找到了最大值,并把它放在了第一,之后就重复第二步到第四步,直到跳出第一个for循环
    

    流程图:

    实验代码:

     void sort(int *x,int n)
    {
      int t,i,j,max;
      for(i=0;i<(n-1);i++)
      {
        max=x[i];
        t=i;
      for(j=i+1;j<n;j++)
      {
        if(max<x[j])
        {
         max=x[j];
        t=j;
        }
      }
      if(t!=i)
      {
        max=x[t];x[t]=x[i];x[i]=max;
      }
      }
    }
    

    错误信息:

    第七题:

                判断回文字符串
    

    设计思路:

                      1:看题目:主函数与函数声明,知道它要你干什么,了解“回文”是指顺读和倒读都一样的字符串
                      2:理解与分析:在main中,给你一个字符串s,要你判断它是不是回文
                      3:解答:
                                     第一步:在main中,定义一个数组s[MAXN]
                                     第二步:在palindrome中,指针s接收数组s,再定义i,n,k,j,其中,n=strlen(s),i=0,j=n-1
                                     第三步:再利用一个for循环,条件1:i=0,j=n-1;条件二:i<j;条件三:i++,j--
                                     第四步:在for循环中,判断:s[i]!=s[j],若成立,break;反之,继续
                                     第五步:判断i<j?成立:return false;反之:return true;
    

    流程图:

    实验代码:

    bool palindrome( char *s )
    {
      
      int i,n,k,j;
      n=strlen(s);
      i=0,j=n-1;
      for(i=0,j=n-1;i<j;i++,j--)
      {
        if(s[i]!=s[j])
        {
          break;
        }
      }
      if(i<j)
      return false;
      else
      return true;
    }
    

    错误信息:

    第八题:

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

    设计思路:

                      1:看题目:主函数与函数声明,知道它要你干什么,希望你写一个函数,实现字符串部分复制
                      2:理解与分析:在main中,给你一个字符串t,要求你从第m个字符开始的全部字符复制到字符串s中
                      3:解答:
                                     第一步:在strmcpy中,用指针t接收字符串t,用指针s接收字符串s,用m接收main中m(从第几个数开始复制)
                                     第二步:定义i,j,n;其中i,j用于循环嵌套,n统计字符串s长度
                                     第三步:调用函数strcpy,将t全部复制到s中,再调用函数strlen,统计字符串s长度,并赋值给n
                                     第四步:再用两个for循环,实现数组s[]向左移动的单位为m-1,其一:for(i=m-1;i>0;i--);其二:for(j=i;j<n;j++);在里面为:s[j-1]=s[j];
                                     第五步:令s[n-m+1]等于'\0',代表结束,完成了从第m个字符开始的全部字符复制到字符串s中
    

    流程图:

    实验代码:

    void strmcpy( char *t, int m, char *s ){  
        int i,j,n; 
        strcpy(s, t);
        n = strlen(s);  
        for(i=m-1;i>0;i--){  
            for(j=i;j<n;j++){  
                s[j-1]=s[j];  
            }  
        }  
        s[n-m+1]='\0';  
    }
    

    错误信息:

                        没写s[n-m+1]='\0'
    

    改正方式:

                         加上s[n-m+1]='\0'
    

    小结:

                 字符串后面都有一个'\0'
    

    .托管截图及网址

    表格:

    作业点评:

    辛静瑶:http://www.cnblogs.com/X-JY/
    李伍壹:http://www.cnblogs.com/chenxidream/
    姜健:http://www.cnblogs.com/jj990519/
    陈天胤:http://www.cnblogs.com/cty-1/
    李新华:http://www.cnblogs.com/Lixinhua18/

  • 相关阅读:
    LOJ2565. 「SDOI2018」旧试题
    位运算
    Arrays.sort()原理
    LinkedList源码解析
    二维数组排序
    数据结构和算法-五大常用算法:贪心算法
    数据结构和算法-五大常用算法:分支限界法
    数据结构和算法-五大常用算法:分治算法
    数据结构和算法-二分查找
    Arrays.copyOf()&Arrays.copyOfRange()&System.arraycopy
  • 原文地址:https://www.cnblogs.com/2719610441qqcom/p/8611529.html
Copyright © 2020-2023  润新知