weixin_慕神7276119
2022-11-21 09:28
#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的?
外循环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条件应该均可。
#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++依然会运算一次!!
C语言入门
928161 学习 · 21543 问题
相似问题