有以下程序 #include <stdio.h> main() { int c; while((c=getchar())!='\n') {switch(c-'2') {case 0:

case 2:putchar(c+4);
case 3:putchar(c+4);break;
case 4:putchar(c+3);
case 5:putchar(c+3);break;}}
printf("\n");}
输入2743,请大侠详细解说过程,答案为66877

楼主,很抱歉,我用VC++6.0调试你给出的程序后,输入2743,但没有得到你所说的66877,而是66:88(中间是冒号)。

但我依然可以为你解答输出的原因。

我们慢慢来看这个程序的执行过程:
1、输入2743;
2、执行getchar(),将第一个字符'2'赋值给int整型的c,c='2';
3、判断c!='\n',语句为真,执行while循环体;
4、执行swithch()多重判断:
判断的内容是c-'2'。此时c='2',在这儿就是判断的'2'-'2',也就是0;
5、从case 0语句后开始执行,case 0后无语句,直接向下执行;
6、执行case 2处的语句,输出c+4的ASCII码对应的字符,即输出'2'+4对应的字符,就是'6',继续向下执行;
7、执行case 3处的语句,再次输出'6';
8、遇见break语句,跳出switch;

9、回到getchar(),将第二个字符'7'赋值给int整型的c,c='7';
10、判断c!='\n',语句为真,执行while循环体;
11、执行swithch()多重判断:
判断的内容是c-'2'。此时c='7',在这儿就是判断的'7'-'2',也就是5;
12、从case 5语句后开始执行,输出c+3的ASCII码对应的字符,即输出'7'+4对应的字符,就是':'(冒号);
13、遇到break语句,跳出switch;

14、获得4的步骤类似2,在此不再赘述,最后输出的是两个8;

15、最后获得3,在进行switch判断的时候,由于没有case 1与其对应,所以直接跳出switch,不执行任何语句;

所以输出的是66:88(中间是冒号),不是楼主所说的66877;

如果对switch语句熟悉的话,这个过程想起来很简单,没有我这里说得这么繁琐;
同时,这里还涉及到整型和字符型之间的计算,如果楼主静的下心来看的话,其实里面却是还是有点绕的。

恩恩,就说这么多吧~~~
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2016-06-20
答案是:66:88
#include <stdio.h>
main()
{
int c;
while((c=getchar())!='\n') //读取一个键盘输入的字符,如果不是换行符,进入下面循环
{
switch(c-'2') //输入的字符与字符'2'相减,以输入的2为例,'2'-'2'=0
{
case 0: //等于0执行这条语句,没有break继续执行,直到遇到break为止
case 2:putchar(c+4); //等于2执行这条语句,没有break继续执行,直到遇到break为止
case 3:putchar(c+4);break;///等于3执行这条语句,遇到break停止
case 4:putchar(c+3);//等于4执行这条语句,没有break继续执行,直到遇到break为止
case 5:putchar(c+3);break;///等于5执行这条语句,遇到break停止
}
}
printf("\n");
}本回答被提问者和网友采纳
第2个回答  2012-10-19
楼主的程序错了吧?答案不是66877!追问

求过程详解(主要是过程分析)好人给满分。

相似回答