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

如何用函数生成-10到10的随机整数数组?现有代码存在问题

问题分析与修正

你的代码存在两个核心问题:

  • 完全未使用传入的max参数,等于白传了这个值
  • rand()%min的写法逻辑错误:rand()返回的是0到RAND_MAX的非负整数,C语言中取模运算的结果符号与被除数一致,所以哪怕min是负数,结果仍为非负,自然生成不了负数。

正确实现思路

要生成[min, max]闭区间的随机整数,标准公式是:

rand() % (max - min + 1) + min

逻辑拆解:

  1. 计算区间内整数的总个数:max - min + 1(比如-10到10,总共有21个整数)
  2. rand() % 总个数得到0到「总个数-1」的非负整数
  3. 加上min,把范围平移到目标区间[min, max]

修正后的代码

// 函数名改为fillArray更贴合功能,返回值改为void(原代码无返回值却声明int,会触发编译警告)
void fillArray(int a[], int n, int min, int max) {
    // 处理max < min的异常情况,避免计算出负数范围
    if (max < min) {
        int temp = min;
        min = max;
        max = temp;
    }
    int range = max - min + 1;
    for (int i = 0; i < n; i++) {
        a[i] = rand() % range + min;
        printf("%d ", a[i]);
    }
}

额外注意事项

  • 必须在程序开头调用srand(time(NULL))初始化随机数种子,否则每次运行程序生成的随机数序列完全相同。示例:
    #include <stdlib.h>
    #include <time.h>
    
    int main() {
        srand(time(NULL)); // 初始化随机数种子
        // 其他代码:定义数组、调用fillArray等
        return 0;
    }
    
  • 该公式适用于小范围区间,若max - min +1超过RAND_MAX会出现分布不均问题,但-10到10的范围完全适用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 10:11:07