07年二级c真题中的问题

来源:百度知道 编辑:UC知道 时间:2024/07/18 01:22:45
23)有以下程序
main()
{int k =5,n=0;
do
{switch(k)
{case 1: case3:n+=1; k --; break;
default:n=0;k -;
case 2: case 4:n+=2; k -;break;
}
printf(“%d”,n);
}while(k >0&&n<5);
}
程序运行后的输出结果是
A)235 B)0235 C)02356 D)2356
我感觉还应有4输出,但我上机也调试不出。请指教!

选A ,里面的&&符号是在中文情况下输入的要改过来,中k--后面两个少了一个减号,可能还有个别是在中文情况下输入的也要改过来,以下是我根据原代码重写的,运行结果是A答案. 不好意思,打错了,n<5 , 所以结果是A.汗....
#include"stdio.h"
void main()
{int k=5,n=0;
do
{switch(k)
{case 1:
case 3:n+=1;k--;break;
default:n=0;k--;
case 2:
case 4:n+=2;k--;break;
}
printf("%d",n);
}
while(k>0&&n<5);
}
程序运行过程:
第一次switch没有对应的case这时便到特殊情况default,这是n=0,k=4, 但是注意default和case 2后面都没有break,所以程序继续运行下去到case 4这句,便成为n=2,k=3,这时出现break,选择跳出进入printf输出2;再进入选择,因为k=3, 进入case 3,得出n=3,k=2,遇到break退出选择输出3, 然后再次进入选择k=2进入case 2,由于case后面没有break程序继序往下到case 4,得到n=0,k=5,并输出5,由于,n=5不再满足条件n<5,程序结束!!!(你在default后面加break试试就明白了)

第一次do执行完n=2,k=3;
第二次do执行完n=3,k=2;
第三次do执行完n=5, k=1;
n=5时候,不符合while的条件,退出do{}while();
switch语句,遇到break就退出的,所以执行结果是2,3,5

你程序中的语句case 2: case 4:n+=2; k -;break是什么啊,看不懂

程序有问题