c语言switch语句

有以下程序
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
请注意我打问号的地方!!!!
请注意看以下解析:
首先进入第一个switch(x)语句判断,进入case1中进行嵌套判断switch(y)也成立a自加1,遇到break,退出嵌套,接着执行case2,a自加为2,b自加为1,遇到break结束此循环,此时a=2,b=1

a的自加是先执行后在自加,当此程序a自加的时候没有执行其他语句啊??????

另外!!!!!!
我的课本上说:计算switch后括号内表达式的值然后用该值逐个与case后的常量表达式进行比较,当找到匹配的值时就执行该case后面的语句。所有case中没有匹配的就执行default后面的语句

但是实际操作和上面的解析中并没有像书上所说的执行啊,执行完第一个后a的值为1 为什么有执行case 2了呢???????????a的值又不等于2
在执行case的时候是不是要判断case后面的值啊,怎么判断?????????

第1个回答  2008-09-09
试着回答一下,你参考一下.
swich(x),进入case 1后,switch(y),执行a++;再break,跳出.
注意,此时那个]后面没有break;所以就执行case 2;成立,a++,b++;跳出;
最终,a=2,b=1;

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)
第2个回答  2019-03-19
很明显,case表达式是错误的,错误提示也是这个意思(英文的而已)。在C语言中,case所带的表达式必须为常量表达式,如:case
2:pro[t]='q'、case
'a':pro[t]='q'
或者
case
"ttg":pro[t]='q'这种类型,而你的写的是逻辑表达式,所以提示错误。解决办法:你只要改成
case
"ttg":
;case
"ctg":
pro[t]='q';break;就可以了。纯手打。。。
第3个回答  2008-09-09
int x=1,y=0,a=0,b=0;
switch (x)
{case 1:
switch(y)
{
case 0:a++;break; ①第一个分号完成后a=1;
case 1:b++;break; //只跳出当前switch(y)
} //这里没写break,所以程序继续往下执行
case 2: a++,b++;break; ②a++,b++;这分号以后a,b自加完成
case 3:a++,b++;
}
printf("a=%d,b=%d\n",a,b) ③
第4个回答  2020-04-15
D是正确的。B中,第一个case已经是3了,所以第三个case的值不能为3。至于D,各个case语句,以及default的先后顺序不受限制,可以随便调换,而case
3:case
4:这样的用法就是当(a-b)等于3或4的时候执行后面的语句。
第5个回答  2008-09-09
首先注意第一个是switch(x),是x,不是a,不知道你是不是这里误解了.
在没有执行其他语句的情况下,a++和++a结果本来就一样,这里确实也没有执行其他语句.
另外,C语言中case只是一个入口,并没有出口,后面的语句都要执行完,除非遇到break.case2也在case1后面,所以就执行了,然后break,所以case3没有执行.
相似回答