问答题
下列给定程序中,函数fun()的功能是:将s所指字符串中的字母转换为按字母序列后续字母(但Z转换为A,z转换为a),其他字符不变。 请改正程序指定部位的错误,使它能得到正确结果。 [注意] 不要改动main函数,不得增行或删行,也不得更改程序的结构。 [试题源程序] #include<stdio.h> #include<ctype.h> void fun(char *s) /**********found**********/ while(*s!='@') if(*s>='A' && *s<='Z' || *s>='a' && 's<='z') if(*s=='Z') *s='A'; else if(*s=='z') *s='a'; else *s+=1; /**********found**********/ (*s)++; void main() char s[80]; printf("/n Enter a string with length<80. :/n/n "); gets(s); printf("/n The string:/n/n t"); puts(s); fun(s); printf ("/n/n The Cords: /n/n "); puts(s);
【正确答案】 (1)错误:while(*s!='@') 正确:while(*s)或while(*s!=0)或while(*s!='0') (2)错误:(*s)++; 正确:s++;或-s++;
【答案解析】 [解析] 错误1:while循环的结束条件是查找完字符串,即指向字符串结尾标志'/0'。由于字符'/0'的ASCAII码值为0,因而*s指向串尾'/0'时,*s的值为0,结束循环。所以while(*s!='@')应改为while(*s)或while(*s!=0)或while(*s!='/0')。 错误2:s为字符指针,*s为指针所指的字符,要处理完字符串中的所有字符,指针必须向字符串的后面移动,即s++或*s++,而不是字符值增加(*s)++。
提交答案
关闭