一程序分析

来源:百度知道 编辑:UC知道 时间:2024/05/28 10:11:11
#include <stdio.h>
void main()
{
int a=15,b=21,m=0;
switch(a%3)
{case 0:m++;break;
case 1:m++;
switch(b%2)
{default:m++;
case 0:m++;break;
}
}
printf("%d\n",m);
}

答案是一.但为什么会是1而不是2呢?
谁能讲下运算原理?

break语句,使程序的执行跳出了第一个switch()语句,而第二个switch()在第一个的里面,所以没有执行

如果要得到2,你可以把第二个switch(b%2)拿出来,和第一个平级

case 0:m++;break;
这里就跳出循环了

后面的switch是前一个switch函数里的
不做运算。
所以m只自加一次。
不知道我说的对不对。

首先a%3等于0吧,
程序在case 0时m++ ,m=1就break了
你在case 1:m++;
后写一条语句如下:
。。。
int a=15,b=21,m=0;
switch(a%3)
{
case 0:m++;break;
case 1:m++;
printf("*******%d\n",m);
switch(b%2)
{
default:m++;
case 0:m++;break;
}

}
有没有看到连****都没有输出:可以看出程序break了,所以结果就是1

程序执行第一个switch(a%3)语句,执行case 0分支,因为后面有个break语句会跳出switch语句,后面的switch(b%2)语句执行不到,所以结果是1。你把switch(b%2)语句放到第一个switch(a%3)语句外面答案就是2