C语言for循环嵌套求3到100素数

#include <stdio.h>
main()
{
int n,i;
for(n=3;n<=100;n++)
{
for(i=2;i<n;i++)
if(n%i==0) break;
if(i>=n)
printf("%d\n",n);
}
}
这个里面 第二个 if(i>=n) 有点不懂啊 在第二个for循环里面 不是已经说了 i<n ? 为什么还要 在i>=n时才输出n的值啊? 初学C菜鸟 请教各位大侠啊
i在第2个for循环里面 不是命了 i<n么? 为什么 下面个 会有if(i>=n) 才输入 n啊?

for(n=3;n<=100;n++)
{
for(i=2;i<n;i++)
if(n%i==0) break;//第二个for循环到这里结束。
if(i>=n) /*判断第二个for循环i是否循环到了n-i,如果是的话就是素数,否则就是在2-(n-1)之间有能除尽的则不是素数*/
printf("%d\n",n);
}
明白否?
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-03-18
我把运行过程给你演示一下
n=3时
i=2 if()为假 不执行break 接下来i++
i=3 if为真 执行break for(i=2;i<n;i++)循环结束
if(i>=n)成立 执行printf函数 输出 3
n=4时
i=2 if(n%i==0)为真 执行break for(i=2;i<n;i++)循环结束
if(i>=n)为假 不执行printf函数
以此类推一直到n=100
第2个回答  2010-03-19
for(i=2;i<n;i++)
if(n%i==0) break;
可以理解为:
i=2;
while(i<n)
{
if(n%i==0) break;
i=i+1;
}
也就是说当i=n-1时,如果还不能被N整除(n这时就确定是素数了),无法执行break跳出循环,则继续执行i=i+1(i=n)再进入while,因为i<n语句为假,跳出循环,这时i=n。再执行下面的语句判断i是否小于n,如果小于,则n为素数输出。

if(i>=n)
printf("%d\n",n);

我也是菜鸟,如果有什么理论上的错误,请您多包涵。本回答被提问者采纳