以下程序的执行结果为什么是#&?

#include "stdio.h"main(){int a=1,b=2,c=1;switch(a>0){case1:switch(b<0){ case1:printf("@");break; case2:printf("!");break; }case0:switch(c==5){ case0:printf("*");break; case1:printf("#");break; case2:printf("$");break; } default:printf("&"); } printf("\n");}
错了 应该改成c=5

答案应该是*&,编译的结果也是这样,你的答案错了吧。
第一个switch(a>0) a>0为真,所以就是swtich(1)执行case1:switch(b<0),b<0为假所以就是0因为下面没有说明case 0的情况,而且第一层的swtich都没有break所以继续向下执行case0:switch(c==5),c==5为假所以就是swtich(0),执行case0:printf("*");break;打印出来一个*,跳出第二层swtich,由于第一层swtich又没有break,所以执行default:printf("&");打印出来&追问

题目打错了 应该改成c=5

追答

那就对了 c==5就是真了,那执行的就是case1:printf("#");break;打印出来的是#,下面的没问题了

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-01-02
a>0为真
所以执行case1:switch(b<0)
b<0为假,case1 case2都不会执行
由于switch(a>0)中的case1后没有break
继续执行case0:switch(c==5)
c==5为假,执行case0:printf("*");break
之后执行default:printf("&");

所以结果应该是*&
第2个回答  2014-01-02
&(就是这个结果)如果c=5的话还是不会执行,因为a>0为真,仍然只有“&”这个结果
第3个回答  2014-01-02
结果应该是*&吧
相似回答