Как создать несколько массивов случайных чисел в C - PullRequest
1 голос
/ 12 марта 2019

Мне нужно создать массив массивов в C, где каждый массив имеет случайные значения. Однако когда я запускаю свой код, я получаю один и тот же набор чисел, повторяемый для каждого внутреннего массива. Я пытался посеять внутри моего внутреннего цикла, и это не работает для меня. Как я могу создать несколько массивов со случайными числами?

int n=100,d=5;
float *p[n];
float arr[d];

srand(time(NULL));
for (int i = 0; i < n; i++){   
    for(int j=0; j<d;j++){
        arr[j] = rand()%100;
    }
    p[i] = arr;
}

Ответы [ 2 ]

1 голос
/ 12 марта 2019

Это указатель на тот же массив, который вы сохраняете во все элементы p, то есть все элементы указывают на arr и, следовательно, значения из последнего цикла

Вам нужен код вроде:

int n=100,d=5;
float arr[n][d];

srand(time(NULL));
for (int i = 0; i < n; i++){   
    for(int j=0; j<d;j++){
        arr[i][j] = rand()%100;
    }
}

так что у вас есть истинный массив массива (он же 2D массив), т.е. float arr[n][d];

В качестве альтернативы вы можете сделать массив arr, используя динамическое распределение - как:

int n=100,d=5;
float *p[n];
float* arr;

srand(time(NULL));
for (int i = 0; i < n; i++){   
    arr = malloc(d * sizeof *arr);  // alloc array for this loop
    if (arr == NULL) exit(1);
    for(int j=0; j<d;j++){
        arr[j] = rand()%100;
    }
    p[i] = arr;
}

Второе решение лучше всего, если у вас большие значения n и d (то есть, чтобы избежать переполнения стека)

0 голосов
/ 12 марта 2019

Семя только один раз .

Вы можете использовать двойной цикл for и два индекса для заполнения 2D-массива, например:

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

int main(void) {
    srand(time(NULL));
    const int n = 100, d = 5;
    float matrix[n][d];
    for (int i = 0 ; i < n ; ++i)
      for(int j = 0; j < d; ++j)
        matrix[i][j] = rand() % 100;
    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...