M94

02-程序修改题 软件154 范金瑞 1298浏览

所属年份: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为语法指向的错误。