阅读以下说明和C语言函数,将应填入(n)处。 [说明] 函数int find_Max_Min(int a[],int n)的功能是:找出n个元素的数组a中的最大元素和最小元素并输出,返回查找过程中元素的比较次数。查找方法如下:比较a[0]和a[n-1

admin2008-04-03  29

问题 阅读以下说明和C语言函数,将应填入(n)处。
[说明]
   函数int find_Max_Min(int a[],int n)的功能是:找出n个元素的数组a中的最大元素和最小元素并输出,返回查找过程中元素的比较次数。查找方法如下:比较a[0]和a[n-1],若a[0]大,则交换a[0]和a[n-1]的值:再比较a[1]和a[n-2],若a[1]大,则交换a[1]和a[n-2]的值;以此类推,直到所有的元素都比较完。然后在数组的前半区从前往后找出小元素,在后半区从后往前找出大元素。
[函数]
   int find_Max_Min(int a[],int n)
   {/*找出n个元素的数组a的最大、最小元素并输出,返回查找过程元素中的比较次数*/
   int i,Count=0;
      int temp,Maxnum,Minnum;
   for(i=0; i<n/2; i++){
    Count=Count+1          /*元素比较次数计数*/
        if(a>a[(1)])
           {/*数组元素交换代码略*/}
   }
     Maxnum=a[n-1];  Minnum=a[0];
   for(i=1;i<n/2+n%2;i++){
        Count=(2);                  /*元素比较次数计数*/
        Minnum=(3)? a:Minnum;    /*找最小元素*/
        Maxnum=(4)?(5):Maxnum; /*找最大元素*/
     }
     printf("Max=%d\n",Maxnum);
     printf("Min=%d\n",Minnum);
   return Count;
   }

选项

答案(1)n-i-1(2)Count+2(3)a[i]<Minnum (4)a[n-i-1]>Maxnum(5)a[n-i-1]

解析 本题考查编写C语言程序的基本知识。
   先分析第一个for语句。
   for(i=0; i<n/2; i++){
    Count=Count+1;          /*元素比较次数计数*/
         if(a>a[  (1)  ])
                {/*数组元素交换代码略*/)
   }
   根据函数int find_Max_Min(int a[],int n)的功能以及题于中描述的查找方法,可知经过第一个for循环后,数组a中的元素被分成了前半区(最小元素所在区域)和后半区 (最大元素所在区域)。由于元素a[0]与a[n-1]比较,a[1]与a[n-2]比较,由于i值随循环的变化规律是0,1,2,…,因此空(1)处应填入n-1-1。
   再分析第二个for语句,此前先假设a[n-1]为最大元素Maxnum,a[0]为最小元素 Minnum。
   for(i=1;i<n/2+n%2;i++){
         Count=  (2)  ;                            /*元素比较次数计数*/
              Minnum=  (3)  ?a:Minnum;          /*找最小元素*/
              Maxnum=  (4)  ?  (5)  :Maxnum;     /*找最大元素*/
   }
   显然,同一个循环中在前半区查找最小元素,在后半区查找最大元素,元素比较次数计数器count的值随循环每次增加2。由于i值的变化规律为0,1,2,…,因此空(3)处填入“a<Minnum”,结合“? a:Minnum” 表示找到更小元素a时用a更新 Minnum的值:同理,在后半区找到更大元素时更新Maxnum的值,题干中已经明确在后半区从后往前找出大元素,因此空(4)处应填入“a[n-I-1]>Maxnum”,空(5)处填入“a[n-i-1]”。
转载请注明原文地址:https://kaotiyun.com/show/BsjZ777K
0

最新回复(0)