下列给定程序中,函数fun()的功能是:利用插入排序法对字符串中的字符按从大到小的顺序进行排序。插入法的基本方法是:先对字符串中的头两个元素进行排序,然后把第3个字符插入到前两个字符中,插入后前3个字符依然有序;再把第4个字符插入到前3个字符中,待排序的字

admin2010-05-05  16

问题 下列给定程序中,函数fun()的功能是:利用插入排序法对字符串中的字符按从大到小的顺序进行排序。插入法的基本方法是:先对字符串中的头两个元素进行排序,然后把第3个字符插入到前两个字符中,插入后前3个字符依然有序;再把第4个字符插入到前3个字符中,待排序的字符串已在主函数中赋予。
   请改正程序中的错误,使它能得到正确结果。
   注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
   试题程序:
   #include <string.h>
   #include <stdio.h>
   #define N 80
   void insert(char *aa)
   {
   int i,j,n;  char ch;
   n=strlen(aa);
   for(i=1;i<n;i++)
     {
      ch=aa
      j=i-1;
   /*************found*************/
      while((j>=0)||(ch>aa[j]))
       {
       aa[j+1]=aa[j];
       j--;
     }
   /*************found*************/
       aa[j]=ch;
     }
   }
   main()
   {
   char a[N]="JRTYDFKLIOPQWEGHMNBVCUASXZ";
   int i;
   printf("The original string:  %S\n",a);
   insert(a);
   printf("The string after sorting:%S\n\n",a);
   }

选项

答案(1)错误:while((j>=0)||(ch>aa[j])) 正确:while((j>=0)&&(ch>aa[j])) (2) 错误:aa[j]=ch; 正确:aa[j+1]=ch;

解析 错误1:此处的两个条件要同时满足,是“与”的关系,而不是“或”的关系。错误2:对长度为n的数组元素进行排列,可先对数组的前m-1项进行排序,之后再对前m项进行排序,如此循环直到数组全部元素完成排序。对前m项的子数列进行排序的方法是,将该子数列的末尾元素与前m-1项的元素相比较,由于前m-1项已经完成排序,可以找到某一位   置,使得将该末尾元素插入该位置之后,前m项仍然保持降序。这样循环后,就可以得到全部元素的排序。掌握了这个方法,这行的错误就很容易找出来了。
转载请注明原文地址:https://kaotiyun.com/show/uXID777K
0

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