改错题
1. 下列给定程序中,函数proc()的功能是:从m个学生的成绩中统计出低于平均分的学生人数,此人数由函数值返回,平均分存放在形参aver所指的存储单元中。
例如,输入8名学生的成绩:
98 78 67 56 34 89.5 78.5 76.5
则低于平均分的学生人数为3(平均分为72.187500)。
请修改程序中的错误,使它能得出正确的结果。
注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。
试题程序: #include<stdlib.h>
#include<stdio.h>
#include<conio.h>
#define M 20
int proc(float *s,int n,float *aver)
{
float ave,t=0.0;
int count=0,k,i;
for(k=0;k<n;k++)
//****found****
t=s[k];
ave=t/n;
for(i=0;i<n;i++)
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)错误:t=s[k];
正确:t+=s[k];
(2)错误:*aver=&ave;
正确:*aver=ave;
【答案解析】 由函数proc()可知,变量t中存放所有学生成绩之和,因此,“t=s[k];”应改为“t+=s[k];”。题目中要求将学生的平均成绩由形参aver返回给主函数,因此,“*aver=&ave;”应改为“*aver=ave;”。