为什么不能用continue语句输出正确结果

计算100到200的素数,为什么不能用continue语句输出正确结果,哪里错了

img

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;
}