谁帮我分析一下这道C语言题啊~

来源:百度知道 编辑:UC知道 时间:2024/06/13 21:31:32
main()
{
int c;
while ((c=getchar())!='\n')
switch(c-'2')
{case 0:
case 1:putchar(c+4);
case 2:putchar(c+4); break;
case 3:putchar(c+3);
default: putchar(c+2);break;
}}
输入2473 得668977 是怎么来的
太感谢了关键是那个c-'2'和那些c+4,+3,+2 不懂是什么意思

输入2473按下回车键时,第一次循环开始,程序从键盘缓冲区读入字符2,字符2-2=0;因此执行case0;其后没有break;所以再执行case1;还没有break,再执行case2,然后结束第一次循环,总共输出66这两个字符
getchar();函数有个特性就是若键盘缓冲区中还剩有数据便不再等待用户输出直接读入第一个字符,2已经被读取了,还有473和一个回车字符,因此第二次循环再将4读入,'4'-'2'的值为2,则执行case2,输出''4'+4'的字符值'8',结束第二次循环,第三次循环读入7,执行default输出9第四次循环读入3,执行case1和case2输出77;再执行循环遇到回车字符(按下回车键的同时,回车字符也会读入,因此程序才有可能以此作为结束的标志.)程序结束.

答案补充:
c为字符变量,c-'2'与;c-2不一样.
前者是两个字符的差值运算,是将两者的ascll码进行相减得到一个数值('2'是一个字符,其所对应的ascll码值为50.c语言中字符区别于其它变量或常量的标志是单引号.)
而后者是将c的ascll码值加上2后得到新的一个新的ascll码所对应的字符.
前者的运算结果是数值,后者的运算结果是字符.
如果不知道ascll码的概念的话,你应该学一下,这是C的基本知识.

ls说的很对 swith选择分支语句 case是每一种可能的情况,每个case后要有一个break

逐一判断2、4、7、3
例如2
c-'2'=0
执行case 0无结果,继续下一条case 1:c+4=2+4=6,继续下一条,就是6break,不执行下面,跳出循环体,
再读取4

switch是遇到break才结束的
1、输入2时c-'2'==0,执行case 0:
case 1:putchar(c+4);
case 2:putchar(c+4); break;
2、