知识点:
1.switch(c++)先将c的值提出来判断再对c进行自加,也就是说第一个switch执行的是case 'A'的语句
2.case 'B':k--;后面没有break或continue,当c=='B'时除了执行该语句之外还会执行default的语句
3.int型的赋值当有小数时截断,int k=1.1则k=1,int k=1.9则k=1
流程:
1.先执行循环体,switch中拿到'A',而后c=='B',此时执行case 'A'的语句,k++,得k=1,然后switch外的k++,得k=2
2.c=='B'<'G'满足条件,switch中拿到'B',而后c=='C',此时执行case 'B'以及default的语句,k--得k=1,k=k/3得k=0,k++得k=1
3.c=='C'<'G'满足条件,执行循环体,switch中拿到'C',而后c=='D',此时执行case 'C'的语句,k+=2得k=3,k++得k=4
4.c=='D'<'G'满足条件,执行循环体,switch中拿到'D',而后c=='E',此时执行case 'D'的语句,k=k%2得k=0,k++得k=1
5.c=='E'<'G'满足条件,执行循环体,switch中拿到'E',而后c=='F',此时执行case 'E'的语句,k=k*10得k=10,k++得k=11
6.c=='F'<'G'满足条件,执行循环体,switch中拿到'F',而后c=='G',此时执行default的语句,k=k/3得k=3,k++得k=4
7.c=='G’不满足条件,退出循环
8.输出k=4
int main()
{
int k = 0;
char c = 'A';
do {
switch (c++) {
case 'A':k++; break;
case 'B':k--;
case 'C':k += 2; break;
case 'D':k = k % 2; continue;
case 'E':k = k * 10; break;
default:k = k / 3;
}
k++;
} while (c < 'G');
printf("k=%d\n", k);
getchar();
return 0;
}
供参考:
[case A]:c=A,c++=B,k=1
[ end ]:c=B,k=2
[case B]:c=B,c++=C,k=1
[case C]:c=B,c++=C,k=3
[ end ]:c=C,k=4
[case C]:c=C,c++=D,k=6
[ end ]:c=D,k=7
[case D]:c=D,c++=E,k=1
[case E]:c=E,c++=F,k=10
[ end ]:c=F,k=11
[default]:c=F,c++=G,k=3
[ end ]:c=G,k=4
k=4