int k=0; char c='A'; do { switch(c++) { case 'A':k++;break; case 'B':k--; case 'C':k+=2;break; case

这是完整的题目:
#include<stdio.h>
void 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/3;
}k++;
}while(c<'G');
printf("k=%d\n",k);
}
输出结果:12
为什么输出的结果会是12呢?我想了很久还是没有想明白,希望有人能够帮忙多谢!
最新回答
酒爷

2024-10-22 11:20:23

第一次循环:因为c='A‘,switch(c++),c++为'A',c为’B',执行case 'A':k++;break后k为1,k++后k为2.
第二次循环:因为c='B‘,switch(c++),c++为'B',c为’C',执行case 'B':k--后,k为1,没有遇到break,继续执行case 'C':k+=2;break;k=k+2,复制之后,k为3,k++后,k为4.
第三次循环:c='C‘,switch(c++),c++为'C',c为‘D',执行case 'C':k+=2;break后,k为6,k++后k为7.第四次循环:c='D‘,switch(c++),c++为'D',c为‘E',执行case 'D':k=k%2;continue,求余之后赋值,k为1,遇到contine语句结束本次循环,开始下一次循环。
第五次循环:因为c='E‘,switch(c++),c++为'E',c为‘F',执行case 'E':k=k*10;break,k为10,k++后k为11.
第六次循环:因为c='F‘,switch(c++),c++为'F',c为‘G',执行default:k/3后,k为3,k++后k为4。因为此时c为’G',所以循环结束,所以最终输出结果为4,不是12.谢谢!
白裙红衣

2024-10-22 15:19:42

switch(c++){} //中的c++ 每次执行,都会使改变c的ASCII值,如,c='A',执行C++;后c='B'。
do{}while(); //此语句是先执行,后判断。
你可以单步执行一次,过程很清楚的。
第一次循环结束:c='B' ;k=2;
第二次循环结束:c='C' ;k=4;
第三次循环结束:c='D' ;k=7;
第四次循环结束:c='E' ;k=1;
第五次循环结束:c='F' ;k=11;
第六次循环结束:c='G' ;k=12;
追问
O(∩_∩)O哈哈~,老兄谢了。
分手后的那一夜丶

2024-10-22 19:09:55

c='A'
第一次循环、A++ case 'A': k=1; break; k=2 --> A++=B
第二次循环、B++ case 'B': k=1; case 'C': k=3; break; k=4 -->B++=C
第三次循环、C++ case 'C': k=6; break; k=7 -->C++=D
第四次循环、D++ case 'D': k=1; continue; -->D++=E
第五次循环、E++ case 'E': k=10; break; k=11 -->E++=F
第六次循环、F++ default: k=3; k=4 F++=G
c=G<'G' 不成立 所以输出k=4
软耳兔兔

2024-10-22 16:37:05

因为你的输出控制符写成了%d,%d表示输出整型数据,按照你的想法应该是要输出字符型吧,那应该是%c,但是我有运行你的程序,发现它也不是你要的G或者其他字母,你自己看一下哪里有毛病吧
红颜乱

2024-10-22 18:32:48

你想做什么呢?
按照你程序运行分析
c 的内容分别是 'A' 'B' 'C' 'D' F' 'G'
k 的内容分别是 0 1 3 6 10 11
再加上最后一个k++
就是12了