C语言的一道题,有点小迷糊

以下程序的执行结果是( C )。(选择一项)
main()
{
int i=0,a=0;

for( i=0;i<5;i++)
{
switch(i)
{
case 0:
case 1:
case 2: a+=3;
case 3: a+=2;
default: a+=5;
}
}
printf("%d\n",a);
}
a) 16
b) 38
c) 42
d) 32

我就想不清case 0: 和case 1: 后面的空白是什么意思,麻烦帮忙解释一下,该怎么做,谢谢

当i=0时,case 0满足进入case 0,由于case 0后没有可执行语句,所以略过,又由于case 0后没有break,所以不能退出switch,所以流程会继续向下,也就是去执行case 1,case 1与case 0是同一种情况,流程进入case 2.case 3.和default,所以a的值是10
当i=1时,case 1满足进入case 1,流程和case 0进入的差不多,分别进入case 2,case 3和default,于是a的值便是20,
当i=2时,case 2满足进入case 2,同样的a的值等于30
当i=3时,case 3满足,进入case 3,和default,a的值为37
当i=4时,default满足,进入default,a的值为42

case 0和case 1的作用是保留程序的流程,在正常的switch中(有break时),他会保证流程的正常进入和退出,否则,流程就进入default

满意采纳,不满意请追问
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-06-12
case 0: 和case 1: 后面的空白 是什么都不做
但是又必须保留,否则 i=0或=1时会执行default: a+=5;
第2个回答  2013-06-12
后面的空白就是让程序什么也不做,也就是说没有case 0,case 1,这段代码的作用是一样的。
第3个回答  2013-06-12
case 0: 和case 1: 后面的空白表示什么都不做,但同时又是i=0和i=1的入口,必须保留使得i=0和i=1程序有相应地方开始执行。否则,i=0或=1时会执行default: a+=5;而改变结果