c语言 break 语句

编程输出100以内的素数。代码如下(摘自课本):
int main(void)
{
int n,i;
for(n=2;n<=100;n++)
{
for(i=2;i<n;i++)
if(n%i==0)break;
if(i>=n)printf("\t%d",n);
}
getch();
return 0;
}
课本讲解如下:...第二层循环中对数n用2~n-1逐个去除,若某次除尽则跳出改循环,说明不是素数。如果在所有的数都是未除尽的情况下结束循环,则为素数,此时有i>=n,故可经此判断后输出素数。
问题如下:i 怎么可能大于或等于n?!在第二个循环中i=n就跳出回到第一个循环去了啊?我晕。

因为,没有花括号限制循环体的for循环默认只执行其后的一行语句,
所以 if(i>=n)printf("\t%d",n);这一句是属于第一个循环的~
祝你好运!!!

这个属于编程规范,一般公司都会要求无论任何循环的循环体是不是只有一句,都必须要加上花括号,以免降低代码的可读性。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-06-17
int main(void)
{
int n,i;
for(n=2;n<=100;n++)
{
for(i=2;i<=sqrt(n);i++) //这么根号n就可以了
if(n%i==0)break;
printf("\t%d",n); //这个判断没有,直接去掉吧
}
getch();
return 0;
}
第2个回答  2011-06-17
要注意 if(i>=n)printf("\t%d",n);是属于第一循环的,跳出内循环就执行这句
第3个回答  2011-06-17
2是一个素数,它这个代码没错,所以直接输出了。如果没有大括号括起的话,只有for后面的一个语句是属于循环的。if(i>=n)printf("\t%d",n);并不属于里层循环。