为了账号安全,请及时绑定邮箱和手机立即绑定

有点无法理解!

#include <stdio.h>
int main()
{
    int m, n;
    for(m=2; m<=50; m++)
    {
		for(n=2; n<m; n++)
        {
            if( m%n==0       )       //什么条件下跳出当前循环
              break;                 //这里应该退出当前循环了
		}	
        if(m == n)   //n循环结束后,如果m=n的话就输出m
            printf("%d  ", m);
	}
	return 0;    
}
一直想不明白这句是为什么 if(m == n)
m==2 能勉强理解 
m==3 为什么?
外循环m=3时  for(n=2; n<m; n++)  是不是就等价于for(n=2; n<3; n++)
这时候n=2后 内循环就应该停止了啊,怎么实现的n==3的?


正在回答

2 回答

外循环m=3时  for(n=2; n<m; n++)  等价于for(n=2; n<3; n++)

这时候n++等于3时 不符合循环条件会跳出当前内循环。

但注意,此时n就是等于3了(n++自增导致的

for循环的执行顺序是先n<m判断,执行语句,n++,再n<m判断,执行语句,n++

所以n=2(执行语句)后,n++等于3,n<m条件不符合,跳出当前内循环。

再执行        if(m == n)   

            printf("%d  ", m);

所以能输出素数3.

后面的数字同理。

故       

            if(m == n)   

            printf("%d  ", m);

是保证素数自身一定能被输出,前面内循环语句是找出数字的能被整除的情况,跳出循环后m == n又限制这个因数只能是自身。

综上,n<m和n<=m条件应该均可。




1 回复 有任何疑惑可以回复我~

#include <stdio.h>

int main()

{

    int m ;

    for (m = 2; m <50; m++)      //for(m=2;m<=50;m++)

    {

        ;

    

    }

    printf("%d", m);

    return 0;

}

我试了一下上边代码,输出的是50 //51

我是不是可以这样理解  :

for循环时  哪怕m<50==0      m++依然会运算一次!!


0 回复 有任何疑惑可以回复我~
#1

小机灵鬼er

所有有没有可能程序要运行到printf输出,必须经过上面的内容
2023-07-10 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
C语言入门
  • 参与学习       926207    人
  • 解答问题       20797    个

C语言入门视频教程,带你进入编程世界的必修课-C语言

进入课程

有点无法理解!

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信