试题四:阅读以下说明和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函数]
参考答案:
(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中的元素的比较处理,其对应的语句如下:
该语句的作用是将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”。