2008年4月2级C语言的考题解析

来源:百度知道 编辑:UC知道 时间:2024/06/18 12:54:14
#include "stdio.h"
void 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 呢 请大家帮我解析下哦。谢谢了阿

int x=1,y=0,a=0,b=0;
switch(x)
{ case 1:
switch(y) //y=0,执行下面的a++,a=1

{ case 0: a++; break;
case 1: b++; break;
}
case 2: a++; b++; break;//case 1与case 2都要执行这一条所以a++,a=2,b=1
case 3: a++; b++;
}
printf("a=%d,b=%d\n",a,b);

关键在break;case后面如果没有bbreak;的话还要继续执行下面的语句;本程序中
switch(y)
{ case 0: a++; break;
case 1: b++; break;
} 后a=1,b=0break;仅仅是从switch(y)中出来,switch(x) 并没有break,因此将继续执行
case 2: a++; b++; break;这之后a=2,b=1break跳出来了

因为x=1,在所以执行的是case1,而case1中又有分支,y=0所以在那个分支中就执行case0,也就是a++此时a=1,然后执行break跳出这个分支。此时仍然在switch(X)中执行case2此时a=2,b=1,遇到break跳出switch(x)输出结果。

int x=1,y=0,a=0,b=0; //x=1 y=0 a=0 b=0
switch(x) // x==1 跳到 case 1
{ case 1: //case 1
switch(y) // y==0 跳到 case 0
{ case 0: a++; break; //a++:a=1 break:跳出switch(y)
case 1: b++; break;
}
case 2: a++; b++; break; /