|  | 
 
 发表于 2021-4-20 12:13:57
|
显示全部楼层 
| 本帖最后由 Uair梦云 于 2021-4-20 12:15 编辑 
 
 习惯用 include 载入的文件,所以不太会extern,感觉有点鸡肋
  
 a,m,n 是数组在代码中出现太多的 a[i],m[i],n[i] 写成 a,m,n
 printf最后的 平均数ass 与 最小数add 搞反了
 for(i=1...中 i 应该等于 0 ,数组的第一个元素为0
 max min sum赋值为0.0,100.0,0.0更好
 max肯定比0大,否则就是0,min 同理
 统一i=0更直观   sum为0 相加即可,如果都是0,结果为0
 
 由于分数上限为100分,下限为0,可以加一个报错判断:
 
 #include<stdio.h>
 float num1,num2,num3,num4,num5;
 float a(float m[],int n)
 {
 int i;
 num1=num2=num3=num4=num5=0;
 for(i=0;i<n;i++)
 {
 if(m[i]>=90&&m[i]<=100)
 num1=num1+1;
 else if(m[i]>=80&&m[i]<90)
 num2=num2+1;
 else if(m[i]>=70&&m[i]<80)
 num3=num3+1;
 else if(m[i]>=60&&m[i]<70)
 num4=num4+1;
 else if(m[i]<60)
 num5=num5+1;
 }
 return num5;
 }
 int main()
 {
 extern float app(float a[],int n);
 extern float ass(float a[],int n);
 extern float add(float a[],int n);
 float n[100],aver;
 int i,m;
 printf("请输入学生的人数:");
 scanf("%d",&m);
 for(i=0;i<m;i++)
 {
 do        //增加判断循环
 {
 printf("请输入第%d个学生的成绩:",i+1);        //没有第0个学生一说吧
 scanf("%f",&n[i]);
 if(n[i]>100&&n[i]<0==0)
 {
 printf("错误,试卷分数应该在满分100分,白卷0分之间(包含100分和0分)\n");        //这里就是一个 报错信息 提示重新输入的
 }
 }while(n[i]>100&&n[i]<0==0);
 }
 aver=a(n,m);
 printf("90~100的有%.0f个\n80~90的有%.0f个\n70~80的有%.0f个\n60~70的有%.0f个\n小于60的有%.0f个\n最大值为%.2f,最小值为%.2f,平均分为%.2f\n",num1,num2,num3,num4,aver,app(n,m),add(n,m),ass(n,m));
 }
 extern float add(float a[],int n)
 {
 int i;
 float min=100.0;
 for(i=0;i<n;i++)
 {
 if(min>a[i])
 {
 min=a[i];
 }
 }
 return min;
 }
 extern float ass(float a[],int n)
 {
 int i;
 float ave,sum=0.0;
 for(i=0;i<n;i++)
 {
 sum+=a[i];
 }
 ave=sum/n;
 return ave;
 }
 extern float app(float a[],int n)
 {
 int i;
 float max=0.0;
 for(i=0;i<n;i++)
 {
 if(max<a[i])
 {
 max=a[i];
 }
 }
 return max;
 }
 | 
 |