一个C语言题目的疑问,不知道怎么得出这样的答案

来源:百度知道 编辑:UC知道 时间:2024/07/02 06:18:41
题目如下:
#include "stdio.h"
main()
{
int a=0,b=2,c=3;
switch (a)
{
case 0:switch(b==2)
{case 1:printf("&");break;
case 2:printf("%");break;
}
case 1:switch(c)
{case 1:printf("$");
case 2:printf("*");break;
default:printf("#");
}
}
}
答案是:&#(在软件里运行了证明此答案是正确的)
疑问:因为a=0,所以它应该只执行case 0里面的语句,而不会牵涉到case 1里面的语句是吧,我做的答案是%,但答案是怎么算出来的?望高手指点。

首先,这是两层switch。

switch (a) 首先会进入case0,勿庸置疑,
然后switch(b==2),b==2是一个判断式,判断式的值只能为0或1,b==2为真,所以这个判断式值为1,因此switch(b==2)等价于switch(1);所以进入2层switch中的case1,打印出&;
然后break,跳出2层来到1层,
1层的case0没有break并且判为真了,所以1层case0下面的case都无条件执行,不判断。于是又进入第二个2层switch,由于没有符合c的,所以执行default,打印#。
最后结果就是&#

首先switch (a),a的值0,执行case 0:switch(b==2),其中表达式b==2为真,整个表达式的值默认为1,所以执行case 1:printf("&");break;,然后因为switch (a)
{
case 0:这一个大语句没有break,所以继续执行case 1:switch(c),c的值是3,执行default:printf("#"); 就这样了

你的case 0语句执行完了后没有加break,所以程序会继续执行下去。

恩,已经说的很详细了。