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/

posted @ 2018-03-20 19:37  袁中  阅读(327)  评论(25编辑  收藏  举报