for(k=1; k<3; k++)
switch (k)
{ default: c+=k;
case 2: c++; break;
case 4: c+=2; break;
}
这都是for的循环这个知道吧?
问题就是你的default: c+=k;
后面没有 break
所以k等于1的时候 执行了default: c+=k;
c等于1
不会跳出
还会继续执行case 2: c++; break
c等于2了 。
然后 k等于2
c等于3了。
就按执行顺序分析吧:
首先c=0,k=1,
首次进入循环:
进入switch执行default,c+=k,这时c==1,
注意:关键!!!:此时,因为没有break,要执行c++,这时c==2,然后break;k++,k变成2了
再次进入循环,因为k==2,执行case 2:c++;c变成3,break跳出,k++,k变成3,不满足循环条件,循环结束!
所以:c==3
进入循环,k=1,因为case中没有值与之想匹配,所以执行default语句:此时c=c+k=1。
注意:default之后,没有break,所以接着执行c++,此时c=2。
第二次循环,k=2,由于case2:,所以执行c++。c=3,然后就 输出c=3了。
default放在前面,循环中每次都运行c+=K,其他的不运行。
因此是3,可以单步运行,看一下具体的程序运行过程。
for循环中、
第一次,k==1没反应;
再来,k==2,switch语句中c=c+k=2,,执行语句 case 2;c++→c=3;
over;
k的初值为1
第一遍循环,k=1时,case:2和case:4都不满足,所以,default:c=k+1=2,k=2;
第二遍循环,k=2时,case:2,c=2+1=3,k=3;
因为k=3,所以退出循环,输出c的值为3.