You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Continue控制流无法判定质数,程序无输出原因咨询

问题分析与修复方案

嘿,这问题其实挺典型的,咱们一步步拆解:

1. 核心问题:continue 让 printf 永远无法执行

你写的代码里,continue 语句放在了 printf("prime\n"); 的前面——而 continue 的作用是立即跳过循环体中剩余的所有代码,直接回到循环的条件判断环节。也就是说:

  • 只要进入 if(n%i!=0) 的分支,程序会直接跳回 for 循环的 i++ 步骤,后面的 printf 根本没机会运行;
  • 如果没进入这个分支(也就是 n%i==0),整个 if 块的代码都不会执行,自然也不会触发 printf。
    这就是程序完全没有输出的直接原因。

2. 质数判断的逻辑完全搞反了

咱们再理清楚质数的定义:质数是大于1的自然数,且只能被1和它本身整除。所以你的循环逻辑应该是:

  • 遍历从2到n-1的所有数i;
  • 如果存在任意一个i能整除n,说明n不是质数,直接终止循环;
  • 如果循环正常结束(遍历完所有i都没找到能整除n的数),说明n是质数,再输出结果。

修正后的代码示例

#include<stdio.h>

int main() // 注意:main函数的标准返回类型是int
{
    int n, i;
    scanf("%d", &n);
    // 先处理特殊情况:n小于2的话肯定不是质数
    if (n < 2) {
        printf("not prime\n");
        return 0;
    }
    // 遍历判断是否存在因数
    for(i = 2; i < n; i++)
    {
        if(n % i == 0) // 找到能整除的数,说明不是质数
        {
            printf("not prime\n");
            return 0; // 直接终止程序,不用继续循环了
        }
    }
    // 循环正常结束,说明没找到因数,是质数
    printf("prime\n");
    return 0;
}

额外优化建议

如果想让程序更高效,可以把循环的上限改成sqrt(n)——因为如果n有一个大于sqrt(n)的因数,那必然对应一个小于sqrt(n)的因数,这样能大幅减少循环次数。优化后的代码如下:

#include<stdio.h>
#include<math.h> // 需要引入math库

int main()
{
    int n, i;
    scanf("%d", &n);
    if (n < 2) {
        printf("not prime\n");
        return 0;
    }
    int sqrt_n = sqrt(n);
    for(i = 2; i <= sqrt_n; i++)
    {
        if(n % i == 0)
        {
            printf("not prime\n");
            return 0;
        }
    }
    printf("prime\n");
    return 0;
}

内容的提问来源于stack exchange,提问作者Rishi Srivastava

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:34:42