C中的rand函式和srand函式

2021-07-02 11:57:43 字數 1623 閱讀 6914

先我們要對rand&srand有個總體的看法:srand初始化隨機種子,rand產生隨機數,下面將詳細說明。

1、rand(產生隨機數)

表頭檔案: #include

定義函式 :int rand(void)

函式說明 :

因為rand的內部實現是用線性同餘法做的,他不是真的隨機數,只不過是因為其週期特別長,所以有一定的範圍裡可看成是隨機的,rand()會返回一隨機數值,範圍在0至rand_max 間。在呼叫此函式產生隨機數前,必須先利用srand()設好隨機數種子,如果未設隨機數種子,rand()在呼叫時會自動設隨機數種子為1。rand()產生的是假隨機數字,每次執行時是相同的。若要不同,以不同的值來初始化它.初始化的函式就是srand()。

返回值:

返回0至rand_max之間的隨機整數值,rand_max的範圍最少是在32767之間(int),即雙位元組(16位數)。若用unsigned int 雙位元組是65535,四位元組是4294967295的整數範圍。

0~rand_max每個數字被選中的機率是相同的。

2、srand(設定隨機數種子)

表頭檔案:#include

定義函式:void srand (unsigned int seed);

函式說明:

srand()用來設定rand()產生隨機數時的隨機數種子。引數seed必須是個整數,通常可以利用geypid()或time(0)的返回值來當做seed。如果每次seed都設相同值,rand()所產生的隨機數值每次就會一樣。

**示例:(用於產生20個0-100之間的隨機數,若需要產生n~m的數呢?我們只要對rand()進行一些 符號操作就行了;

n+rand()%(m-n+1); 即產生m-n之間的隨機數再加上n)

/ crt_rand.c

// this program seeds the random-number generator

// with the time, then displays 10 random integers.

//#include #include #include int main( void )

}

ps:rand()和random()的區別:

int rand(void):返回 0 ------rand_max 之間的乙個 int 型別整數,該函式為非執行緒安全函式。並且生成隨機數的效能不是很好,已經不推薦使用

long int random(void):返回 0 ------- rand_max 之間的乙個long 型別整數,該函式會產生乙個非常大的隨機值,最大為 16*((2**31)-1)。random 函式使用非線性反饋隨機數發生器生成預設大小為31個長整數表所返回的連續偽隨機數。

如果你使用 srandom 種植種子, 則你應該使用 random 返回隨機數, 如果你使用 srand 種植種子, 則你應該使用rand返回隨機數。

srand和rand官方已經不推薦使用。原因是產生隨機數的效能不是很好, 另外是隨機數的隨機性沒有random好, 再者就是不是執行緒安全。

C語言 rand 函式和srand 函式

from 標準庫 被包含於中 提供兩個幫助生成偽隨機數的函式 函式一 int rand void 從srand seed 中指定的seed開始,返回乙個 seed,rand max 0x7fff 間的隨機整數。rand max是vc 中stdlib.h 中巨集定義的乙個字元常量 define ran...

srand 和rand 函式詳解

c語言 c 或 int rand void void srand unsigned seed 函式說明 rand函式產生的隨機數嚴格意義講不是真正的隨機數,它裡面採用了線性同餘法計算出隨機數,該方法有個最大週期m,也就是說該方法實在一定的範圍內生成一串數字,不過這個m一般來說比較大,所以正常使用時一...

rand 和srand 函式的用法

一 rand rand 函式用來產生隨機數,但是,rand 的內部實現是用線性同餘法實現的,是偽隨機數,由於週期較長,因此在一定範圍內可以看成是隨機的。rand 會返回乙個範圍在0到rand max 32767 之間的偽隨機數 整數 在呼叫rand 函式之前,可以使用srand 函式設定隨機數種子,...