改错题
1. 下列给定程序中,函数fun()的功能是:将str所指字符串中的字母转换为按字母序列的后续字母(Z转换为A,z转换为a),其他字符不变。
请修改函数fun()中的错误,得出正确的结果。
注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。
试题程序: #include <stdio.h>
#include
#include <conio.h>
void fun(char *str)
{
//****found****
while( *str!='@')
{
if(*str>='A'&&*str<='Z'||*str<='a'&&*str<='z')
{
if(*str=='Z')
*str='A';
else if(*str=='z')
*str='a';
else
*str+=1;
}
//****found****
(*str)++;
}
}
void main()
{
char str[80];
printf("<n Enter a string with length<80.:<n<n");
gets(str); printf("<n The string:<n<n");
puts(str);
fun(str);
printf("<n<n The Cords:<n<n");
puts(str);
}
【正确答案】(1)错误:while(*str!='@')
正确:while(*str)或while(*str!='<0')或while(*str!=0)
(2)错误:(*str++)
正确:str++
【答案解析】 首先判断字母是否为小写字母,如果是小写字母,则进行转换。
第一个标识下“while(*str!='@')”语句的原意是“str不指向字符串尾就进入下面的循环”,所以对于指针判断不为结束符的语句应该是循环为真,所以应为“while(*str)”“while(*str!='<0')”或“while(*str!=0)”。
第二个标识下“(*str)++;”是对字符内容加1,而原题是对字符位置加1,所以将其改为“str++;”。