第二次作业

第一题:

          删除字符串中数字字符

设计思路:

描述方法:

   第一步:调用函数delnum
   第二步:利用for循环遍历数组并判断其中的数字字符与非数字字符
   第三步:如果是数字字符 *s=a[i];s++
   第四步:利用*s='\0'结束

流程图:

实验代码:

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

遇到的问题:

                   错误信息1:if判断忘记写()
                   改正方式:((a[i]<'0') ||( a[i]>'9'))
                   错误信息2:忘记结束字符数组
                   改正方式:*s='\0'

第二题:

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

设计思路:

描述方法:

   第一步:遍历数组
   第二步:将子串的每一个跟母串进行比较
   第三步:当一次比较结束后,次数加一并从后面的字符串中继续进行比较

流程图:

实验代码:

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

遇到的问题:

第三题:

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

设计思路:

描述方法:

   第一步:找到字符串中首尾字符的位置
   第二步:将中间的字符进行降序排列

实验代码:

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

遇到的问题:

                   错误信息1:在for循环中的判断条件写成了n<num-1
                   改正方式:n<num-1→n<num-2
                   错误信息2:在进行交换的时候将角标写成了i
                   改正方式:i→j

第四题:

          输出学生成绩

设计思路:

描述方法:

   第一步:定义数组和浮点型的sum,average,max,min
   第二步:利用for循环算出sum并求出average,同时找到max,min

实验代码:

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

遇到的问题:


错误信息:定义max,min时用了int 结果保留两位小数时忘记了小数点
改正方式:float max,min %2d→%.2d

第五题:

           计算职工工资

设计思路:

描述方法:

   第一步:定义一个结构体salary,里面得元素分别为name,basic,change,disbursement,real
   第二步:定义结构体变量a[n],利用for循环将数据输入
   第三步:利用for循环进行计算然后进行输出

流程图:

实验代码:

#include <stdio.h>
struct salary{
	char name[10];
	float basic;
	float change;
	float disbursement;
	float real;
};
#include <stdio.h>
struct salary{
	char name[10];
	float basic;
	float change;
	float disbursement;
	float real;
};
int main()
{
	int n,i;
	scanf("%d",&n);
	struct salary a[n];
	for(i=0;i<n;i++){
		scanf("%s %f %f %f",a[i].name,&a[i].basic,&a[i].change,&a[i].disbursement);
	}
	for(i=0;i<n;i++){
		a[i].real = a[i].basic + a[i].change - a[i].disbursement; 
		
	}
for(i=0;i<n;i++){
printf("%s %.2f\n",a[i].name,a[i].real);}
	return 0;
}

遇到的问题:


错误信息1:没注意题目要求其他输入、输出保证在单精度范围内
改正方法:将int型改为float型

                  错误信息2:将printf放在了第二个for循环内,应该另建一个for循环进行输出,但是放在第二个for循环内依然答案正确
                  改正方法:重新用一个for循环将数据输出

第六题:

          计算平均成绩

设计思路:

描述方法:

   第一步:定义结构体student,其中元素分别为num,name,grade
   第二步:定义结构体变量a[n],定义并初始i,n,sum=0
   第三步:利用循环输入数据然后再求出并输出平均数
   第四步:比较大小,输出成绩小于平均成绩的学生的姓名和学号

实验代码:

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

遇到的问题:


错误信息:虽然题中给出了字符串的长度但是却忘记了结尾的'\0'
改正方法:char num[6]; char name[11];

第七题:

         按等级统计学生成绩

设计思路:

描述方法:

   第一步:题中要求判断学生成绩的等级,还要求出不及格的人数
   第二步:定义count来计数不及格的人数,利用for循环来判断成绩的等级
   第三步:返回count

流程图:

实验代码:

int set_grade( struct student *p, int n )
{
  int count=0,i=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';
      count ++;
      }
  }
  return count;
}

遇到的问题:


错误信息1:指针不能改变某个元素,要想改变某个元素最好用数组
错误信息2:“==”是判断是否等于,“=”才是赋值
错误信息3: "||"是或,"&&"才是并且

第八题:

          结构体数组按总分排序

设计思路:

描述方法:

   第一步:题目要求求出总成绩并进行排序
   第二步:调用calc函数利用循环分别求出没名学生的成绩
   第三步:将temp定义成结构体变量的形式
   第四步:调用sort函数利用降序冒泡排序法进行排序

实验代码:

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 temp;
  for(i=0;i<n-1;i++){
    for(j=0;j<n-1-i;j++){
      if(p[j].sum<p[j+1].sum){
       temp = p[j];
       p[j] =p[j+1];
       p[j+1] = temp;
      }
    }
  }
}

遇到的问题:


错误信息1:计算总成绩是忘记了score的角标
错误信息2:调用sort函数时忘记将temp定义成结构体变量
改成方法:struct student temp

三、学习进度和总结

1、主要学习了结构体变量,我觉得这个还是比较简单的,但是指针到现在都不是太明白

2、

     https://gitee.com/lhdsb666/zuoye/tree/master

3、我点评的人:陆文奇 马卿辉 刘传海

4、


posted @ 2018-03-28 23:42  2班-林昊  阅读(288)  评论(6编辑  收藏  举报