一道C语言很简单的题目,求助!!

来源:百度知道 编辑:UC知道 时间:2024/05/29 18:52:25
#include <stdio.h>
void main()
{
int x=0,y=2,z=3;
switch(x)
{case 0 :switch(y==2)
{case 1 :printf("*");break;
case 2:printf("%");break;
}
case 1 :switch(z)
{case 1 :printf("$");
case 2:printf("*");break;
default :printf("#");
}
}
}
答案是*#
请问是怎么输出的?详细点

它里面有一个递归调用:
当X=0时,执行case 0:进入
switch(y==2)
{case 1 :printf("*");break;
case 2 :printf("%");break;
}
因为里面只是一个比较过程,而没有所要执行的值,switch()中没有找到匹配的就按顺序执行下去,遇到case 1 :printf("*");break;输出一个“*”;跳出;
接下来执行,case 1:switch(z),(说明:z=3)
找到case 3,而现在没有只能找最后一个default:printf("#");
所以最后只执行default:printf("#");
最后输出 * #;
完毕。理解否?

不是很简单嘛,switch(0)转到CASE 0执行
switch(2)输出* 此时BREAK跳出swith函数,但是DEFAULT也一定要执行所以再输出#