请补充函数fun(),该函数的功能是:把数组aa中元素下标为偶数的元素按从小到大重新保存在原数组中,其它元素位置不变。 例如,输入“33,67,42,58,25,76,85,16,41, 56”,则输出“25,67,33,58,41,76,42,16

admin2010-09-14  32

问题 请补充函数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<s tdio. h>
   #define N 10
   void fun(int aa[])
   {
     int i, j, t;
     for (i=0; i<N;i=i+2)
     {
        for(【  】; j<N; j=j+2)
               if (【  】)
               {
                    t=aa [j];
                    aa [j] =aa ;
                    aa =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 );
     fun (aa);
     printf("\n*** new list ***\n");
     for(i=0; i<N; i++)
        printf ("%4d", aa );
}

选项

答案j=i或j=i+2 aa[i]>aa[j]

解析 第一空:本题采用选择法进行排序。选择法的算法思路是:如果有n个数则从头到倒数的第2个数一个一个往后走动,每走动一个数总是将这个数与其后的所有数进行两两比较,在比较时按题目要求的顺序将进行比较的这两个数排序 (即交换)。所以此空填j=i,而填j=i+2也可以,因为如果第一次执行循环体时j=i,则aa和aa[j]是同一个元素,不会引起任何改变,所以可以从它的下一次循环刀:始,即j=i=2。第二空:两两比较时,如果后面的元素比前面的元素小,则将两数交换,实现从小到大排列。
转载请注明原文地址:https://jikaoti.com/ti/2IkiFFFM
0

最新回复(0)