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

C++遍历数组判断质数代码输出异常及数组越界问题咨询

问题排查与解答

核心错误点

  • 数组下标使用错误
    C++ 数组下标从0开始计数,你定义的randomOne数组长度为10,合法下标范围是0~9。你外层循环写的是for (int i = 1; i <= 10; ++i):
    1. 跳过了下标为0的第一个元素1
    2. 当i=10时触发数组越界访问,程序读取了数组末尾之后的内存随机值,你看到的超大数1052166324就是越界访问产生的未定义行为,和编译器无关,是内存访问违规的典型表现。
  • 计数变量未重置
    你把计数变量count定义在了外层循环的外面,每判断完一个数字后没有将count重置为0,count值会持续累加之前所有数字的统计结果,导致后续所有数字的因数计数都不符合预期,永远不可能等于2,所以都会走else分支输出为质数。
  • 质数判断逻辑写反
    如果一个数的因数计数count等于2,说明它只有1和自身两个因数,属于质数,你的代码里把判断分支写反了,count==2时反而输出是合数,和正确逻辑完全相反。

修复后的代码参考

constants.h 无需修改

main.cpp 修正后代码

#include <iostream>
#include "constants.h"

// 单独抽离质数判断函数,逻辑更清晰,也避免变量污染
bool isPrime(int num) {
    // 小于等于1的数既不是质数也不是合数
    if (num <= 1) return false;
    // 优化判断逻辑,只需要遍历到平方根即可,不用遍历到num本身
    for (int j = 2; j * j <= num; ++j) {
        if (num % j == 0) return false;
    }
    return true;
}

int main() {
    // 循环下标从0开始,到9结束,避免越界
    for (int i = 0; i < 10; ++i) {
        int num = constants::randomOne[i];
        if (isPrime(num)) {
            std::cout << num << " 是质数!\n";
        } else {
            std::cout << num << " 不是质数,是合数。\n";
        }
    } 
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 17:36:03