下列给定的程序中,函数fun()的功能是:用选择法对数组中的n个元素按从小到大的顺序进行排序。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序: #include<stdio.h> #define N 20 void fun(int a[],int n) {int i,j,t,p; for (j=0;j<n-1;j++) /*************found**************/ {p=j for(i=j;i<n;i++)if(a[i]<a[p]) /*************found**************/ p=j; t=a[p]; a[p]=a[j]; a[j]=t; } } main() {int a[N]={9.6,8,3,-1},i,m=5; printf("排序前的数据: "); for(i=0;i<m;i++) printf("%d",a[i]);printf("\n"); fun(a,m); printf("排序后的顺序: "); for(i=0;i<m;i++) printf("%d",a[i]);printf("\n"); }
参考答案:错误:p=j 正确:p=j;
解析:(2) 错误:p=j; 正确:p=i; 题中所提到的“从小到大”的顺序。这类题都可以利用选择法,即从后N个比较过程中,选择一个最小的与第一个元素交换,依次类推,即用第二个元素与后N-1个进行比较,并进行交换。该题也是与我们常见的C语言排序题类似,当然也是改错和编程题中的重点,请看同类试题,以便达到举一反三的目的。