改错题
给定程序中函数fun的功能是:求出数组中最大数和次最大数,并把最大数和a[0]中的数对调、次最大数和a[1]中的数对调。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
给定源程序:
#include <stdio.h>
#define N 20
void fun(int *a,int n)
{ inti,m,t,k;
for(i=0;i<2;i++){
/**********found**********/
m=0;
for(k=i+1;k<n;k++)
/**********found**********/
if(a[k]>a[m])k=m;
t=a[i];a[i]=a[m];a[m]=t;
}
}
main()
{ int b[N]={11,5,12,0,3,6,9,7,10,8}, n=10,i;
for(i=0; i<n; i++) printf('%d',b[i]);
printf('\n');
fun(b,n);
for(i=0; i<n; i++) printf('%d',b[i]);
printf('\n');
}
【正确答案】(1)m=i; (2)if(a[k]>a[m]) m=k;
【答案解析】 (1)这是一段简单的比较程序,m为有效比较数的下标。从下面的程序可以看出m=i;。 (2)为m赋值为当前最大元素的下标与后面的元素比较,因此m=k;。