C语言高手请进(5)

来源:百度知道 编辑:UC知道 时间:2024/05/13 02:21:12
我是C语言弱智
下面有道题请解答,请说说解题思路

main()
{int i;
for(i=0;i<3;i++)
switch(i)
{
case 0:printf("%d",i);
case 2:printf("%d",i);
default:printf("%d",i);
}
}

求输出结果!

程序执行开始
main()
{
int i;
for(i=0;i<3;i++)
switch(i)
{
case 0:printf("%d",i);
case 2:printf("%d",i);
default:printf("%d",i);
}
}

首先在for循环中 i初始化为0
i=0 然后进入switch语句中的case 0:printf("%d",i);
即输出0
因为后边没有break 所以继续执行下一句case 2:printf("%d",i);
继续输出0
接着继续执行default:printf("%d",i); 输出0

则第一个循环输出为000
以此类推
第二次循环i=1 执行语句default:printf("%d",i); 输出1
第三次循环i=2 执行语句case 2:printf("%d",i); default:printf("%d",i); 输出22
再接着i加1 则i=3 跳出for循环 程序结束

所以最后的结果为000122

循环三次输出020122程序case后没break i为0 三个case都执行i为1执行default.i为2执行后两个case

答案:000122
首先看循环,是从0~2的循环
i=0时 执行case 0:printf("%d",i); 语句 输出0
但是执行后没有break语句终止,所以继续执行后面的case
即执行case 2:printf("%d",i);
default:printf("%d",i); 输出两个0了

然后i=1 case中没这种情况,直