C语言问题(第5章) 在线等

来源:百度知道 编辑:UC知道 时间:2024/06/01 13:38:57
#include <stdio.h>
void main ()
{ int a=1,b=7,c=5;
switch(a>0)
{ case 1:switch(b<0)
{ case 1:printf("@");break;
case 2:printf("!");break;
}
case 2:switch(c==5)
{ case 0:printf("*");break;
case 1:printf("#");break;
default:printf("$");break;
}
default:printf("&");break;
}
printf("\n",a,b);
}
程序结果为#& 麻烦说明下结果怎么得出来的

首先a>0
switch(a>0) 相当与`switch(1)``

case 1:switch(b<0)
相当与switch(0)
没有`所以不执行```
接下来执行
case 2:switch(c==5)
相当与switch(1)
执行case 1 case 1:printf("#");break;
最后执行`default:printf("&");break;
关键是在第1个switch中`没有break所以一直执行```

这个程序故意写得让人误解.两层switch套起来的,让你看不清其实最外层的switch是没有break的所以会执行到default.
另外最后那个printf也是匪夷所思.
结论:不像是正常项目,倒像是面试题.

最外面的switch(a>0)a>0表示为真,所以是switch(1)
然后,做case1,switch(b<0)就是switch(0)(道理同上)
接着,case里面没0的情况所以@和!都不输出
因为第一个case1:switch(b<0)这整个情况后没有break,所以case 2:switch(c==5)这句也要执行,包括最后那个default

switch(c==5)等价于switch(1)
执行
case 1:printf("#");break; 然后跳出case 2:switch(c==5)
在执行default,那么答案就是#&了

首先switch(a>0) 因为a=1,所以为真,值为1,
执行第一个 case 1: 内嵌switch(b<0) ,b=7为假 值是0,
不执行,直接跳出switch(b<0),
因为没有加break
程序不会跳出switch(a>0)
继续执行case 2:switch(c==5)
{ case 0:printf("*");