第二次作业

题目6-7 删除字符串中数字字符

设计思路

1、算法

第一步:定义i与j
第二步:运用for循环,如果字符为数字则 s[j]='\0',不为数字则 s[j]=s[i]。

2、流程图

代码

void delnum(char *s)
{
  int i,j;
  for(i=0,j=0;s[i]!='\0';i++)
  {
  if(s[i]<'0'||s[i]>'9')
  {
  s[j]=s[i];
  j++;
  }
  }
  s[j]='\0';
}

错误

未编写s[j]='\0'导致答案一直错误。
改正:问过同学加上了s[j]='\0'。

题目6-8 统计子串在母串出现的次数

设计思路

1、算法

第一步:定义fun函数,定义变量i。
第二步:运用for循环与if进行判断,查找到子串的首字符,若相等则验证第二个字符,后面一样运用四个。
第三步:若字符相等则数字n加一,最后返回n的值。

2、流程图

代码

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

错误


不知怎样运用字符串来查找相同,看了同学的博客才有此答案。

题目6-9 字符串中除首尾字符外的其余字符按降序排列

设计思路

1、算法

第一步:定义i与j与swap。
第二步:用双重for循环对字符进行降序排列。

代码

int fun(char *s,int num)
{
  int i,j,swap;
   for(i=1;i<num-1;i++)
    for(j=1;j<num-1-i;j++)

  {
    if(s[j]<s[j+1])
    {
      swap=s[j];s[j]=s[j+1];s[j+1]=swap;
    }
  }
}

错误


忘记了不排序首尾。

题目7-1 输出学生成绩

设计思路

1、算法

第一步:定义学生人数n,平均值,最大值与最小值
第二步:运用for循环,算出总和,再算平均值,运用for循环,查找最大值与最小值
第三步:输出平均值,最大值与最小值

代码

#include<stdio.h>
int main()
{
  int n,i;
  double average,max,min,sum=0;
  scanf("%d",&n);
  double a[n];
  for(i=0;i<n;i++)
  {
  scanf("%lf",&a[i]);
  sum=sum+a[i];
  }
  average=sum/n;
  max=a[0];
  min=a[0];
  for(i=0;i<n;i++)
  {
    if(max<a[i])
    {
      max=a[i];
    }
    if(min>a[i])
    {
      min=a[i];
    }
  } 
printf("average = %.2f\n",average);
  printf("max = %.2f\n",max);
  printf("min = %.2f",min);
  return 0;
}

错误


题目7-1 计算职工工资

设计思路

1、算法

第一步:定义结构体gongzi,
第二步:用while输入职工的姓名,基本工资,浮动工资
第三步:算出实发工资

2、流程图

代码

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

错误


出现段错误,输入的字符串用了&
改正:重新写输入。

题目7-2 计算平均成绩

设计思路

1、算法

第一步:定义结构体student,输入name,xuehao,chengji,
第二步:在for循环中算出sum,再算出平均值
第三步:用for循环输出成绩小于平均值的学生的名字与学号。

代码

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

错误


题目6-1 按等级统计学生成绩

设计思路

1、算法

第一步:定义i与x,并使x为0,运用for循环与if判断
第二步:根据分数分等级
第三步:运用循环查找等级是D的数字
第四步:返回到等级为x的值

代码

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

错误

题目6-2 结构体数组按总分排序

设计思路

1、算法

第一步:定义一个calc函数,用for循环算出sum。
第二步:定义一个sort函数,用类似于冒泡排序法对学生的sum进行排序,

2、流程图

代码

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])*1.0;
  }
}

void sort(struct student *p,int n)
{
  int i,j;
  struct student temp;
  for(i=0;i<n-1;i++)
  {
    for(j=0;j<n-i-1;j++)
    {
      if(p[j].sum<p[j+1].sum)
      {
       temp=p[j];p[j]=p[j+1];p[j+1]=temp;
      }
    }
  }
}

错误


开始是只交换了总成绩导致答案错误,后来用int来定义swap导致不能正常进行交换而编译错误。

总结:对结构体的使用有了初步的了解,但深入使用时还是容易出错,要多练习关于此种题的各种综合运用。

点评:
宋晨继
王文博
王帅
邱冠华

希望大家多多点评,互帮互助。

posted @ 2018-04-07 23:21  秦保岩  阅读(188)  评论(2编辑  收藏  举报