C語言 rand 函式和srand 函式

2021-06-21 13:10:52 字數 2086 閱讀 1162

from : 

標準庫(被包含於中)提供兩個幫助生成偽隨機數的函式:

函式一:int rand(void);

從srand (seed)中指定的seed開始,返回乙個[seed, rand_max(0x7fff))間的隨機整數。

(rand_max是vc

中stdlib.h

中巨集定義的乙個字元常量:

#define rand_max 0x7fff

,其值最小為

32767,

最大為2147483647

,通常在產生隨機小數時可以使用

rand_max。)

函式二:void srand(unsigned seed);

引數seed是rand()的種子,用來初始化rand()的起始值。

可以認為rand()在每次被呼叫的時候,它會檢視:

1)如果使用者在此之前呼叫過

srand(seed)

,給seed

指定了乙個值,那麼它會自動呼叫

srand(seed)

一次來初始化它的起始值。

2)如果使用者在此之前沒有呼叫過

srand(seed)

,它會自動呼叫

srand(1)

一次。

根據上面的第一點我們可以得出:

1)如果希望rand()在每次程式執行時產生的值都不一樣,必須給srand(seed)中的seed乙個變值,這個變值必須在每次程式執行時都不一樣(比如到目前為止流逝的時間)。

2) 否則,如果給seed指定的是乙個定值,那麼每次程式執行時rand()產生的值都會一樣,雖然這個值會是[seed, rand_max(0x7fff))之間的乙個隨機取得的值。

3)如果在呼叫rand()之前沒有呼叫過srand(seed),效果將和呼叫了srand(1)再呼叫rand()一樣(1也是乙個定值)。

4)乙個種子對應一系列隨機數。

舉幾個例子,假設我們要取得0~6之間的隨機整數(不含6本身):

例一,不指定seed:

for(int i=0;i<10;i++)

編譯執行,發現的確產生隨機數了,但是,

每次執行程式產生的隨機數都是一樣的,為什麼呢?

因為隨機數取在

c語言中採用的是固定序列,所以每次執行所取的是同乙個數

。那麼如何寫乙個程式,讓它每次執行時產生的隨機數

都不一樣呢?

(2)srand()函式:

原型: void srand(unsigned seed)

功能: 產生隨機數的起始發生資料,和rand函式配合使用

標頭檔案: stdlib.h   time.h

例:#include

#include

#include

int main(void)

這時執行程式,會發現每次產生的隨機數都不一樣。

這是因為這裡採用了時間作為種子,而時間在每時每刻都

不相同,

所以就產生了"隨機"的隨機數了

。所以,要想產生不同的隨機數,在使用rand之前需要先呼叫srand。

這樣做相當麻煩,

有沒乙個更簡單的函式呢?

(3)randomize()函式:

原型: int randomize(void)

功能: 通過time函式來得到乙個隨機數

標頭檔案: stdlib.h   time.h

該函式就相當於srand((unsign)(time(null)) 不過應注意的是randomize()的功能要通過time來實現所以在

呼叫它時標頭檔案要包含time.h。

(4)產生乙個x到y的隨機數:

由於rand產生的隨機數從0到rand_max,而rand_max是乙個很大的數,

那麼如何產生從x~y的數呢

?只要這樣寫:

k=rand()%(y-x+1)+x;

這樣可以產生任何範圍內的隨機數。

srand 和rand 函式詳解

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

c語言裡函式rand()和srand()的用法

rand void 用於產生乙個偽隨機unsigned int 整數。srand seed 用於給rand 函式設定種子。srand 和 rand 應該組和使用。一般來說,srand 是對 rand 進行設定。比如 srand uint getcurrenttime int x rand 100 是...

C中的rand函式和srand函式

先我們要對rand srand有個總體的看法 srand初始化隨機種子,rand產生隨機數,下面將詳細說明。1 rand 產生隨機數 表頭檔案 include 定義函式 int rand void 函式說明 因為rand的內部實現是用線性同餘法做的,他不是真的隨機數,只不過是因為其週期特別長,所以有...