下列给定程序中,函数fun()的功能是:将n个无序整数从小到大排序。请改正程序指定部位的错误,使它能得到正确结果。 注意: 不要改动函数main(),不得增行或删行,也不得更改程序的结构。 【试题源程序】 #include #inc

admin2017-01-11  10

问题 下列给定程序中,函数fun()的功能是:将n个无序整数从小到大排序。请改正程序指定部位的错误,使它能得到正确结果。
    注意:
    不要改动函数main(),不得增行或删行,也不得更改程序的结构。
    【试题源程序】
#include
#include
void fun(int n,int*a)
{
  int i,j,P,t;
  for(j=0;j<n-1;j++)
  {
  P=j;
  /**********found**********/
  for(i=j+1;i<n-1;i++)
    if(a[P]>a)
   /**********found**********/
    t=i;
    if(P!=j)
    {t=a[j];a[j]=a[p];a[p]=t;}
  }
}
void putarr(int n,int*z)
{
  int i;
  for(i=1;i<=n;i++,z++)
  {
    printf("%4d",*z);
    if(!(i%10))
    printf("\n");
    }
    printf("\n");
  }
  void main()
  {
    int aa[20]={9,3,0,4,1,2,5,6,8,10,7},n=11;
    printf("\n\nBefore sorting%d numbers:\n",n);putarr(n,aa);
    fun(n,aa);
    printf("\nAfter sorting%d numbers:\n",n);putarr(n,aa);
    }

选项

答案(1)错误:for(i=i+1;i<n-1;i++) 正确:for(i=j+1;i<n;i++) (2)错误:t=i; 正确:p=i;

解析 错误(1):选择排序法是在外循环中从第一个元素开始,依次与比它小的元素进行交换,直到交换完第n-1个元素,最后一个元素就是最大的元素,循环次数为n-1次,如果设定循环次数为n次,则最后一次第n个元素与自己交换;内循环是找出比当前元素更小的元素,故是从当前需要交换的元素的下一个元素开始,直到第n个元素。故for(i=j+1;i<n-1;i++)应改为for(i=j+1;i<n;i++)。
错误(2):t是fun函数中用来交换两个元素的辅助变量,不是交换元素下标的变量,因此t=i;是错误的。p是用来记录当前最小元素下标的,当a[p]>a时,把i赋给p。所以“t=i;”应改为“p=i;”。
转载请注明原文地址:https://kaotiyun.com/show/ouID777K
0

相关试题推荐
最新回复(0)