下面这个程序是什么意思呀?谁来解释一下

有以下程序

#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" );
}

img

while( ( c=getchar() )!= '\n' )写错了吧?是'\n'吧?

分别用你输入的字符ASCII去减2的ASCII,然后再输出对应的结果

getchar一次只取一个字符
while循环表示当你输入不是换行时 执行循环
所以 逐个输入2473 回车
第一个开关 值 ‘2’ -‘2’ Anscii码相减 结果为0 case 0 无break 继续向下执行 遇到case1
case1 输出字符‘2’+4 即为 ‘6‘
依次类推 得到 668977