如何用函数生成-10到10的随机整数数组?现有代码存在问题
问题分析与修正
你的代码存在两个核心问题:
- 完全未使用传入的
max参数,等于白传了这个值 rand()%min的写法逻辑错误:rand()返回的是0到RAND_MAX的非负整数,C语言中取模运算的结果符号与被除数一致,所以哪怕min是负数,结果仍为非负,自然生成不了负数。
正确实现思路
要生成[min, max]闭区间的随机整数,标准公式是:
rand() % (max - min + 1) + min
逻辑拆解:
- 计算区间内整数的总个数:
max - min + 1(比如-10到10,总共有21个整数) rand() % 总个数得到0到「总个数-1」的非负整数- 加上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
相关产品推荐
相关产品推荐

