改错题 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;”。