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

C语言开发时无法将计算得到的质数存入数组问题求助

问题原因

  • 数组类型错误:使用char类型数组存储整数型质数,char取值范围有限,大于127的数值会发生溢出截断,无法正确存储质数,需改为int类型数组。
  • 输出方式错误:使用%s格式符输出整数数组,%s仅用于输出以\0结尾的字符串,直接打印整数数组会输出乱码甚至触发内存越界,需遍历数组逐个输出元素。
  • 函数未前置声明:自定义的primed函数定义在main函数之后,调用前没有声明原型,编译器会触发隐式声明报错。
  • 输入参数未使用:代码读取了m参数但完全没有用到,无法实现「指定数值范围」的质数筛选逻辑,需要调整循环范围匹配输入的区间。
  • 缺少数组越界防护:未判断收集的质数数量是否超过数组长度SIZE,数值范围过大时会发生数组越界。

修正后代码

#include <stdio.h>
#define SIZE 1000

// 提前声明质数判断函数
int primed(int num);

int main(){
    int n, m, count, i=0;
    // 改为int类型数组存储质数
    int prime[SIZE];

    printf("请输入数值范围的左右边界(空格分隔):");
    scanf("%d %d", &n, &m);

    // 适配任意输入顺序,从较小值遍历到较大值
    int start = n < m ? n : m;
    int end = n > m ? n : m;
    for(count = start; count <= end; count++){
        // 小于2的数不是质数,直接跳过
        if(count < 2) continue;
        // 增加数组越界判断
        if(i >= SIZE) {
            printf("质数数量超过数组上限,仅存储前%d个质数\n", SIZE);
            break;
        }
        if(primed(count) == 0){
            prime[i++] = count;
        }
    }

    // 遍历输出数组中存储的质数
    printf("范围内的质数共%d个:\n", i);
    for(int j=0; j<i; j++){
        printf("%d ", prime[j]);
    }
    printf("\n");
    return 0;
}

int primed(int num){
    // 优化判断逻辑,遍历到平方根即可,运行效率更高
    for(int primes = 2; primes*primes <= num; primes++){
        if (num % primes == 0){
            return 1;
        }
    }
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 19:09:01