B101

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

所属年份:2011.9
给定程序中,函数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)时,进行替换。