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