问题 问答题

【说明】 对20个数进行排序,可以利用选择法,即从后19个比较过程中,选择一个最小的与第一个元素交换,依次类推,即用第二个元素与后18个进行比较,并进行交换。 【函数】 #define N 20 main() { int i,j,min,tem,a[N]; printf("please input twenty num:\n"); for(i=0;i<N;i) { printf("a[%d]=",i); scanf("%d",&a[i]); } printf("\n"); for(i=0;i<N;i) printf(",",a[i]); printf("\n"); for(i=0; (1) ;i) { min= (2) ; for(j= (3) ;j<N;j++) if( (4) ) min=j; tem=a[i]; (5) ; a[min]=tem; } printf("After sorted \n"); for(i=0;i<N;i++) printf(",",a[i]); }

答案

参考答案:

解析:(1)i<N-1 (2)i (3)i+1 (4)a[min]>a[j] (5)a[i]=a[min]

[分析]: 本题考查C语言中的排序算法。 题目要求对20个数进行排序,并告诉我们利用选择法,即从后19个比较过程中,选择一个最小的与第一个元素交换,依此类推,即用第二个元素与后18个进行比较,并进行交换。它的每次排序的过程都是从元素中选取最小的一个排在当前排序序列的最前面,需要注意的是,程序中用数组的下标来协助完成排序。下面来具体分析程序。 第(1)空是循环的判断条件,而这个循环是一个二重循环的第一重,从程序中不难分析出,这个二重循环的作用是完成排序的过程,且这个排序的元素存放在数组a中,元素的个数为N个,而数组的下标是从0开始的,根据题目的意思,最多到最后一个元素的时候就不需要再排序了,它就是最大的元素。那么循环的上界应该是不大于N-1,因此此空答案为i<N-1。 第(2)空是给变量min赋一个值,根据题目要求,这个变量中存放的是当前排序序列中最小的元素的数组下标,而在开始排序之前,这里存放的是当前排序序列的第一个元素,每次参加排序的序列的第一个元素下标就是i,因此此空答案为i。 第(3)空是给第二重循环的循环变量j赋一个初值,这重循环的作用是从当前位置后面的元素中选一个最小的元素排在当前位置的后一个位置,那么循环应该是从当前位置的后一个位置开始,因此此空答案为i+1。 第(4)空是条件判断语句的判断条件,很明显,这个条件判断语句的作用是判断当前数组min中的值(最小元素)与当前位置元素的大小关系,如果小则继续与下一个元素比较,如果大则把数组中当前位置的元素的下标存放到min中,从min=j可以看出,应该是大,因此此空答案为a[min]>a[j]。 第(5)空也在循环中,从程序中不难看出是用来调换序列中元素的位置,上面的程序是将a[i]的值存放到临时变量tem中,a[i]中存放的元素应该是参加排序的序列中最小的元素值,而数组中下标min指明了序列中最小元素在数组中的位置,此空的任务就是将最小的元素放到数组的i位置,因此此空答案为a[i]=a[min]。

选择题
单项选择题