关于c语言中break应用的小问题

来源:百度知道 编辑:UC知道 时间:2024/06/05 10:26:08
一个初级的求素数的问题
#include "stdio.h"
#include "conio.h"
#include "math.h"
main(){
unsigned int b,i,j,N,flag;
printf("big number=\n");
scanf("%d",&N);
for(i=2;i<=N;i++)
{flag=1;
for(j=2;j<=sqrt(i);j++)
{if(i%j==0) flag=0;break;} /*break的影响--问题所在*/
if(flag) printf("%d\n",i);
}
getch();
}
其中如果去掉break,输出的是素数没有问题。2,3,5,7,11,13,17.....
但是如果留着break,输出的就是奇数2,3,5,7,9,11,13,15.....
这是错在哪里了?执行break之前先给flag赋值为0了,为什么后面还会被打印出来,百思不得其解,请教大家了,谢谢。

for(i=2;i<=N;i++)
{
flag=1;
for(j=2;j<=sqrt(i);j++)
{
if(i%j==0) /*j从2开始,所以奇数 if 条件就是假*/
{
flag=0;
}
break;/*j=2 奇数 直接执行 break 跳出循环 这时 flag 是 1*/
}

if(flag)
printf("%d\n",i);
}

所以奇数就全被打印出来