C语言问题一道

[复制链接]
查看11 | 回复4 | 2010-7-5 19:11:40 | 显示全部楼层 |阅读模式
5. 下述程序的输出是______。
main( )
{ int i=0,j=0,k=0,m;
for(m=0;m<4;m++)
switch(m)
{ case 0: i=m++;
case 1: j=m++;
case 2: k=m++;
case 3: m++;
}
printf("\n%d,%d,%d,%d",i,j,k,m);
}
A) 0,0,2,4 B) 0,1,2,3 C) 0,1,2,4 D) 0,1,2,5
关于最后m的值是怎么一回事?求详解!

回复

使用道具 举报

千问 | 2010-7-5 19:11:40 | 显示全部楼层
首先要知道:在case语句后如果没有break语句,那么m与case后某一个值匹配执行后,还要继续执行下面的case语句。再来解释这个程序:第一次循环:m等于0,匹配case 0,则i=0(i=m++是先将m的值赋给i,m再自增),继续往下执行,j=1,k=2,m=4(注意这里m是不等于3的,因为k=m++执行完之后m自增成了3,执行case 3后的m++就自增成了4);第二次循环:m被重新赋值1,匹配case 1,j=1,k=2,m=4;第三次循环,m被重新赋值2,匹配case 2,k=2,m=4;第四次循环,m被重新赋值3,匹配case 3,m自增成了4.而后又执行for循环中的m++一次变成5,判断不符合m<4了,所以选D。
回复

使用道具 举报

千问 | 2010-7-5 19:11:40 | 显示全部楼层
个人认为是D,for循环里m赋初值为0,switch语句执行case 0;m赋给i然后自加;因为case 0;后并没有break语句 所以继续执行case 1;case2;case3;分别把m赋给j,k并自加;执行完case3时m为4,然后执行for循环里的m++,此时m==5并进行 m<4判断结果为假跳出循环,输出一家之言 请斟酌
回复

使用道具 举报

千问 | 2010-7-5 19:11:40 | 显示全部楼层
for循环m到3后,执行case 3: m++;现在m=4,然后又执行for循环里的m++,m=5,不符合for循环的条件了跳出循环
回复

使用道具 举报

千问 | 2010-7-5 19:11:40 | 显示全部楼层
最后的m=5是因为当执行玩switch里面所有的,他又要执行循环呀,当在执行m++的时候m=5,所以终止!~然后输出!~就是这样!~
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行