2011年计算机二级C语言十套上机题11
2. 改错题
下列给定程序中,函数fun()的功能是:从n个学生的成绩中统计出高于平均分的学生人数,人数由函数值返回,平均分存放在形参aver所指的存储单元中。例如输入8名学生的成绩:
85 65.5 69 95.5 87 55 62.5 75
则高于平均分的学生人数为4(平均分为74.312500)。
请改正程序中的错误,使它能得到正确结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include
#include
#define N 20
int fun(float *s, int n,float *aver)
{
/**********************found***********************/
int ave ,t=0;
int count=0,k,i;
for(k=0;k t+=s[k]; ave=t/n; for(i=0;i /**********************found***********************/ if(s[i] count++; /**********************found***********************/ aver=ave; return count; } main() { float s[30],aver; int m,i; clrscr(); printf("
Please enter m: "); scanf("%d",&m); printf("
Please enter %d mark :
",m); for(i=0;i scanf("%f",s+i); printf("
The number of students :%d
",fun(s,m,&aver)); printf("Ave=%f
",aver); } 答案及评析:(1)错误:int ave ,t=0;正确:float ave ,t=0.0;(2)错误:if(s[i] (3)错误:aver=ave;正确:*aver=ave; 【解析】错误1:ave和t分别用来存放成绩的平均值和总分,应为实型数。 错误2:根据题意,找出高于平均分的数,所以此处的关系运算符应为">" 错误3:aver是指针,而ave是一个数,不能将一个数赋值给一个指针,而要用符号’*’。