c - C中生成随机数的函数

标签 c arrays matrix random

我想用 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/

相关文章:

python - 在两个 for 循环中迭代列表元素

javascript - 存储此数据的最佳方式(数组、对象等)

c - C程序中的尴尬错误

java - 我的数组在哪里发生了变化?

c - 当调用 dlclose 时共享库中的全局变量会发生什么?

查找特征值的代码

matrix - 三.js shader 点光源位置

r - 每列出现频率最高的元素

c++ - 如何重现浮点 cos(x)!=cos(x)

c - 具有空初始值设定项的空数组