繁体   English   中英

在C中生成随机数的函数

[英]Function that generates a random number in C

我想用C编写一个函数,该函数将整数n作为参数并生成n^2随机数(1 <n <10)。 我想将这些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 那我该怎么办呢?

好吧,首先,您需要了解当您写

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的内存的指针丢失了。 [但是您现在已经解决了这个问题,因此我们可以继续进行。]

如果要填写9个值而不使用temp这样的固定数组,那很简单:

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是一个指针,但我们将其视为数组。 这就是著名的“数组和指针的等效性”,如果您还不熟悉它,那么现在该学习一下。

您还说过您想要随机数,所以我假设您并不是真的希望将数组的每个元素都设置为1。这是获取随机数的快速方法-我从1到10的范围内选择了一个分辨率为0.01。

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

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

使用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调用中生成不同的结果序列。

您可以使用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 */
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM