有以下程序
#include
main()
{
char 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<回车>
程序的输出结果是()。
A
668977
B
4444
C
6677877
D
68766
这个程序的意思是输入字符,然后在swith里面匹配case打印字符,答案是选A,具体过程如下:
首先,第一个数字2,进入switch(),用数字字符'2'-数字字符'2'来匹配case,匹配到case 0 , 就打印字符 '2'+4 = '6' ;然后因为case0 和case 1 公用的putchar(c+4)后面没有break,所以继续往下执行case 2, 这里打印 '2'+4='6', 这里有break停止往下执行,开始判断下一个字符;
然后,第二个数字4,'4'-'2'=2,配到到case 2, 打印'4'+4 =8 ,然后执行break,停止往下执行,开始判断下一个字符;
接着,第三个数字7 ,'7'-'2'=5, case都不匹配,执行default ,打印 '7'+2 ='9' ,然后开始判断下一个字符;
接着,第四个字符3 ,'3'-'2'=1, 匹配到case 1 ,打印'3'+4 = '7' ,没有break,继续往下执行,执行case 2 , 打印 '3'+4='7'.
最后,是输入数字后面有个换行符,while循环条件不满足,程序结束。
打印的数字依次是:668977 , 所以,答案选A。
#include <stdio.h>
main()
{
char 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" );
}
while( ( c=getchar() )!= '\n' )写错了吧?是'\n'吧?
分别用你输入的字符ASCII去减2的ASCII,然后再输出对应的结果
getchar一次只取一个字符
while循环表示当你输入不是换行时 执行循环
所以 逐个输入2473 回车
第一个开关 值 ‘2’ -‘2’ Anscii码相减 结果为0 case 0 无break 继续向下执行 遇到case1
case1 输出字符‘2’+4 即为 ‘6‘
依次类推 得到 668977