c语言问题 求解释 越详细越好

[复制链接]
查看11 | 回复4 | 2011-3-21 17:43:25 | 显示全部楼层 |阅读模式
10.笔试选择题
#include
main()
{
int c=0,k;
for(k=0;k<3;k++)
switch(k)
{
default:c+=k;
case 2:c++;break;
case 4:c+=2;break;
}
printf("%d\n",c);
}
答案说结果等于3,可是在计算机上执行的结果是4,而且在default:c+=k;
这一步并没有c++,所以这一步得不到c=2啊

回复

使用道具 举报

千问 | 2011-3-21 17:43:25 | 显示全部楼层
说一下执行顺序switch中,都是先去找case,如果有case满足,则执行case,否则执行default不论是case还是default,执行完后都是按顺序执行其后语句,即有break则break,没有break则下一条是啥语句就执行哈语句该题中只有k为2时 只执行case 2,其它时候都是先执行default,顺序执行case 2,再跳出switch答案为4
回复

使用道具 举报

千问 | 2011-3-21 17:43:25 | 显示全部楼层
说一下执行流程:k=0时,switch(0)中执行default:c+=k,所以c=0;由于default没有break语句,因而继续执行case 2:c++;break;所以c=1;k=1时,switch(1)中执行default:c+=k,所以c=2;由于default没有break语句,因而继续执行case 2:c++;break;所以
回复

使用道具 举报

千问 | 2011-3-21 17:43:25 | 显示全部楼层
可以单步调试试一下嘛。我这里没有环境,猜测一下:k=0时:执行default c为0k=1时:执行default c为1k=2时:执行case 2,c为3结果为3
回复

使用道具 举报

千问 | 2011-3-21 17:43:25 | 显示全部楼层
答案应该是4.首先,for循环执行的是switch语句。当k=0的时候,先执行default语句,得到c=c+k,c=0,再执行,得到c=1;当k=1的时候,先执行default语句,得到c=c+k,此时c=2,再执行case2,得到c=3,当k=2的时候,执行case2,得到c=4
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行