M030

02-程序修改题 软件154 范金瑞 901浏览

所属年份:2010年9月以前真考题目;

下列给定程序中函数fun的功能是:用插入排序法对字符串中的字符进行升序排列。插入法的基本算法是:先对头两个字符进行排序,然后把第三个字符插入到前两个字符中,插入后前三个字符依然有序;再把第四个字符插入到前三个字符中,……。待排序的字符串已在主函数中赋予。

请改正程序中的错误,使它能得出正确的结果。
注意:部分源程序在文件MODI1.C中,不得增行或删行,也不得更改的程序的结构!

#include <stdio.h>
#include <string.h>
#define    N   80
void  insert(char  *aa)
{
    int  i,j,n;
    char  ch;
    /**********found**********/
    n=strlen[ aa ];
    for( i=1; i<n ; i++ )
    {
        /**********found**********/
        c=aa[i];
        j=i-1;
        while ((j>=0) && ( ch<aa[j] ))
        {
            aa[j+1]=aa[j];
            j--;
        }
        aa[j+1]=ch;
    }
}
main( )
{
    char  a[N]="QWERTYUIOPASDFGHJKLMNBVCXZ";
    printf ("The original string :       %s\n", a);
    insert(a) ;
    printf("The string after sorting :  %s\n\n",a );
}

【参考答案】

(1)n=strlen( aa ) ;
(2)ch=aa[i];

【考点分析】
本题考查:插入排序法;strlen函数的使用。

【解题思路】
插入排序算法:先对字符串中的前两个元素进行排序,然后第三个元素插入到前两个元素中,三个元素依然有序,依次类推,完成排序。

(1)此处考查strlen函数的格式,应改为strlen(aa)。
(2)程序中并没有定义变量c,该语句的作用是将元素a[i]的值赋给中间变量ch,以与其他元素进行比较并交换,所以应改为ch=a[i]。