c语言switch结构+循环题目

为什么最终结果k=4?可以给出详细的过程吗?谢谢
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++;
    printf("k=%d\n",k); 
}while(c<'G');
printf("最终结果k=%d",k); 
system("pause");
return 0;

}

阅读 3.5k
3 个回答

任何时候 printf 都是调试的利器, 我在你的代码上加了一些 printf 输出, 整个代码运行流程一目了然:

int main() {
    int k = 0;
    char c = 'A';
    do {
        switch (c++) {
            case 'A':
                printf("case A: k++, 执行前, k: %d", k);
                k++;
                printf(", 执行后, k: %d\n", k);
                break;
            case 'B':
                printf("case B: k--, 执行前, k: %d", k);
                k--;
                printf(", 执行后, k %d\n", k);
            case 'C':
                printf("case C: k += 2, 执行前, k: %d", k);
                k += 2;
                printf(", 执行后, k: %d\n", k);
                break;
            case 'D':
                printf("case D: k = k %% 2, 执行前, k: %d", k);
                k = k % 2;
                printf(", 执行后, k: %d\n", k);
                continue;
            case 'E':
                printf("case E: k = k * 10, 执行前, k: %d", k);
                k = k * 10;
                printf(", 执行后, k: %d\n", k);
                break;
            default:
                printf("case default: k = k / 3, 执行前, k: %d", k);
                k = k / 3;
                printf(", 执行后, k: %d\n", k);
        }

        k++;
        printf("执行 k++, k 当前值: %d\n", k);
        printf("k=%d\n", k);
    } while (c < 'G');

    printf("最终结果k=%d", k);
    system("pause");
    return 0;
}

打印输出如下:

case A: k++, 执行前, k: 0, 执行后, k: 1
执行 k++, k 当前值: 2
k=2
case B: k--, 执行前, k: 2, 执行后, k 1
case C: k += 2, 执行前, k: 1, 执行后, k: 3
执行 k++, k 当前值: 4
k=4
case C: k += 2, 执行前, k: 4, 执行后, k: 6
执行 k++, k 当前值: 7
k=7
case D: k = k % 2, 执行前, k: 7, 执行后, k: 1
case E: k = k * 10, 执行前, k: 1, 执行后, k: 10
执行 k++, k 当前值: 11
k=11
case default: k = k / 3, 执行前, k: 11, 执行后, k: 3
执行 k++, k 当前值: 4
k=4
最终结果k=4

话说, 这样的问题, 单步调试也很容易确定了吧?

case 'D': k=k%2;continue;,这里的continue是继续循环,就是后面的都不执行了,直接进行下一次循环。所以这一次的k++也就不执行了,所以最终结果是4。

一共进去循环六次,c分别是A~F。
①执行case A,下面k++,结果2。
②执行case BC,下面k++,结果4。
③执行case C,下面k++,结果7。
④执行case D,结果1。
⑤执行case E,下面k++,结果11。
⑥执行default,下面k++,结果4。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进