这个C题要怎么样解?

来源:百度知道 编辑:UC知道 时间:2024/05/10 19:06:24
main(){
int k=5,n=0;
while(k>0){
switch(k){
default : break;
case 1 : n+=k;
case 2 :
case 3 : n+=k;
}
k--;
}
printf("%d\n",n);
}
细说,谢谢.答案等于7

#include "stdio.h"

void main()
{
int k=5,n=0;
while(k>0)
{
switch(k)
{
default : break;
case 1 : n+=k;
case 2 :
case 3 : n+=k;
}
k--;
}
printf("%d\n",n);
}

k大于0时,一直执行循环,
K=5,不执行switch
K=4,同上
K=3,执行case 3 : n+=k; 然后n=3;
K=2,先执行case 2 : (空操作),由于没有break然后继 续执行case 3 : n+=k;结果n=5;
K=1 ,执行case 1 : n+=k;
case 2 :
case 3 : n+=k;
结果n=7。

由于没有break,所以进入switch后一直执行完所有的语句。
不知道你能否看明白?

由于每个case后没有break,故每次都从当前状态执行到switch结束。
执行过程:
k=5,4时,break
k=3 n=0+3=3;
k=2 n=3+2=5;
k=1 n=5+1=6;n=6+1=7
输出

main(){
int k=5,n=0;
while(k>0){
switch(k){
default : break;

case 1 : n+=k; //最后K自减到1时,执行此步,N=6,K=1,因为此步也没有break,所以还要执行第三步,N=7,K=1~~

case 2 : //然后K自减到2时,执行此步,因为此步最后并没有break,所以还要执行第三步,N=5,K=2