改错题
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];”。