填空题 【说明】 函数move(int*a,int n)用于整理数组a[]的前n个元素,使其中小于0的元素移到数组的前端,大于0的元素移到数组的后端,等于0的元素留在数表中间。 令a[0]~a[low-1)小于0(初始为空);a[low]-a[i-1]等于0(初始为空);a[i]~a[high]还未考察,当前考察元素为a[i]。a[high+1]~a[n-1]大于0(初始为空)。 【函数】 move(int*a ,int n) { int i,low,high,t; low=i=0;high=n-1; while({{U}} (1) {{/U}}) if(a[i]<0) {     t=a[i];a[i]=a[low];a[low]=t; {{U}} (2) {{/U}};i++; } else if({{U}} (3) {{/U}}) { t=a[i];a[i]=a[high];a[high]=t; {{U}}(4) {{/U}}; } else{{U}} (5) {{/U}}; }
  • 1、
【正确答案】 1、i<=high (2)low++ (3)a[i]>0 (4)high-- (5)i++    
【答案解析】[解析] 程序的说明已经对程序的功能和相关变量解释得很清楚了,这儿就不再重复了。由变量i、变量low和变量high的含义和初值可以判断,i至high之间的元素还未处理,因此while循环条件是“i<= hish”或其等价形式,这就是(1)空所填写的内容。 (2)空所在语句块是处理当a[i]<0的情况,显然这时需要将a [i]与a[low]进行交换,交换后需要将i和low都要向后移动,因此(2)空处应填写“low++”或其等价形式。 (3)空需要填写执行(4)空所在语句块的条件,由(4)空所在语句块的可以判断,它是处理当a[i]>0的情况,因此(3)空处应填写“a[i]>0”或其等价形式。当a[i]>0时,需要将a[i]与a[high]进行交换,交换后需要将high都要向前移动,因此(4)空处应填写“high--”或其等价形式。注意这时i不能向后移动,因为交换后的a[i]还没有处理,需要循环的下一趟进行处理。 当a[i]=0情况,当a[i]=0时,不需要进行元素交换,只需将i向后移动就可以了,阅此(5)空处应填写“i++”或其等价形式。