switch语句程序题

main()
{
int x=1,y=0,a=0,b=0;
switch(x)
{
case 1:
switch(y)
{
case 0:a++;break;
case 1:b++;break;
}
case 2:a++;b++;break;
case 3:a++;b++;
}
printf("a=%d,b=%d\n",a,b);
}
我用电脑运算的结果是a=2,b=1;可是我自己算的时候怎样算都觉得是a=1,b=0;望高手解答下、、

电脑算的没问题

main()
{
int x=1,y=0,a=0,b=0;
switch(x)
{
case 1://这时候x=1所以符合条件,执行下面的代码
switch(y)//这时候y=0
{
case 0:a++;break;//符合条件,执行a++,这时候a=1了,并跳出当前的switch,就是第二个switch,而不是上一级的switch
case 1:b++;break;
}
//这个地方是不是该加break,看你自己的需要了
case 2:a++;b++;break;//跳出后到了这,执行a++,B++,a=2,b=1,然后跳出第一个switch
case 3:a++;b++;//之前跳出了,所以这不会执行
}
printf("a=%d,b=%d\n",a,b);//输出结果是2,1
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-08-10
你的第一个case没有break,所以case 2:a++;b++;break会执行,a就变成2,b变成1了。

如果你在case 2:a++;b++;break;的上一行写上break;,就是你自己计算的结果。
第2个回答  2010-08-10
main()
{
int x=1,y=0,a=0,b=0;
switch(x)
{
case 1:
switch(y)
{
case 0:a++;break;
case 1:b++;break;
}
break;
case 2:a++;b++;break;
case 3:a++;b++;
}
printf("a=%d,b=%d\n",a,b);
}
第3个回答  2010-08-10
main()
{
int x=1,y=0,a=0,b=0;
switch(x)
{
case 1: //进入了 因为x=1
switch(y)
{
case 0:a++;break;//执行了 因为y=0,跳出后 a=a+1=1了
case 1:b++;break;
}
case 2:a++;b++;break;//由于case 中没有break (switch(y)中的break是跳出switch(y) 与switch(x)无关),所以这句执行了,使 a变成了2 ,b为1,然后跳出
case 3:a++;b++;
}
printf("a=%d,b=%d\n",a,b);
}
第4个回答  2010-08-10
呵呵,楼主粗心咯!
你这是个switch中有嵌套一个switch语句,第一个switch语句有三个case,嵌套的switch只有两个case。理解switch的执行过程,如果你每个case后面都不加上break 的话,那么将执行每一个case,而不管判断条件是否满足,你这个题目再执行了嵌套case0的时候结果a=,b=0,然后执行break,跳出嵌套的case,也就是外面case1,执行完毕,但后面没有braek ,所以继续执行case2,这样a=2,b=1,但后面有一个break,所以跳出,最终结果就是a=2,b=1,当然不符合楼主算的啊
呵呵
细心点
相似回答