填空题
请补充函数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] 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:两两比较时,如果后面的元素比前面的元素小,则将两数交换,实现从小到大排列。