[英]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);
您需要1
到10
随机数,因此请尝试此操作,
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.