下列给定程序中,函数fun()的功能是:将s所指字符串中的字母转换为按字母序列后续字母(但Z转换为A,z转换为a),其他字符不变。 请改正程序指定部位的错误,使它能得到正确结果。 [注意] 不要改动main函数,不得增行或删行,也不得更改程序的

admin2010-11-26  13

问题 下列给定程序中,函数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)++。
转载请注明原文地址:https://jikaoti.com/ti/yBkiFFFM
0

相关试题推荐
最新回复(0)