填空题 下列给定程序中,函数proc()的功能是:从m个学生的成绩中统计出低于平均分的学生人数,人数由函数值返回,平均分存放在形参aver所指的存储单元中。例如输入8名学生的成绩: 60 70 80 90 65 75 85 95 则低于平均分的学生人数为4(平均分为77.5)。实际输入时学生数以回车键作为结束,成绩与成绩之间也与回车键作为分隔。 请修改程序中的错误,使它能得到正确结果。 注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。 试题程序: #inelude<stdlib.h> #include<stdio.h> #include<conio.h> #define M 20 int proc (float *s, int n, float * aver) { //************found************* int ave, t=0; int count=0, k, i; for(k=0; k<n; k++) t+=s[k]; ave=t/n; for(i=0; i<n; i++) //************found************ if(s[i]>ave) count++; //************found************* aver=ave; return count; } void main() { float stu[30], aver; int m, i; system("CLS"); printf("/nPlease enter m: "); scanf("%d", &m); printf("/nPlease enter%d mark: /n", m); for(i=0; i<m; i++) scanf("%f", stu+i); printf("/nThe number of students: %d/n", proc(stu, m, &aver)); printf("Ave=%f/n", aver); }
  • 1、
【正确答案】 1、(1)错误:int ave, t=0; 正确:float ave, t=0.0; (2)错误:if(s[i]>ave) 正确:if(s[i]<ave) (3)错误:aver=ave; 正确:*aver=ave;    
【答案解析】[解析] 由程序可知变量ave和t中分别存放的是学生的平均分数和分数的总和,都是float型数据。因此int ave, t=0;应改为float ave, t=0.0;题目要求统计出低于平均分数的学生人数,因此if(s[i]>ave)应改为if(s[i]<ave);平均分数是通过指针变量传递回主函数的,因此aver=ave;改为*aver=ave。