改错题 1.  下列给定程序中,函数proc()的功能是:读入一个字符串(长度<20),将该字符串中的所有字符按ASCII码升序排序后输出。
    例如,输入opdye,则应输出deopy。
    请修改程序中的错误,使它能得到正确结果。
    注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。
    试题程序:
    # include <string.h>
    # include <stdlib.h>
    # include <conio.h>
    # include <stdio.h>
    //****found****
    int proc(char str[])
    {
    char c;
    unsigned i,j;
    for(i=0;i<strlen(str)-1;i++)
    for(j=i+1;j<strlen(str);j++)
    if(str[i]>str[j])
    {
    c=str[j];
    //****found****
    str[j]=str[i++];
    str[i]=c;
    }
    }
    void main()
    {
    char str[81];
    system("CLS");
    printf("\nPlease enter a character
    string:");
    gets(str);
    printf("\n\nBefore sorting:\n%s",str);
    proc(str);
    printf("\nAfter sorting decendingly:\n%s",str);
    }
【正确答案】(1)错误:int proc(char str[])
   正确:void proc(char str[])
   (2)错误:str[j]=str[i++];
   正确:str[j]=str[i];
【答案解析】 由主函数中的函数调用可知,函数proc()没有返回值。因此,“int proc (char str[])”应改为“void proc (char str[])”;由函数proc()可知,if语句块完成将字符串str中的第i个元素与第j个元素相交换。因此,“str[j]=str[i++];”应改为“str[j]=str[i];”。