函数fun的功能是:把形参a所指数组中的最大值放在a[0]中,接着求出a所指数组中的最小值放在a[1]中:再把a所指数组元素中的次大值放在a[2]中,把a数组元素中的次小值放在a[3]中;其余以此类推。例如:若a所指数组中的数据最初排列为:1、4、2、3、

admin2018-09-27  29

问题 函数fun的功能是:把形参a所指数组中的最大值放在a[0]中,接着求出a所指数组中的最小值放在a[1]中:再把a所指数组元素中的次大值放在a[2]中,把a数组元素中的次小值放在a[3]中;其余以此类推。例如:若a所指数组中的数据最初排列为:1、4、2、3、9、6、5、8、7,则按规则移动后,数据排列为:9、1、8、2、7、3、6、4、5。形参n中存放a所指数组中数据的个数。
    请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
    注意:源程序存放在考生文件夹下的BLANK1.C中。
    不得增行或删行,也不得更改程序的结构!
1  #include<stdio.h>
2  #defihe N 9
3  /**********found**********/
4  void fun(int ___1___,int n)
5  {  int i,j,max,min,px,pn,t;
6  /**********found**********/
7  for(i=0;i<n-1;i+=___2____)
8  {  max=min=a
9    px=pn=i;
10  /**********found**********/
11    for(j=___3___;j<n; j++)
12    {  if(max<a[j])
13    {  max=a[j];px=j;}
14    if(min>a[j])
15    {  min=a[j];pn=j;}
16    }
17    if(px!=i)
18    (t=a;a=max;a[px]=t;
19    if(pn==i) pn=px;
20    }
21    if(pn!=i+1)
22  {t=a[i+1];a[i+1]=min;a[pn]=t;}
23    }
24  }
25  main()
26  {int b[N]={1,4,2,3,9,6,5,8,7},i;
27  printf(’’\nThe original data:\n’’);
28  for(i=0;i<N;i++)printf(’’%4d’’,b);
29  printf(’’\n’’);
30  fun(b,N);
31  printf(’’\nThe data after moving:\n’’);
32  for(i=0;i<N;i++)printf(’’%4d’’,b);
33  printf(’’\n’’);
34  }

选项

答案(1)*a (2)2 (3)i+1

解析 本题中函数的功能是将数组中的元素下标为偶数的元素按照从大到小排序,下标为奇数的元素按照从小到大排序,相当于2个排序过程。在fun函数中,采用选择排序法进行排序,分别用max和min存储每次寻找的最大值和最小值,px和pn记录每次查找到的最大值和最小值的下标位置。
    第一空:主函数内fun函数的调用“fun(b,N);”,其中,b为整型数组名,故fun函数的第一参数为整型指针,又根据“max=a[j]”可知第一个参数名为a,故第一空处为“*a”。
    第二空:根据题意a所指数组中的最大值放在a[0]中,接着求出a所指数组中的最小值放在a[1]中;再把a所指数组元素中的次大值放在a[2]中,把a数组元素中的次小值放在a[3]中,升序排序和降序排序的下标变化是每次在前一次的基础上+2,即a[0]、a[2]、a[4]…降序排序,a[1]、a[3]、a[5]…升序排序,故第二空应为“2”。
    第三空:选择排序法中的升序排序,首先从数组中挑选一个最小的元素,把它和第一元素交换,接着从剩下的n-1个元素中再挑出一个最小的元素,把它和第二个元素交换,不断重复以上过程,直到比较完最后两个元素。故内层循环变量j应该从i+1开始。因此,第三空处应为“i+1”。
转载请注明原文地址:https://kaotiyun.com/show/byxp777K
0

最新回复(0)