问一下这个的输出结果和解析

img

img

  1. 首先明确switch case语句,case语句中如果有break,则结束switch语句,如果没有会继续向下执行
  2. 然后明确continue语句,continue语句是跳过本次循环,本次循环剩下的语句不会再执行,直接进行下一次循环
  3. 整个过程就是c从‘A’一直到‘G’,分别执行对应的case,k的值发生变化

知识点:
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;
}

img


供参考:
[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