所属年份:2010.9;2012.3
下列给定程序中,函数fun的功能是:从n个学生的成绩中统计出低于平均分的学生人数,此人数作为函数值返回,平均分存放在形参aver所指的存储单元中。
例如,输入8名学生的成绩:80.5、60、72、90.5、98、51.5、88、64
则低于平均分的学生人数为4(平均分为75.5625)。
请改正程序中的错误,使它能得出正确的结果。
注意:部分源程序在文件MODI1.C中,不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include <stdlib.h> #include <stdio.h> #include <conio.h> #define N 20 int fun(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 s[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",s+i); printf("\nThe number of students :%d\n",fun(s,m,&aver)); printf("Ave=%f\n",aver); }
【参考答案】
(1)t+=s[k]; (2)*aver=ave;
【解题思路】
根据题目要求,可利用循环语句累计n个学生的总分,求得平均成绩后,再利用循环语句和条件选择语句进行后面的操作。若小于平均值,则将该值存放于aver存储单元中。t=s[k]是循环叠加错误,*aver=&ave为语法指向的错误。