main() {int a=2,b=7,c=5; switch(a>0) {case 1:switch(b<0) {case 1:printf(“@”); break; case 2: prin

main()
{int a=2,b=7,c=5;
switch(a>0)
{case 1:switch(b<0)
{case 1:printf(“@”); break;
case 2: printf(“!”); break;
}
case 0: switch(c==5)
{case 0: printf(“*”); break;
case 1: printf(“#”); break;
case 2: printf(“$”); break;
}
default : printf(“&”);
}
printf(“\n”);
}
答案是#& ,请说明

记住,如果switch如果中间没有break,那么就会从上向下一直执行。
首先:switch(a>0) a>0 所以为1
执行case 1:switch(b<0) 不满足,为0
switch(b<0)
{case 1:printf(“@”); break;
case 2: printf(“!”); break;
} //都不满足,没有break,继续向下
然后: case 0: switch(c==5)
{case 0: printf(“*”); break;
case 1: printf(“#”); break;
case 2: printf(“$”); break;
} //c==5 满足,值为1,执行case 1: printf(“#”); break;//[注]这里的break 是break掉switch(c==5),但是最外层的switch(a>0) 仍然没有break,所以继续向下执行
最后:执行default : printf(“&”);//此时仍然没有break,但是因为switch结束了,如果在switch中default下面还有的话仍然会继续执行
执行“\n”,程序结束
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-04-24
你这个是这样的,你首先应该明白“==”,他只管真假,即零和一,为真就为一,假就是零,你这个程序,如果把大的case 0直接写到大的case 1之前,输出肯定只有&,你将大的case 0写于大的case 1后面,那么当他判断case 1的时候,发现b>0,为假,直接跳到下一条指令(语句),(这里可以看出计算机实际上也不是那么的聪明,他只会顺序的执行命令,一旦错误进入,那。。。)即第二个大的case ,case 0中,他一看c,符合条件,为真,就是1,就直接执行这个判断里面的case 1,即会打印出#,最后打印出&。
不知你明白否?我语文不好~

补充一下,关于为什么你把大case 0写到大case 1之前,输出结果只会是default中的&,那也是由于若a>0,那么即为真,那么他会直接去执行case 1,而case 1中switch为假,直接不执行,直接跳到default打印。
这个题目就是对符号的考察~~
第2个回答  2011-04-24
晕。。。。。
switch((a>b&&b>c):
case (0): cout<<a<<b<<c<<en;break;
case (1): ……;break;
应该改成这样。。。。
上面就是如果a>b&&b>c为真就执行cout<<a<<b<<c<<en。
如果a>b&&b>c为假就执行什么什么……。
相似回答