我想在C中编写一个函数,它接受一个整数n
作为参数,并生成n^2
个随机数(1 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
的更大值。那我该怎么做呢?
答案 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);
您需要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调用中生成不同的连续结果。
答案 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 */
}
}