以下这段C语言的输出的结果为?为什么?

#include <stdio.h>
main( )
{int a=2,b=7,c=5;
switch(a>0)
{case 1:switch(b<0)
{ case 1: printf("@"); break;
case 0: printf("!"); break;
}
case 0:switch(c==5)
{ case 0: printf("*"); break;
case 1: printf("#"); break;
default: printf("%%");break;
}
default: printf("&");
}printf("\n");
}

结果:!#&
#include <stdio.h>
main( )
{int a=2,b=7,c=5;
switch(a>0)//a=2,所以这条bool表达式的结果为1。但是实际不管这条bool语句的结果为什么,这一次的switch中的两个case都会执行,因为在结束第一个case的时候没有break语句来结束这一次的switch。
{case 1:switch(b<0)//执行这一句。判断b的值。b=7,所以这条bool表达式的结果为0
{ case 1: printf("@"); break;
case 0: printf("!"); break;//执行这一句 输出感叹号,结束这一次的switch

}
case 0:switch(c==5)//外层switch顺序执行到这里,c=5,所以这条bool表达式的结果为1
{ case 0: printf("*"); break;
case 1: printf("#"); break;//执行这一句,输出#。结束这一次的循环
default: printf("%%");break;
}
default: printf("&");//外层switch顺序执行到这里,不管怎样都会执行default,因为前面的case都没有break语句。这里会输出&
}printf("\n");//换行,结束程序
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-02-20

代码格式太乱,整理好格式,分析代码执行过程,并给出输出结果,如下:

第2个回答  2013-02-20
结果是&,并且光标换到下一行。
a=2,所以不会进入case 1和case 0,两个分支,后面的程序可以不看,直接进入
default: printf("&");

输入一个&;
default: printf("&");换行
所以:结果是&,并且光标换到下一行
第3个回答  2013-02-20
输出为“!#&\n"
首先switch(a>0),a>0为true(1),跳到case1 子块
然后执行switch(b<0),b<0为false(0),跳到case0子块,输出"!",然后break结束switch(b<0)
由于switch(a>0)的case1没有break,所以继续往下执行
同理,switch(c==5)中输出"#"
仍然由于switch(a>0)的case0没有break,继续执行default的部分,输出"&"
最后输出"\n"结束
第4个回答  2013-02-20
!#&

a>0为真,进入case 1
b<0为假,进入case 0,打印 !
由于最外面的switch的case 1中没有break;,继续执行case 0
c == 5为真,进入case 1,打印#
由于最外面的switch的case 0中也没有break;,继续执行default,打印&
相似回答