• 第二次作业


    一 .

        6-7.

      1.设计思路:

        (1)第一步:定义数组初值,用for语句在数组中找出出大于0小于9的数字字符。

            第二步:出现数字数组就将其后一项前移,代替数字数组,最终完成数字数组的删除。

        (2)流程图

      2.实验代码

    void delnum(char *s)
    {
      int i,k=0;
      for(i=0;s[i]!='';)
      {
        if(s[i]>='0'&&s[i]<='9')
        {
          for(k=i;s[k]!=0;k++)
          s[k]=s[k+1];
        }
        else
          i++; 
      }
    }

      3.错误提示

       6-8

      1.设计思路

        (1)第一步:用for循环找出substr数组的字符串长度,并记作一个字符串。

                 第二步:再运用for循环在str数组中寻找substr数组出现的次数。

      2.实验代码

    int fun(char *str,char *substr)
    {
      int n=0,i=0,k=0,flag=0;
      for(i=0;str[i]!='';i++)
      {
      for(k=0;substr[k]!='';k++)
      {
        if(substr[k]==str[i+k])
        flag=1;
        else
        flag=0;
      }
      if(flag==1)
      {
        n++;
        flag=0;
      }
    }
    return n;
    }

      3.

      错误信息1:

        错误原因:在if语句中忽略了flag==1没法继续执行这一点。

        改正方法:捋顺了一下,尝试了flag==0或1的结果,最终flag=1才能继续向下执行,并正确。

      错误信息2:

        错误原因:无意在i的旁边加了两个点...

        改正方法:对着正确的图看了几遍才发现这个问题。

      6-9

       1.设计思路

        (1)第一步:先定义几个数,并将min初始化(去掉首位)。

                 第二步:运用for循环将余下的字符进行比较,并将小的字符向后移动。

                 第三步:将每一个字符都与后面的进行比较并移动,最终输出正确的排序。

      2.

    int fun(char *s,int num)
    {
      int i,min=(num-2),k;
      for(i=1;i<=min;i++)
      {
        if(s[min]>s[i])
        {
          k=s[min];
          s[min]=s[i];
          s[i]=k;
        }
      }
      if(num>0)
      {
        num--;
        fun(s,num);
      }
    }

      3.

      错误信息

        错误原因:将排序的代码打成了取值的。

        改正方法:检查一遍发现执行后的结果是取值的,并改了过来。

      7-1

       1.设计思路

        (1)第一步:使用if语句来实行动态内存分配。

                 第二步:运用for语句将每一项进行比较并求出最大最小值

                 第三步:用总数求出平均值,最后输出这三项。

      2

    #include<stdio.h>
    #include<stdlib.h>
    int main()
    {
      double avg=0,max=0,min=0;
      int i=0,*s,n;
      scanf("%d",&n);
      if((s=(int *)malloc(n*sizeof(int)))==NULL)
      exit(1);
      for(i=0;i<n;i++)
      {
          scanf("%d",s+i);
          if(s[i]>max)
          max=s[i];
          if(s[i]<min)
          min=s[i];
          avg+=s[i];
      }
      avg/=n;
      free(s);
      printf("average = %.2lf
    ,max = %.2lf
    ,min = %.2lf",avg,max,min);
    }

      3.错误信息

        错误原因:最小值的取值不能从0开始,否则无法循环查找真正的最小值。

        改正方法:重复几次尝试发现最小值要递减,所以要赋一个较大的数。

    二.

      

      7-1

       1.设计思路

        (1)第一步:定义结构变量,定义职工信息,运用结构变量并输入员工信息。

                 第二步:运用for循环及给定公式输出他们的姓名及实发工资。

        (2)流程图

      2.实验代码

    #include<stdio.h>
    struct people
    {
      char name[10];
      float jbgz,fdgz,zc;
      float sfgz;
    };
    int main()
    {
      int i=0,n;
      scanf("%d",&n);
      struct people s[n];
      for(i=0;i<n;i++)
      {
        scanf("%s %f %f %f",&s[i].name,&s[i].jbgz,&s[i].fdgz,&s[i].zc);
        s[i].sfgz=(s[i].jbgz+s[i].fdgz-s[i].zc);
      }
      for(i=0;i<n;i++)
      {
        printf("%s %.2f
    ",s[i].name,s[i].sfgz);
      }
    }

       3.错误信息

        错误原因:没有注意要在每位职员的姓名和实发工资中间隔一个空格。

        改正方法:检查几次,试了几次,最终询问同学才知道问题,并将其改正。

      7-2

       1.设计思路

        (1)第一步:定义结构变量,定义数组,定义学生信息。

                 第二步:使用结构变量,运用for循环输入其信息,算出成绩的和。

            第三步:算出平均成绩并输出。再使用for循环找出低于平均线以下的名单并输出。

       2.实验代码

    #include<stdio.h>
    struct student
    {
      char num[6],name[10];
      int s;
    }; 
    int main()
    {
      int i=0,n;
      double avg=0;
      scanf("%d",&n);
      struct student s[n];
      for(i=0;i<n;i++)
      {
        scanf("%s %s %d",&s[i].num,&s[i].name,&s[i].s);
        avg+=s[i].s;
      }
      avg/=n;
      printf("%.2lf
    ",avg);
      for(i=0;i<n;i++)
      {
        if(s[i].s<avg)
        printf("%s %s
    ",s[i].name,s[i].num);
      }
    }

      3.

    三.

      6-1

       1.设计思路

        (1)第一步:定义结构变量。

                 第二步:在for语句中使用结构变量,再用if、else语句将各个分段区分评级。

        (2)流程图

        

       2.实验代码

    int set_grade( struct student *p, int n )
    {
        int count = 0, i;
        for(i = 0;i<n;i++,p++)
        {
            if((p->score>=85)&&(p->score<=100))
            {
                p->grade = 'A';
            }
            else if((p->score<85)&&(p->score>=70))
            {
                p->grade = 'B';
            }
            else if((p->score<70)&&(p->score>=60))
            {
                p->grade = 'C';
            }
            else
            {
                p->grade = 'D';
                count++;
            }
        }
        return count;
    }

       3.错误信息

        错误原因:if、else的使用有些混乱,导致顺序不正确。无意间还落下了两个括号

        改正方法:仔细读题分析,回想if、else的使用方法,调整用的顺序。加上括号。

      6-2

       1.设计思路

        (1)第一步:定义结构变量,运用for语句将每个人的总分成绩计算出来。

            第二步:应用结构变量,再运用for语句将每个人按照总成绩排序。

            第三步:交换他们前边的排序,并按照原顺序输出。

       2.实验代码

    void calc(struct student *p,int n)
    {
      int i=0;
      for(i=0;i<n;i++)
      {
        (p+i)->sum=(p+i)->score[0]+(p+i)->score[1]+(p+i)->score[2];
      }
    }
    void sort(struct student *p,int n)
    {
      int i=0,min=0;
      struct student m;
      for(i=0;i<n;i++)
      {
        if((p+i)->sum<(p+min)->sum)
        {
          min=i;
          }
      }
      m=*(p+min);
      *(p+min)=*(p+n-1);
      *(p+n-1)=m;
      if(n>1)
      {
        n--;
        sort(p,n);
      }
    }

       3.错误信息

     

    四.学习总结和进度。

      1.这两周内主要还是学习了一下上几周学的东西,感觉之前不懂得也懂一些了。这两周新学习的结构变量感觉不是很难,就是对它的编写结构还有些生疏,对于哪步该写什么还不是很熟悉,我      觉得这部分还是需要我加强的。

      2.git地址:https://git.coding.net/wangxinyu78/wang.git

      3.史泽文:http://www.cnblogs.com/shilcz/p/8696341.html

         王姝雯:http://www.cnblogs.com/phsudie/p/8661686.html

         张金禹:http://www.cnblogs.com/17-1/p/8687764.html

      4.

  • 相关阅读:
    【转】排序总结(总结的非常好)
    [转]C#中使用指针实现高效比较字符串的小技巧
    高斯消元法
    排序算法性能和使用场景总结
    斐波那契数列Log(n)算法
    C#部分方法定义
    杂项记录
    C#指针复习示例zz
    【转】斐波那契数列算法分析
    【转】矩阵乘法
  • 原文地址:https://www.cnblogs.com/wxy5336/p/8697388.html
Copyright © 2020-2023  润新知