列表

详情


阅读以下说明和 C 函数,填充函数中的空缺,将解答填入答题纸的对应栏内。
【说明】
己知两个整数数组 A 和 B 中分别存放了长度为 m 和 n 的两个非递减有序序列,函数 Adjustment(A,B,m,n)的功能是合并两个非递减序列,并将序列的前m个整数存入A中,其余元素依序存入 B 中。
例如:

合并过程如下:从数组 A 的第一个元素开始处理。用数组 B 的最小元素 B[0]与数组 A  的当前元素比较,若 A 的元素较小,则继续考查 A 的下一个元素;否则,先将A的最大元素暂存入temp ,然后移动A中的元素挪出空闲单元并将 B[0]插入数组 A ,最后将暂存在temp 中的数据插入数组B的适当位置(保持 B的有序性)。如此重复,直到A中所有元素都不大于B中所有元素为止。【C 函数】
   void Adjustment(int  A[] ,int B[] ,int m ,int n)
   {     /*数组 A 有 m 个元素,数组 B 有 n 个元素*/
          int i ,k ,temp;
             
          for(i = 0;  i < m;  i++)
          {
            if  (A[i]  <= B[0])  continue;
 
            temp  =(1);           /*将 A 中的最大元素备份至 temp */
 
  /*从后往前依次考查 A 的元素,移动 A 的元素并将来自 B 的最小元素插入 A 中*/
            for(k = m-1;       (2);  k--)
            A[k] = A[k-1];
  A[i] =(3);
 
  /*将备份在 temp 的数据插入数组 B 的适当位置*/
            for(k  =  1;(4)&& k  < n;  k++)
               B[k-1] = B[k];
            B[k-1]  =(5);
     }
}

参考答案: (1) A[m-1,或*(A+m-1),或其等价表示
(2) k>i ,或其等价表示
(3) B[0] ,或*B
(4) temp> B[k],或 temp> *(B+k) ,或其等价表示
(5) temp

详细解析:

本题考查 C 程序设计基本技术。
题目中涉及的考点主要有一维数组及程序的运算逻辑,分析代码时首先要明确各个变量所起的作用,并按照语句组分析各段代码的功能,从而完成空缺处的代码。
根据题目中的说明和注释,此题的代码逻辑较为清楚。显然,A 的最大元素总是其
最后一个元素,因此,空(1)处应填入"A[m-1]"。
空(2)所在语句从后往前移动A的元素,然后将来自B的最小元素插入A 数组的适当位置,显然需要通过比较 B[0]与A中的元素来查找插入位置。
对于 B[0]与A中的元素的比较处理,其对应的语句如下:
for(i=0;i<m;i++)
{
    if(A[i]<=B[0])  continue;
    ...
}
该语句的作用是将i的值增加到 A[i] >B[0]时为止,即 B[0]是正好小于 A[i]且最接近 A[i]的元素时i的值。
因此,空(2)处应填入 "k〉i" ,使得其所在的for语句能完成将大于或等于 B[0]的元素向后移动(A[k]= A[k-1]) ,接下来在空(3)处将元素 B[0]的值放入A[i],即空(3)处应填入 "B[0]"。
最后需要将备份在temp的数据插入数组B的适当位置。由于原来保存在B[0]中的值已插入A中,因此 B[0]目前是一个空闲单元,如果temp的值比B[1]、B[2]等元素都要大,则需要将B[1]、B[2]等元素的值依次前移,因此空(4)处应填入"temp > B[k] "。完成元素的移动后,将暂存于temp中的元素放入B的适当位置,即空(5)处应填入"temp" 。

上一题