for循环,执行表达式1,n=2,然后表达式2,n<m,否,不就跳出循环了吗?
那如果是4了 ?
你随便把一个数字带入里面,比如7,第一个For循环判断成立,进入第二For循环,此时n=2,m=7,m再这个循环里面是恒定的,成立,继续循环,接着n不断加一,最后加到7,才判定不成立,跳出循环,此时m=7,n=7,因为如果m=n就要输出出来,所以7被输出出来了。你可以试试把其它数字带入,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);
}
这个m最开始的初始值为2然后进入子循环,发现不满足n<m这个条件跳过for(n=2; n<m; n++)这个循环,,满足if(m == n)打印出来这就是第一个素数2,然后m的自增1,继续循环