在C中生成随机数的函数

时间:2015-07-10 05:14:52

标签: c arrays matrix random

我想在C中编写一个函数,它接受一个整数n作为参数,并生成n^2个随机数(1 n^2个号码存储在float *arr中  稍后将arr传递给另一个将数组重新排列为n*n矩阵的函数。 例如,第一行中的第一个n元素,下一个' n'在第二行等等。如何生成随机数,以便结束矩阵中的所有行都不相同。

当n像3一样小的时候我就像

一样手动创建数组
float* arr;
float temp[9] = {1,1,1,1,1,1,1,1,1};
arr = temp;

我想测试n的更大值。那我该怎么做呢?

3 个答案:

答案 0 :(得分:3)

嗯,首先,你需要了解当你写

arr = malloc(9*sizeof(float));
float temp[9] = {1,1,1,1,1,1,1,1,1};
arr = temp;

你浪费了对malloc的电话。当你说

arr = temp;

你没有复制数组内容,你只是重新排列指针。首先arr已指向您使用malloc分配的区域,但稍后它指向数组temp,并指向malloc' ed记忆力丢失了。 [但你现在已经解决了这个问题,所以我们可以继续前进。]

如果您想使用像temp这样的固定数组填写9个值而不,那很容易:

int n = 3;
int arrsize = n * n;
int i;
float *arr = malloc(arrsize * sizeof(float));
for(i = 0; i < arrsize; i++) arr[i] = 1.0;

在这里,我们可以写arr[i] = 1.0的事实非常重要。 arr是一个指针,但我们将其视为一个数组。这是着名的&#34;数组和指针的对等&#34;在行动中,如果你还不熟悉,现在是时候学习了。

你还说过你想要随机数字,所以我假设你并不想将数组的每个元素都设置为1.这里是获取随机数的快捷方法 - 我是&#39; m从1到10选择它们,分辨率为0.01。

for(i = 0; i < arrsize; i++) arr[i] = 1. + rand() % 900 / 100.;

我们可以谈论这方面的一些问题,但这是一个不错的开始。

答案 1 :(得分:0)

使用rand()函数生成随机数。

int rand (void);

您需要110随机数,所以试试这个,

var = rand() % 10 + 1;     // var in the range 1 to 10

您可以按照以下步骤操作:

n = input
float* arr = malloc arr to n^2 
//initialize random seed
srand (time(NULL));
begin for loop (i = 0 to n^2-1)
    arr[i] = rand() % 10 + 1;
end for

请注意,使用作为种子传递给srand()的参数初始化伪随机数生成器。

对于srand调用中使用的每个不同种子值,伪随机数生成器可能会在随后的rand调用中生成不同的连续结果。

答案 2 :(得分:0)

您可以使用rand(void)(位于stdlib.h)。请记住使用srand()初始化种子,例如srand(time(NULL))

void fillRow(float* row, size_t count) {
    size_t i;
    for(i = 0; i < count; ++i) {
        row[i] = (rand() % 10) + 1; /* this will generate a random number between 1 and 10 */
    }
}