我想用 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
的内存丢失。 [但你现在已经解决了这个问题,所以我们可以继续前进。]
如果您想不使用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
是一个指针,但我们将其视为一个数组。这就是著名的“数组和指针等价”的实际应用,如果您对它还不适应,现在是学习的时候了。
你还说你想要随机数,所以我假设你真的不想将数组的每个元素都设置为 1。这是获取随机数的快速方法——我从 1 到 10 中选择它们,分辨率为 0.01。
for(i = 0; i < arrsize; i++) arr[i] = 1. + rand() % 900 / 100.;
我们可以讨论一些问题,但这是一个不错的开始。
关于c - C中生成随机数的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31332955/