楼主你贴的代码有问题,我估计是这样的,这样算的就是31
#include
main()
{
int a=0,i;
for(i=1;i<5;i++)
{
switch(i)
{
case 0:
case 3:a+=2;
case 1:
case 2:a+=3;
default:a+=5;
}
}
printf("a=%d\n",a);
}
计算步骤:
i=1,走case 1:没break,下面都会执行,a+=3;此时a=3,执行a+=5,a=8
i=2,走case 2:a+=3;此时a=11,执行a+=5,a=16
i=3,走case 3:a+=2;此时a=18,执行a+=3,a=21,执行a+=5,a=26
i=4,走default:a+=5,执行a+=5,a=31
over
我帮你把程序整理了一下:
main()
{
int a=0,i;
for(i=1;i<5;i++)
{
switch(i)
{
case0:
case3:
a+=2;
case1:
case2:
a+=3;
default:
a+=5;
}
}
}
switch case语句,你必须知道,如果case后面没有break,那么,就从符合条件的那个case一直走到最后
当i=1时,从case 1:开始走到最后,即:执行a+=3;和a+=5;两条语句,结果为a为8。
当i=2时,从case 2:开始走到最后,即:执行a+=3;和a+=5;两条语句,结果为a为16。
当i=3时,从case 3:开始走到最后,即:执行a+=2;、a+=3;和a+=5;三条语句,结果为a为26。
当i=4时,从default:开始走到最后,即:执行a+=5;一条语句,结果为a为31。
所以最终a的值为31。
你先问什么啊?这个程序有明显的没有错误啊!但是要心中的功能可能有点不如意吧,比如说i=3的时候,它会执行a+=2,接着会执行后面的a+=3这条语句,要想实现你的匹配就必须加个break。而且你要是自己写的程序的话i怎么会是0呢,i=4的情况呢?要是是个判断题这样应该可以吧。你想问什么我不知道,可以追问啊
我回答时你没有问完!!!
i=1时,a=a+3,a=3;i=2时,a=a+3,a=6;i=3时,a=a+2,a=8,a=a+3,a=11。在执行default:a+5;时没有赋值就不管了,不过每次都执行过这条语句。最终结果a=11.
擦 我搜了下原题 你又打错了
deault:后面明明复制了a+=5;大哥看明白题啊
for(int i=1;i<5;i++)这句得到i从1开始循环到4;(记住一定是按顺序哦,1、2、3、4)
i=1时,case1:a+=3 计算得 a =a+3 =0+3 = 3;
i=2时,case2:a+=3 计算的 a =a+3 =3+3 = 6;
i=3时,case3:a+=2 计算得 a =a+2 =6+2 = 8;
i=4时,default:a+5
这里你的这个代码不知道有没有错误,如果没错误,a+5只是个表达式,并没有对a进行改变,a=8;
代码你打错的了话,再补充吧~~
求大佬解答 为什么case1后面的不执行呢?不应该是和下面的case2的语句一样吗?