一道题求助

KONGLEUNG 2010-08-23 10:09:58
#include <stdio.h>
void main()
{
int m,n;
for(m=n=1;m<=10;m++)
{if(n>=10)break;
if(n%3==1){n+=3;continue;}
}
printf("%d\n",m);
}

为什么运行结果为:4

...全文
90 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
qweworld 2010-08-24
  • 打赏
  • 举报
回复
一共运行了3次循环,对应的结果是: 第一次: m=2 n=4
第二次: m=3 n=7
第三次: m=4 n=10(此时当进行下一轮循环时n满足条件n>=10,执行
break语句跳出for循环,m并没有执行下一轮for循环,m的值仍然为4)
至于continue语句在此程序中的作用:结束当前语句,重新循环,即重新执行for语句.
break语句在此程序中的作用:结束for循环,亦即跳出for循环.
yskcg 2010-08-24
  • 打赏
  • 举报
回复
[Quote=引用楼主 kongleung 的回复:]
#include <stdio.h>
void main()
{
int m,n;
for(m=n=1;m<=10;m++)
{if(n>=10)break;
if(n%3==1){n+=3;continue;}
}
printf("%d\n",m);
}

为什么运行结果为:4
[/Quote]
m=1,n=1;执行if后为:m=2,n=1+3=4
m=2,n=4;执行if后为:m=3,n=4+3=7
m=3,n=7;执行if后为:m=4,n=7+3=10
m=4n=10;执行if后,遇到break语句,跳出循环,执行printf语句。


我估计lz是不清楚continue和break的区别,continue是重当前的循环中调出,但是还是要继续执行接下来的循环,而 break是重循序中跳出,不在继续去执行接下来的循环,而是继续执行循环后的语句,希望对你有帮助。
haogeai123 2010-08-24
  • 打赏
  • 举报
回复
如此简单,是不是没弄清楚基本语法和结构啊
pigniyan 2010-08-23
  • 打赏
  • 举报
回复
m=1 n=4
m=2 n=7
m=3 n=10
m=4 if(n>=10) break条件满足,所以m=4
Moviki 2010-08-23
  • 打赏
  • 举报
回复
按照代码来看,就是4啊,你期望是几?
m n
1 1 m++
2 4 m++
3 7 m++
4 10 break

for语句里面先执行 m=n=1,
接下来,
1)判断m是否小于等于10, 如果是的话,执行循环体中语句,否则循环结束
2)然后执行m++
3)回到2)

等价于下面

m = 1;
n = 1;
while(m<=10)
{
if(n>=10)
break;

if(n%3==1)
{
n+=3;
}

m++;
}
brookmill 2010-08-23
  • 打赏
  • 举报
回复
1楼打错了,应该是1、4、7、10,每次n%3==1都成立,每次加3
for(m=n=1;m<=10;m++)
{
printf("%d, %d\n", m, n); // 加个printf看看过程
if(n>=10)break;
brookmill 2010-08-23
  • 打赏
  • 举报
回复
一共循环4次,n的值依次为1、4、7、11,此时满足n>=10,从break跳出循环,m的结果是4

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧