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

为何这段C++质数查找代码模板无法运行?求问题解析

代码无法正常运行的原因解析

首先贴出原代码:

#include <stdio.h>
int main()
{
    int list[10];
    int a,b,c;
    int d=1;
    int e=0;
    printf("Enter a starting number to find 10 prime numbers: ");
    scanf("%d",&a);
    printf("Enter a ending number to find 10 prime numbers: ");
    scanf("%d",&b);
    for(c=0;c<10;c++)
    {
        while(a<b)
        {
            while(d<a)
            {
                if(a%d==0)
                {
                    e=1;
                }
                d++;
            }
            a++;
        }
        if(e==0)
        {
            list[c]=a;
            printf("%d is prime.",list[c]);
        }
    }
}

以下是导致代码失效的核心问题:

  • 质数判断逻辑完全错误

    • 质数判断的除数d初始值为1,任何整数除以1都余0,所以e会被直接设为1,导致所有数都会被判定为非质数。正确的质数判断应该从2开始遍历到sqrt(a),而非从1开始。
    • 每次判断新数字时,未重置d和e的值。比如判断完第一个数后,d已累加到较大数值,后续判断其他数时d<a的条件直接不成立,完全跳过判断逻辑。
  • 循环嵌套逻辑混乱,无法持续查找质数

    • 外层for循环目标是找10个质数,但内层while(a<b)会一次性把a递增到等于b,之后外层循环继续执行时,a已不小于b,再也不会进入内层循环检查任何数字,自然找不到足够的质数。
    • 代码未检查初始输入的a是否为质数,直接执行a++,导致起始数如果是质数会被跳过。
  • 状态变量未正确重置

    • 标记非质数的变量e在每次判断新数字前未重置为0,一旦某个数触发e=1,后续所有数字的判断都会沿用这个状态,永远无法判定为质数。
  • 数组与输出的潜在问题

    • 如果a到b范围内找不到10个质数,list数组中未被赋值的元素会保留垃圾值,但代码仍会尝试访问这些元素。
    • 找到质数后的输出没有换行,导致所有结果挤在一起,可读性极差。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 09:35:16