使用VC++2010打开考生文件夹下blankl中的解决方案。此解决方案的项目中包含一个源程序文件blank1.c。在此程序中,函数fun()的功能是在任意给定的9个正整数中找出按升序排列时处于中间的数,将原数据序列中比该中间数小的数用该中间数替换,位置不

admin2023-02-27  2

问题 使用VC++2010打开考生文件夹下blankl中的解决方案。此解决方案的项目中包含一个源程序文件blank1.c。在此程序中,函数fun()的功能是在任意给定的9个正整数中找出按升序排列时处于中间的数,将原数据序列中比该中间数小的数用该中间数替换,位置不变,在主函数中输出处理后的数列,并将中间数作为函数值返回。
  例如,有9个正整数:
  1 5 7 23 87 5 8 21 45
  按升序排列时的中间数:
  8
  处理后主函数中输出的数列:
  8 8 8 23 87 8 8 21 45
  请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
    注意:源程序存放在考生文件夹下的文件blank1.c中。不得增行或删行,也不得更改程序的结构!
    试题程序:
1 #include<stdio.h>
2 #define N 9
3 int fun(int x[])
4 {int i,j,k,t,mid,b[N];
5  for(i=0;i<N;i++)
6    b=x;
7  for(i=0;i<=N/2;i++)
8  {k=i;
9    for(j=i+1;j<N;j++)
10    if(b[k]>b[j])k=j;
11    if(k!=i)
12    {
13  /*********found*********/
14  t=b;b=<u>【1】</u>;
15  b[k]=t;
16    }
17  }
18  /*********found*********/
19 mid=b[<u>【2】</u>];
20 for(i=0;i<N;i++)
21  /*********found*********/
22  if(x<u>【3】</u>mid)x=mid;
23  return mid;
24 }
25  main()
26  {int i,x[N]={1,5,7,23,87,5,8,
21,45};
27  for(i=0;i<N;i++)
28    printf("%d",x);
29  printf("\nThe mid data is:%d\n",fun(x));
30  for(i=0;i<N;i++)
31    printf("%d",x);
32  printf("\n");
33 }

选项

答案(1)b[k](2)4或N/2(3)<

解析 数组x中9个元素任意排列,要找到按升序排列时处于中间位置的数,应首先对数组进行升序排列。因为只需找到中间位置的数即可,所以不必对整个数组进行排序,只需排列出数组的前半部分。找到中间数后,遍历原数组,对小于中间数的元素进行替换。
    填空1:利用选择算法排序。先指定一个元素为最小,用这个数与其后的所有数进行比较,若小于此数,则进行替换。此处考查替换操作。故空1处应该填b[k]。
    填空2:元素mid存放中间位置的数,数组长度为9,因此中间元素数为b[4]。故空2处应该填4或N/2。
    填空3:遍历数组,当元素小于中间位置的数(mid)时,进行替换。故空3处应该填<。  
转载请注明原文地址:https://jikaoti.com/ti/BBoiFFFM
0

最新回复(0)