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

使用两个函数生成指定范围随机数数组时遇问题

问题排查与修正方案

我来帮你把这段生成随机数组的代码改对,咱们一步步拆解问题:

1. 随机数生成的种子缺失

你用了rand()函数,但没初始化随机数种子——这会导致每次运行程序时,生成的随机数序列完全一模一样!

解决方法很简单:在调用cria_aleatorio函数之前,加上srand(time(NULL));,记得要包含<time.h>头文件,让随机数种子随系统时间变化,每次运行都能生成不同的随机序列。

2. 打印函数的致命错误

你的print_vetor函数有两个严重问题:

  • 数组索引越界:数组的下标是从0开始的,vetor[tamanho]已经超出了数组的有效范围(最后一个元素是vetor[tamanho-1]),这会触发未定义行为,可能打印垃圾值甚至导致程序崩溃。
  • 没有遍历数组:函数里只执行了两次printf,根本没循环遍历整个数组,自然没法打印所有元素。

修正后的完整代码

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void cria_aleatorio(int *vetor, int tamanho, int min, int max) {
    int i;
    for(i=0; i<tamanho; i++) {
        vetor[i] = (rand() % (max - min + 1)) + min;
    }
}

void print_vetor(int *vetor, int tamanho){
    int i;
    printf("数组元素:");
    for(i=0; i<tamanho; i++) {
        printf("%d ", vetor[i]);
    }
    printf("\n数组长度:%d\n", tamanho);
}

int main() {
    int arr[10];
    // 初始化随机数种子
    srand(time(NULL));
    cria_aleatorio(arr, 10, 1, 100);
    print_vetor(arr, 10);
    return 0;
}

修正说明

  • 给print_vetor添加了循环,遍历数组的每个元素并打印;
  • 加上了清晰的输出提示,让结果更容易阅读;
  • 在main函数里添加了随机数种子的初始化,保证每次运行生成不同的随机数组;
  • 保留了你原本正确的随机数生成公式(rand() % (max - min + 1)) + min——这个公式是对的,能生成[min, max]范围内的整数随机数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:02:23