[英]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.