问题 填空题

在给定程序中,函数fun的功能是:计算形参x所指数组中N个数的平均值(规定所有数均为正数),将所有数据中小于平均值的数据移至数组的前部,大于等于平均值的数据移至X所指数组的后部,平均值作为函数值返回,在主函数中输出平均值和移动后的数据。
例如,有10个正数:46 30 32 40 6 17 45 15 48 26,平均值为30.500000;移动后的输出为:30 6 17 15 26 46 32 40 45 48。
请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。
注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构。
文件BLANK1.C内容如下:
#include<stdio.h>
#include<stdlib.h>
#define N 10
double fun(double* x)
int i,j;
double s,av,y[N];
s=0;
for(i=0;i<N;i++)s=s+x[i];
/**********found**********/
av= (1)
for(i=j=0;i<N;i++)
if(x[i]<av)
/**********found**********/
y[ (2) ]=x[i];
x[i]=-1;

for(i=0;i<N;i++)
/**********found**********/
if(x[i]!= (3) )y[j++]=x[i];
for(i=0;i<N;i++)x[i]=y[i];
return av;

void main( )
int i;
double x[N]=46,30,32,40,6,17,45,15,48,26;
for(i=0;i<N;i++)printf("%5.0f",x[i]);
printf("\n");
printf("\nThe average is:%f\n",fun(x));
printf("\narray x:\n"):
for(i=0;i<N;i++)printf("%5.0f",x[i]);
printf("\n");

答案

参考答案:-1

解析: 函数fun中要完成x数组中数据的移动,引入了第二个数组y,将小于平均值的数先放入y数组的前部,再将大于等于平均值的数放入y数组的后部,最后再将y数组的值赋值回x数组中。程序的算法是:首先通过第一个for循环求出x数组所有元素的和,跳出循环后,求出平均值赋给变量av,所以第1空处应填入s/N。在第二个for循环中,将x数组中所有元素与av进行比较,小于av的元素赋给y数组,由于x数组和y数组的元素下标变化规律不同,所以i作为x数组的元素下标,j作为y数组的元素下标。通过分析可以发现,循环中没有对j的值进行改变的语句,所以第2空处除了填入y数组的下标j外,还要完成j自加的操作,因此第2空处应填入j++,小于av的元素放入y数组后,将x数组中的值置为-1。在第三个for循环中,x数组中的元素又从头开始找出大于等于av的数放入y数组的后面,由于小于av的数已经置为-1,所以x[i]!=-1即为大于等于平均值的数,因此第3空处应填入-1。

填空题
单项选择题