B078

01-程序填空题 田少松, 软件154 374浏览

所属年份:2011.3;2011.9;

给定程序中,函数fun的功能是:计算x所指数组中N个数的平均值(规定所有数均为正数),平均值通过形参返回给主函数,将小于平均值且最接近平均值的数作为函数值返回,并在主函数中输出。

例如,有10个正数:46、30、32、40、6、17、45、15、48、26,平均值为30.500000。

主函数中输出m=30。

请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。

注意:部分源程序在文件BLANK1.C中。

不得增行或删行,也不得更改程序的结构!

#include  <stdlib.h>
#include  <stdio.h>
#define   N   10
double fun(double  x[],double  *av)
{
    int  i,j;
    double  d,s;
    s=0;
    for(i=0; i<N; i++)  s = s +x[i];
    /**********found**********/
    __1__=s/N;
    d=32767;
    for(i=0; i<N; i++)
        if(x[i]<*av && *av - x[i]<=d)
        {
            /**********found**********/
            d=*av-x[i];
            j=__2__;
        }
    /**********found**********/
    return  __3__;
}

main()
{
    int  i;
    double  x[N],av,m;
    for(i=0; i<N; i++)
    {
        x[i]=rand()%50;
        printf("%4.0f ",x[i]);
    }
    printf("\n");
    m=fun(x,&av);
    printf("\nThe average is: %f\n",av);
    printf("m=%5.1f ",m);
    printf("\n");
}

【参考答案】

(1)*av  
(2)i  
(3)x[j]

【解题思路】
填空1:从原程序中可以看出*av代表的是平均值,而s/N表示的就是平均值,因此本空应该填*av。
填空2:if语句来判断找最接近平均值的数,因而此空应该填i。
填空3:题目要求将小于平均值且最接近平均值的数作为函数返回,而j表达的是最接近平均值的数在数组中的下标,因而本空应该填写x[j]。