填空题 请补充函数fun(),该函数的功能是:把数组aa中元素下标为偶数的元素按从小到大重新保存在原数组中,其它元素位置不变。 例如,输入“33,67,42,58,25,76,85,16,41, 56”,则输出“25,67,33,58,41,76,42,16,85,56”。 注意:部分源程序给出如下。 请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。 试题程序: # include<stdio. h> #define N 10 void fun(int aa[]) { int i, j, t; for (i=0; i<N;i=i+2) { for({{U}} 【1】 {{/U}}; j<N; j=j+2) if ({{U}} 【2】 {{/U}}) { t=aa [j]; aa [j] =aa [i]; aa [i] =t; } } } main () { int i; int aa[N]={33, 67,42, 58, 25, 76, 85, 16,41, 56}; clrscr (); printf("/n*** original list ***/n"); for(i=0; i<N; i++) printf ("%4d", aa [i] ); fun (aa); printf("/n*** new list ***/n"); for(i=0; i<N; i++) printf ("%4d", aa [i] ); }
  • 1、
【正确答案】 1、[1] j=i或j=i+2 [2] aa[i]>aa[j]    
【答案解析】[解析] 填空1:本题采用选择法进行排序。选择法的算法思路是:如果有n个数则从头到倒数的第2个数一个一个往后走动,每走动一个数总是将这个数与其后的所有数进行两两比较,在比较时按题目要求的顺序将进行比较的这两个数排序 (即交换)。所以此空填j=i,而填j=i+2也可以,因为如果第一次执行循环体时j=i,则aa[i]和aa[j]是同一个元素,不会引起任何改变,所以可以从它的下一次循环开始,即j=i=2。填空2:两两比较时,如果后面的元素比前面的元素小,则将两数交换,实现从小到大排列。