问答题 给定程序中,函数fun的功能是:在任意给定的9个正整数中找出按升序排列时处于中间的数,将原数据序列中比该中间数小的数用该中间数替换,位置不变,在主函数中输出处理后的数据序列,并将中间数作为函数值返回。 例如,有9个正整数:1 5 7 23 87 5 8 21 45 按升序排列时的中间数为:8 处理后主函数中输出的数列为:8 8 8 23 87 8 8 21 45 请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构! 试题程序: #include<stdio.h> #define N 9 int fun(int x[]) {int i,j,k,t,mid,b[N]; for(i=0;i<N;i++) b[i]=x[i]; for(i=0;i<=N/2;i++) { k=i; for(j=i+1;j<N;j++) if(b[k]>b[j])k=j; if(k!=i) { /*********found*********/ t=b[i];b[i]= 【1】 ; b[k]=t; } } /*********found*********/ mid=b[ 【2】 ]; for(i=0;i<N;i++) /*********found*********/ if(x[i] 【3】 mid)x[i]=mid; return mid; } main() {int i,x[N]={1,5,7,23,87,5,8,21,45}; for(i=0;i<N;i++) printf("%d",x[i]); printf("\nThe mid data is:%d\n",fun(x)); for(i=0;i<N,i++) printf("%d",x[i]); printf("\n"); }
【正确答案】正确答案:(1)b[k] (2)4或N/2 (3)<
【答案解析】解析:数组中的9个数任意排列,要找到按升序排列时处于中间位置的数,应首先对数组进行升序排列。因为只需找到中间位置的数即可,故不必对整个数组进行排序,只需要排列出数组的前半部分。找到中间数后,遍历原数组,将小于中间数的元素进行替换。 填空1:利用选择算法排序,先指定一个元素为最小,用这个数与其后的所有数进行比较,若找小于此数,则进行替换。此处考查替换操作。 填空2:元素mid存放中间位置的数,数组长度为9,因此中问元素数为b[4]。 填空3:遍历数组,当元素小于中间位置的数(即mid)时,进行替换。