问题 填空题

请补充函数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( 【1】 ; j<N; j=j+2)
if ( 【2】 )

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

单项选择题 A1型题
单项选择题