下列给定程序中,函数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);
参考答案:(A)错误:int ave, t=0; 正确:float ave, t=0.0;
(B)错误:if(s[i]>ave) 正确:if(s[i]<ave)
(C)错误: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。