计算100到200的素数,为什么不能用continue语句输出正确结果,哪里错了
continue放在最内层循环中,只能够跳过该循环体下面尚未执行的语句,,然后进行下一次是否执行循环的判定,而你的continue语句下面没有语句,所以就相等于是没有用。修改如下:
#include<stdio.h>
#include<math.h>
int main()
{
int i,j,k,flag;
for(i=100;i<=200;i++)
{
flag=1;
k=sqrt(i);
for(j=2;j<=k;j++)
{
if(i%j==0)
flag=0;
}
if(flag==0)
continue;
printf("%d ",i);
}
}
那你得弄清楚 continue跟break的区别,continue是跳过本次执行下一次循环,break是直接跳出循环,不再执行本层级的循环
循环体里又没有别的语句,你这个if和continue就成了无效代码了啊
for(j=2;j<=k;j++)
if(i%j==0)
break;
if(j>k)
printf("%d ",i);
continue 意思是:跳出当前循环,进行下一个。
你写的continue没有任何意义
输出写的位置也不对
直接在if(i%j==0){
println(xxxxxx);
}
你都没搞清楚continue到底是干什么用的啊
不要写自己看不懂的代码,不知道它是干什么的就去查,查书也行,上网搜也行,别瞎写呀
你这个continue写在这跟没写一样,什么作用都不起
continue跳过的是当前循环,也就是内层循环,它不会对外层循环产生任何影响
continue是跳过本层循环的continue之后的操作,而你这么写其实有没有continue没差别,你的if语句是用来判断是否为非素数,不如把continue变为素数判断标识和break;然后在最外层循环根据素数标识符判断是否输出
main()
{
int tmp, max_n, min_n, judge = 1;
max_n = 200, min_n = 100;
for (int i = min_n; i <= 200; i++)
{
judge = 1;
tmp = sqrt(i);
for (int j = 2; j <= tmp; j++)
{
if (i % j == 0)
{
judge = 0;
break;
}
}
if (judge == 1)
{
printf("%d ", i);
}
}
return 0;
}
continue 是 持续 的意思
这里你需要的是中断 break
continue是结束当前循环,影响不到外循环,这里可以在内循环外设置一个bool类型变量flg默认false,内循环判断有无素数,若有则flg变为true,break掉内循环,接着在内循环外 判断flg是否为true,若是则continue,不是则打印。
图中的程序printf函数是隶属于外层for循环的,因此会打印出100~200间的所有数字。
程序中应添加素数判定标识符,用于打印素数时的判定,程序如下:
#include <math.h>
#include <stdio.h>
int main() {
int i, j, k;
for (i = 100; i <= 200; i++) {
int find = 0;
k = (int) sqrt(i);
for (j = 2; j <= k; j++) {
if (i % j == 0) {
find = 1;
break; // 非素数时直接跳出内层循环
//continue; //虽然continue也能实现目标,但continue仅是结束内层for的本次循环,效率低
}
}
if (find == 0)
printf("%d ", i);
}
return 0;
}