第三次作业

第一题:

             删除字符串中数字字符

设计思路:

                  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的条件判断
                   结构体数组按总分排序:利用结构解决问题,还有排序
posted @ 2018-03-27 21:55  袁中  阅读(432)  评论(10编辑  收藏  举报