看不懂程序,结果为啥等于31

 

因为case 里没有break; 所以每次都是从case 数值 的地方开始执行,一直到default,for() i=1开始,i=4 结束。

当i=1时:case 1: 空语句,所以往下执行 case 2: a+=3 = 0+3=3 ;  default : a+=5 =3+5=8  ; 

i=2时:case 2:  a+=3=8+3=11 ; default: a+=11+5=16 ;

当i=3时:case 3: a+=2=16+2=18 ; case 1:   case 2: a+=3=18+3=21;  default:a+=5=21+5=26;

当i=4时:default : a+=5= 26+5=31 ;

退出循环,执行printf();输出 31;

具体如下:

a=0
i=1时,执行case 2: a+=3(a=3) 和defaulat: a+=5(a=3+5=8)
i=2时,执行case 2: a+=3(a=8+3=11) 和defaulat: a+=5(a=11+5=16)
i=3时,执行case3: a+=2(a=16+2=18),case 2: a+=3(a=18+3=21) 和defaulat: a+=5(a=21+5=26)
i=4时,执行defalut:a+=5(a=26+5=31)
i=5时,结束循环

 

Switch语句里面的i和case后面的值对比,然后执行case后面的语句i=1时做  a=a+3 a=a+5

a=8