题目
有以下程序,程序运行结果为( )。```#include "stdio.h"main()(char ch;ch='s';switch(ch){ case 'a': printf("a=%cn",ch);default: printf("end!n");case 'b': printf("b=%cn",ch);case 'c': printf("c=%cn",ch);)}```A. end! <回车> b=s <回车> c=sB. end!C. 有语法错误D. a=s <回车> end!
有以下程序,程序运行结果为( )。
```
#include "stdio.h"
main()
{
char ch;
ch='s';
switch(ch)
{ case 'a': printf("a=%c\n",ch);
default: printf("end!\n");
case 'b': printf("b=%c\n",ch);
case 'c': printf("c=%c\n",ch);
}
}
```
A. end! <回车> b=s <回车> c=s
B. end!
C. 有语法错误
D. a=s <回车> end!
题目解答
答案
程序中,`ch`的值为`'s'`,未匹配任何`case`,因此直接执行`default`分支。
1. 输出`end!`。
2. 由于缺少`break`,继续执行`case 'b'`和`case 'c'`。
3. 分别输出`b=s`和`c=s`。
最终结果为:
```
end!
b=s
c=s
```
答案:A. end!<回车>b=s<回车>c=s
解析
本题考查switch语句的执行流程和break语句的作用。解题思路如下:
- 首先明确
switch语句的工作原理,它会根据表达式的值去匹配各个case标签。如果匹配成功,则执行该case标签下的语句;如果没有匹配的case标签,则执行default标签下的语句。 - 接着分析程序中
ch的值为's',在switch语句的case标签中,并没有's'这个标签,所以会直接执行default分支。 - 然后看
default分支下的语句,它会输出end!\n。由于default分支后面没有break语句,程序不会跳出switch语句,而是会继续执行下一个case分支,也就是case 'b'分支。 - 在
case 'b'分支中,会输出b=%c\n,这里的ch值为's',所以实际输出为b=s\n。同样,case 'b'分支后面也没有break语句,程序会继续执行下一个case分支,即case 'c'分支。 - 在
case 'c'分支中,会输出c=%c\n,ch值为's',实际输出为c=s\n。 - 最后,由于
case 'c'分支后面没有其他case分支了,switch语句结束。