• 第三次作业


    第一题:

                 删除字符串中数字字符
    

    设计思路:

                      1:看题目:主函数与函数声明,知道它要你干什么
                      2:理解与分析:在main中,给你一个字符串,要你删除指针 s所指的字符串中的所有数字字符
                      3:解答:第一步:定义i=0,n,j=0,i位a[]下标,j为s[]下标,调用函数strlen(s),n用于记录字符串的长度
                                       第二步:定义一个字符数组a[81],调用函数strcpy(a,s)
                                       第三步:利用一个for循环,如果(a[i]>'9'或a[i]<'0'),则s[j]=a[i];  j++;
                                       第四步:循环结束后,s[j]=‘\0’,表示字符串结束
    

    流程图:

    实验代码:

    #include<string.h>
    void delnum(char *s)
    {
      int i=0,n,j=0;
      n=strlen(s);
      char a[81];
       strcpy(a,s);
      for(i=0;i<n;i++)
      {
        if(a[i]<'0'||a[i]>'9')
        {
          s[j]=a[i];
          j++;
        }
    }
    s[j]='\0';
    }
    

    错误信息:

                       a[i]<'0'&&a[i]>'9'
    

    改正方式:

                       a[i]<'0'||a[i]>'9'
    

    第二题:

               统计子串在母串出现的次数
    

    设计思路:

                      1:看题目:主函数与函数声明,知道它要你干什么
                      2:理解与分析:在main中,给你两个字符串,一个是长度为3的字符串,要你统计一个长度为3的字符串在另一个字符串中出现的次数
                      3:解答:第一步:定义i=0,n,k=0;i为str[]的下标,k统计substr[]在str[]中出现的次数
                                      第二步:调用函数strlen( str),利用n用于记录字符串的长度
                                      第三步:利用for函数,如果(str[i]==substr[0]&&str[i+1]==substr[1]&&str[i+2]==substr[2])成立,k++
                                      第四步:返回k
    

    流程图:

    实验代码:

    int fun(char *str,char *substr)
    {
      int i=0,n,k=0;
      n=strlen( str);
      for(i=0;i<n;i++)
      {
        if(str[i]==substr[0]&&str[i+1]==substr[1]&&str[i+2]==substr[2])
        k++;
      }
      return k;
    }
    

    错误信息:

    第三题:

                字符串中除首尾字符外的其余字符按降序排列
    

    设计思路:

                      1:看题目:主函数与函数声明,知道它要你干什么
                      2:理解与分析:在main中,给你一个字符串,要你对字符串中除首、尾字符外的其余字符按降序排列
                      3:解答:第一步:定义i=1,k,j=1,n=1;在冒泡循环中,i用于外层for循环,表示跑了第几轮了,j用于内层for循环,为s[]的下标,k为交换的中间量
                                      第二步:在定义一个char max=s[1];暂时记录最大值
                                      第三步:利用冒泡排序法,让字符串中除首尾字符外的其余字符按降序排列
    

    流程图:

    实验代码:

    int fun(char *s,int num)
    {
      int i,k,j,n=1;
      char max=s[1];
       for(i=1;i<num-1;i++)
       {
         for(j=1;j<num-1-i;j++)
         {
           if(s[j]<s[j+1])
           {
             k=s[j];s[j]=s[j+1];s[j+1]=k;
           }
         }
       }
    }
    

    错误信息:

                       int max=s[1];
    

    改正方式:

                       char max=s[1];
    

    第四题:

                输出学生成绩
    

    设计思路:

                      1:看题目:主函数,知道它要你干什么
                       2:理解与分析:给你N个学生的成绩,让你统计并输出学生的平均成绩、最高成绩和最低成绩
                       3:解答:第一步:定义整形n,i,*p;其中:n为学生个数,i用于表示*(p+i),*p表示p为指针
                                       第二步:定义浮点型average,max=0,min=0,sum=0;分别表示平均成绩、最高成绩、最低成绩、所有成绩和
                                       第三步:输入n,再利用动态内存分配
                                       第四步:输入n个成绩,并将第一个元素赋值给max,min,再求和、找最大值及最小值,最后求average
                                       第五步:输出学生的平均成绩、最高成绩和最低成绩
    

    流程图:

    实验代码:

    #include<stdio.h>
    int main()
    {
       int n,i=0,*p;
       float average,max=0,min=0,sum=0;
      scanf("%d",&n);
      if((p=(int*)calloc(n,sizeof(int)))==NULL){
        printf("Not able to allocate memory.\n");
        exit(1);
      }
      for(i=0;i<n;i++)
      {
        scanf("%d",p+i);
        if(i==0)
        {
        	max=*(p+i);min=*(p+i);
    	}
        sum=sum+*(p+i);
        if(max<*(p+i))
        max=*(p+i);
        if(min>*(p+i))
        min=*(p+i);
      }
      printf("average = %.2f\n",sum*1.0/n);
      printf("max = %.2f\n",max);
      printf("min = %.2f\n",min);
      free(p);
    }
    

    错误信息:

    第五题:

                计算职工工资
    

    设计思路:

                      1:看题目:主函数,知道它要你干什么
                      2:构造结构:struct worker,并且在里面定义每个职工:姓名、基本工资、浮动工资和支出;名字为字符数组,其它都为float型;最后再用一个数组s[]记录这样的worker有多少
                      3:在主函数中:
                                              第一步:定义N,i=0;N为有多少职工,i为s[]的下标;
                                              第二步:输入N,在利用一个for循环,将s[i]中元素全都输入,再s[i].w=s[i].bgong+s[i].fgong-s[i].x;最后输出s[i].name,s[i].w;
    

    流程图:

    实验代码:

    #include<stdio.h>
    struct student{
      char num[10],name[15];
      int x;
    }s[15];
    int main()
    {
      int i,n,sum=0;
      float average;
      scanf("%d",&n);
      for(i=0;i<n;i++)
      {
        scanf("%s%s%d",&s[i].num,&s[i].name,&s[i].x);
        sum=sum+s[i].x;
      }
      average=sum*1.0/n;
      printf("%.2f\n",average);
      for(i=0;i<n;i++)
      {
        if(s[i].x<average)
        printf("%s %s\n",s[i].name,s[i].num);
      }
    }
    

    错误信息:

    第六题:

            计算平均成绩
    

    设计思路:

                     1:看题目:主函数,知道它要你干什么
                     2:构造结构:struct student,并在里面定义学号,姓名,成绩;其中学号与姓名为字符数组,成绩为整形;最后再用一个数组s[]记录有多少学生
                     3:在主函数中: 
                                              第一步:定义i=0,n,sum=0;average;其中整形:i为s[]的下标,n为有多少学生,sum为求和;浮点型:平均数average
                                              第二步:输入n;再利用一个for循环,将s[]中元素全都输入scanf("%s%s%d",&s[i].num,&s[i].name,&s[i].x);sum=sum+s[i].x;
                                              第三步:求出平均数并输出它:average=sum*1.0/n;printf("%.2f\n",average);
                                              第四步:再利用一个for循环,输出每位平均线以下的学生的姓名和学号:printf("%s %s\n",s[i].name,s[i].num);
    

    流程图:

    实验代码:

    #include<stdio.h>
    struct student{
      char num[10],name[15];
      int x;
    }s[15];
    int main()
    {
      int i,n,sum=0;
      float average;
      scanf("%d",&n);
      for(i=0;i<n;i++)
      {
        scanf("%s%s%d",&s[i].num,&s[i].name,&s[i].x);
        sum=sum+s[i].x;
      }
      average=sum*1.0/n;
      printf("%.2f\n",average);
      for(i=0;i<n;i++)
      {
        if(s[i].x<average)
        printf("%s %s\n",s[i].name,s[i].num);
      }
    }
    

    错误信息:

    第七题:

               按等级统计学生成绩
    

    设计思路:

                     1:看题目:主函数,知道它要你干什么——实现一个根据学生成绩设置其等级,并统计不及格人数的简单函数
                      2在set_grade中:
                                                第一步:定义i,count=0;其中i为p[]的下标,count用于记录不及格人数
                                                第二步:利用一个for循环,判断p[i].score属于哪个范围,并赋值给相应的p[i].grade,最后在小于60分的条件中加入count++;
                                                第三步:返回count—— return count;
    

    流程图:

    实验代码:

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

    错误信息:

    错误1:我将p[i].grade='A'写成了p[i].score=‘A’;其它也同理

    改正方式:将它改回来

    第八题:

               结构体数组按总分排序
    

    设计思路:

                     1:看题目:主函数,知道它要你干什么——编写函数calc求出每名学生的总分。 编写函数sort按每名学生的总分从高到低对这组数据进行排序
                     2在calc中:
                                       第一步:定义i;它作为p[]的下标
                                       第二步:利用一个for循环:求n个p[i].sum——p[i].sum=p[i].score[0]+p[i].score[1]+p[i].score[2];
                     3在sort中:第一步:定义整形i,j;在定义一个struct student x;其中i用于内层for循环,j用于外层for循环,而x为交换的中间量
                                        第二步:利用一个冒泡排序法,将它们按每名学生的总分从高到低对这组数据进行排序
    

    流程图:

    实验代码:

    void calc(struct student *p,int n)
    {
      int i;
      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,j;
      struct student x;
      for(j=0;j<n-1;j++)
      {
        for(i=0;i<n-1-j;i++)
        {
          if(p[i].sum<p[i+1].sum)
          {
            x=p[i];p[i]=p[i+1];p[i+1]=x;
          }
        }
      }
    }
    

    错误信息:

    我的代码:


    https://gitee.com/yuanzhong19990808/my_code/upload/master

    我评论的人:

                           李新华:http://www.cnblogs.com/Lixinhua18/p/8671886.html
                           陈天胤:http://www.cnblogs.com/cty-1/
                           马钰娟:http://www.cnblogs.com/dfgfds/p/8662097.html
                           姜健:http://www.cnblogs.com/jj990519/
                           李伍壹:http://www.cnblogs.com/Lixinhua18/p/8671886.html
                           辛静瑶:http://www.cnblogs.com/X-JY/p/8652592.html
    

    评论我的人:

                         陈天胤
                         邱冠华
                         姜健
                         李伍壹
                         辛静瑶
    

    我的进度:


    我的总结:

                       删除字符串中数字字符:调用函数解决问题,还有用for循环
                       统计子串在母串出现的次数:调用函数,再用一个简单条件判断解决问题
                       字符串中除首尾字符外的其余字符按降序排列:用冒泡排序法进行排序
                       输出学生成绩:要用两个for循环分别找最大值与最小值
                       计算职工工资:利用结构解决问题
                       计算平均成绩:利用结构解决问题
                       按等级统计学生成绩:利用结构解决问题,还有多个if的条件判断
                       结构体数组按总分排序:利用结构解决问题,还有排序
  • 相关阅读:
    parent和top
    history
    [矩阵快速幂]T-shirt(2018江苏邀请赛I题)
    [学习]Java学习
    [数论]Factors of Factorial
    [RMQ][ST算法]Frequent values
    [二维树状数组]计数问题
    [树状数组]Mishka and Interesting sum(codeforces703D)
    [简单思维题]Snuke's Coloring 2-1
    [树状数组][逆序数]Ultra-QuickSort
  • 原文地址:https://www.cnblogs.com/2719610441qqcom/p/8660431.html
Copyright © 2020-2023  润新知