
下列C语言程序运行时输入2473↙,则输出结果是( ) #include main() {int cx; while ((cx=getchar())!='\n') {switch(cx-'2') {case 0: case 1:putchar(cx+4); case 2:putchar(cx+4); break; case 3:putchar(cx+3); default:putchar(cx+2); } } } A. 668966 B. 668977 C. 6677877 D. 668876
好的,我们一步一步地分析这个 C 程序。
输入:2473
程序逐字符读取(getchar())直到 '\n'。
每次字符 cx 是 '2'、'4'、'7'、'3',分别处理。
对每个 cx 先计算 cx - '2'(即这个字符的数字 - 字符 '2' 的 ASCII 码)。
字符 '2':cx = '2' → cx - '2' = 0case 0: 无语句,直接进入 case 1:
执行 putchar(cx+4):'2' + 4 按 ASCII:'2' 的 ASCII 50,加 4 得 54,即字符 '6'
输出 '6'
然后因为 case 1: 后面没 break,继续执行 case 2: 的 putchar(cx+4)
再次输出 '6'。
遇到 case 2: 后面的 break 才跳出 switch。
所以 '2' 输出:66
字符 '4':cx = '4' → cx - '2' = 2case 2: 执行 putchar(cx+4):'4' + 4:'4' 的 ASCII 52,加 4 得 56,字符 '8'
输出 '8'break; 直接跳出 switch。
所以 '4' 输出:8
字符 '7':cx = '7' → cx - '2' = 5
无匹配的 case(0,1,2,3 都不匹配),执行 default 语句:putchar(cx+2)'7' + 2:'7' 的 ASCII 55,加 2 得 57,字符 '9'
输出 '9'default 执行完,switch 结束。
所以 '7' 输出:9
字符 '3':cx = '3' → cx - '2' = 1
跳到 case 1:(case 1 是匹配的),执行 putchar(cx+4):'3' + 4:'3' 的 ASCII 51,加 4 得 55,字符 '7'
输出 '7'
没有 break,进入 case 2::putchar(cx+4):又输出 '7'break; 结束 switch。
所以 '3' 输出:77
最终输出: 66 8 9 77 → 合并为 668977
B. 668977 ✅