给定程序MODll.C中函数fun的功能是:求出数组中最大数和次最大数,并把最大数和a[0]中的数对调、次最大数和a[1]中的数对调。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的

admin2013-04-02  38

问题 给定程序MODll.C中函数fun的功能是:求出数组中最大数和次最大数,并把最大数和a[0]中的数对调、次最大数和a[1]中的数对调。
    请改正程序中的错误,使它能得出正确的结果。
    注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include
#define N 20
int fun (int * a, int n)
{int i, m, t, k ;
  for(i=0;i<2;i++) {
/**********found**********/
    m=0;
    for(k=i+1;k/**********found**********/
      if(a[k]>a[m])
    t=a;a=a[m];a[m]=t;
  }
}
main()
{int x, b[N]={11,5,12,0,3,6,9,7,10,8}, n=10, i;
   for (i=0; i);
   printf("\n");
   fun (b, n);
   for (i=0; i);
   printf("\n");
}

选项

答案m=i; if(a[k]>a[m]) m=k;

解析 (1)第二个标识符下for循环逐个对m个数据进行选择判断,原题中“m=0;”语句将m值设置为0,在循环中m值始终是0,不会改变,根据“for(i=0;i<2;i++)”语句中的循环条件,“m=0;”改为“m=i;”。
(2)如果“if(a[k]>a[m])”,a[k]比a[m]大,m记录下下标值k,内层循环结束的时候a[m]值就是本次循环找到的最大值(如果m=0,a[m]是数组中的最大值;如果m=1,a[m]数组中的次最大值),即m记录最大值的下标值,因此第二标识下应该是“if(a[k]>a[m]) m=k;”。
转载请注明原文地址:https://kaotiyun.com/show/dDJp777K
0

最新回复(0)