下面程序的输出结果是

#include<stdio.h>
main()
{
char c='A';
int k=0;
do
{
switch(c++){
case'A':k++;break;
case'B':k--;
case'C':k+=2;break;
case'D':k%=2;continue;
case'E':k*=10;break;
default:k/=3;
}
k++;
}
while (c<'G');
printf("k=%d",k);

}
//输出结果是k=4,为什么呀

#include<stdio.h>
main()
{
char c='A';
int k=0;
do {
printf("do swich c = %c\n", c);
switch(c++)
{
case'A':
k++;
printf("run case 'A' k = %d\n", k);
break;

case'B':k--;
printf("run case 'B' k = %d\n", k);
case'C':
k+=2;
printf("run case 'C' k = %d\n", k);
break;

case'D':k%=2;
printf("run case 'D' k = %d\n", k);
continue;

case'E':
k*=10;
printf("run case 'E' k = %d\n", k);
break;
default:k/=3;
printf("run default k = %d\n", k);
}
k++;
printf("run k++ out of switch %d\n", k);
}
while (c<'G');
printf("k=%d",k);
}

运行
do swich c = A
run case 'A' k = 1
run k++ out of switch 2
do swich c = B
run case 'B' k = 1
run case 'C' k = 3
run k++ out of switch 4
do swich c = C
run case 'C' k = 6
run k++ out of switch 7
do swich c = D
run case 'D' k = 1
do swich c = E
run case 'E' k = 10
run k++ out of switch 11
do swich c = F
run default k = 3
run k++ out of switch 4
k=4
可以看到 当c依次从A增加到G
c=A 运行 case A和k++ 得到k=2
c=B 运行case B和case C, 以及k++, 得到k=4 注意case B没有break,所以会继续case C
c=C 运行case C和k++ 得到k=7
c = D 运行case D 得到k=1 注意有continue 所以不会执行下面的k++
c=E 运行case E和k++ 得到k=11
c=F 运行default 和k++ 得到k=4
c=G时,退出循环
打印k=4
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-07-04
第一次进switch c的值是A
所以k++; 这时候k就是1;
出了switch,又++了一次,所以k=2; 这时候,c 的值是"B";

第二次进switch c的值是B
所以k--; 这时候k就是1;但是因为没有break,所以继续做k+=2; 所以k = 3;

出了switch,又++了一次,所以k=4; 这时候,c 的值是"C";

第三次进switch c的值是C
所以是k+=2; 所以k = 6;

出了switch,又++了一次,所以k=7; 这时候,c 的值是"D";

第四次进switch c的值是"D"
所以是k=k%2; 所以k = 7%2 = 1;因为是continue
所以又进了一次switch,这时候 c 的值是"E",所以k*=10 ,k=10

出了switch,又++了一次,所以k=11; 这时候,c 的值是"F";

第五次进switch c的值是"F"
所以没有F,所以进 k=k/3; 所以k = 11/3 = 3; (取整)

出了switch,又++了一次,所以k=4; 这时候,c 的值是"G";

退出
打印 k=4本回答被提问者采纳
第2个回答  2013-07-04
每个case,(除了A那个)都运行了一遍其实。

B之后,k=-1,k++后, k= 0
C之后,k=2,k++后,k=3;
D之后,k=1,continue会略过k++,k=1;
E之后,k=10,k++后,k=11;
F还是符合while的条件,所以进Default case:k=3 ,k++后,k=4

应该是这样的

不对的请各位指正追问

为什么continue会略过k++?

追答

Continue让你继续的是while,所以当完成 之后他回到了switch(c++)语句,所以是略过了k++

第3个回答  2013-07-04
c=A
执行switch里面k++,碰到break,于是退出switch,执行后面的k++,最后得到k=2,c=B
C=B
执行switch里面k--因为没有break所以继续执行下一个case 'C':k+=2,接着碰到break,然后退出switch后面的k++,最后得到k=4,c=C
c=C
执行switch里面k+=2,碰到break,然后退出switch,执行后面的k++,最后得到k=7,c=D
c=D
执行switch里面k%=2,碰到continue,直接退出循环,进入下次循环,最后得到k=1,c=E
c=E
执行switch里面k*=10,碰到break,退出switch,执行后面的k++最后得到k=11,c=F
c=F
执行switch里面k/=3,switch结束,执行后面的k++最后得到k=4,c=G
退出循环
输出4

可能说的有点模糊,哪里不懂可以追问。追问

会运行case'A'吗?
为什么下面有网友回答说除了case'A'其它再都运行呢

追答

因为这个是循环,循环变量c会一直变大,变大的值在switch里面都有相应的值,所以会全部都再运行。

第4个回答  2013-07-05
#include<stdio.h>
main()
{
char c='A';
int k=0;
do
{
switch(c++){
case'A':k++;printf("c=%c case 'A'\n",c-1);break;
case'B':k--;printf("c=%c case 'B'\n",c-1);
case'C':k+=2;printf("c=%c case 'C'\n",c-1);break;
case'D':k%=2;printf("c=%c case 'D'\n",c-1);continue;
case'E':k*=10;printf("c=%c case 'E'\n",c-1);break;
default:k/=3;printf("c=%c case default'\n",c-1);break;
}
k++;
}
while (c<'G');
printf("k=%d",k);
getch();
}
运行结果:

c=A case 'A'
c=B case 'B'
c=B case 'C'
c=C case 'C'
c=D case 'D'
c=E case 'E'
c=F case default'

k=4
case 只是选择的入口,真正的程序是case后面的部分,是连续的。在循环中,break与continue同义。
相似回答