簡體   English   中英

在C中生成隨機數的函數

[英]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);

您需要110隨機數,因此請嘗試此操作,

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM