关于C语言字符型数据的一个问题

来源:百度知道 编辑:UC知道 时间:2024/06/05 16:10:21
有以下程序:
#include <stdio.h>
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");
}
从第一列开始输入数据:2473<CR>,<CR>代表Enter键,程序的输出结果是( )
A.668977
B.668966
C.66778777
D.6688766
本人电脑上没有编译器。。。
万望各位能详细解释,谢谢!

答案是A 668977
祥解:
#include <stdio.h>
void 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");
}
switch{}语句的执行规则是:首先找到switch (表达式) 括号中表达式的值 与case后的值相匹配的值,如果没有找到匹配的case就执行default后的语句。如果找到后就执行该case后对应的语句,直到遇到break,如果没有遇到,就继续执行下一个case(或default)后的语句,直到遇到break为止。

该题执行如下:

第一次,读入2,对应c - '2'的值为0,找到case 0 :匹配,但没有输出,然后case 1 : putchar ( c + 4 ); 输出6,之后case 2 : putchar ( c + 4 ); break; 输出6,遇到break,退出。进入下一次循环
第二次,输入4,对应c - '2'的值为2,case 0和case 1, 都不匹配不执行他们后面的语句。直到case 2 : putchar ( c + 4 ); break; 匹配,输出8,遇到break,退出。进入下一次循环
第三次:读入7,对应c - '2'的值为5。同理没有找到能够匹配的,所以执行default : putchar ( c + 2 ); break;输出9,遇到break,退出。进入