问答题
给定程序中,函数fun的功能是:计算形参x所指数组中N个数的平均值(规定所有数均为正数),作为函数值返回;并将大于平均值的数放在形参y所指数组中,在主函数中输出。 例如,有10个正数:46 30 32 40 6 17 45 15 48 26,平均值为:30.500000 主函数中输出:46 32 40 45 48 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!1 #include<stdlib.h>2 #include<stdio.h>3 #define N 104 double fun(double x[],double *y)5 { int i,j;double av;6 /**********found**********/7 av=___1__;8 /**********found**********/9 for(i=0; i<N; i++) av = av+ __2__;10 for(i=j=0;i<N;i++)11 /**********found**********/12 if(x[i]>av)y[__3__]=x[i];13 y[j]=-1;14 return av;15 }16 main()17 { int i;double x[N],y[N];18 for(i=0;i<N;i++){ x[i]=rand()%50; printf(''%4.0f'',x[i]);}19 printf(''\n'');20 printf(''\nThe average is:%f\n'', fun(x,y));21 for(i=0 ; y[i]>=0;i++) printf(''%5.1f'',y[i]);22 printf(''\n'');23 }
【正确答案】正确答案:(1)0 (2)x[i]/N (3)j++
【答案解析】解析:函数fun的功能是计算形参x所指数组中N个数的平均值,同时利用传址参数传回平均值。 第一空:“return av;”可知变量av保存了平均值,故第一空处aV初始化应为0,即第一空处应填“0”。第二空:“for(i=0;i<N;i++) av=av+__2__;”后面的循环就是比较比平均值大的元素,因此这个循环结束后av中的值就是平均值。由“av=(x[0]+x[1]+…x[N-1])/N=x[0]/N+x[1]/N+…+x[N-1]/N”可知,第二空处应为“x[i]/N”。第三空:“if(x[i]>av)y[__3__]=x[i];”是将x[i]保存在y所指的数组中,i是循环变量,j初始化为0,故y[]的计数变量为j,故第三空处应为“j++”。