C语言简单的一道题

来源:百度知道 编辑:UC知道 时间:2024/05/31 19:23:22
1.这道题输入247,结果是多少?2.是怎么算法,请告诉我算法。3.题中的“C-'2'”该怎么算? 请把你的解题思路告诉我,谢谢!
题目是下面这个
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;
}
}
printf("\n");

为什么247不作为一个整体参加运算,而是分开进行运算的?

1.结果如下:
6689

2.算法为:
输入c为2,或者3,则输出两次(c+4)
输入c为4,则输出一次(c+4)
输入c为5,则输出一次(c+3),在输出一次(i+2)
输入c为其他,则输出一次c+2

3.c-'2'就系c的ascall码值减去‘2'对应的ascall码值,c-‘2’,可以直接用输入字符代表的数字减‘2’得到结果,例如:c=‘9’,则c-'2'相当于'9'-'2'=7

4.注意,“case 0”,“case 1”行以及“case3”行没有break,因此在执行这三种情况的时候,会继续执行接下了的情况对应的语句,直至遇到“break”语句。例如“case 0”时,会执行putchar(c+4);putchar(c+4);break;

楼上正解,来逛一圈,2分拿走。顺便补充一句,当输入为247时
while((c=getch())!='n')是c=2,c=4,c=7的循环。

1.6667
2.c是Int型,所以c-'2'还是int型,switch语句只有遇到break才跳出,所以第一个2输入有两个6输出.
3.'2'表示的是字符2,c-'2'及为ASCII码相减.

1.6689;
2. getchar 从stdin流中读字符到c,输入”247“时,收到回车时开始读入数据:c=2: switch 中输出66
c=4: switch 中输出8
c=7: switch 中输出9
因此结果是:6689
3.另外:
c=2: 输出66
c=3: 输出77
c=4: 输出8
c=5: 输出87
c=6: 输出8
c=7: 输出9
c=8: 输出10
c=9: 输出11
c=0: 输出2
c=1: 输出3

为什么247不作为一个整体参