在庫函式中系統提供了兩個函式用於產生隨機數:srand()和rand()。
原型為:
函式一:int rand(void);
從srand (seed)中指定的seed開始,返回乙個[seed, rand_max(0x7fff))間的隨機整數。
函式二:void srand(unsigned seed);
引數seed是rand()的種子,用來初始化rand()的起始值。
但是,要注意的是所謂的「偽隨機數」指的並不是假的隨機數。其實絕對的隨機數只是一種理想狀態的隨機數,計算機只能生成相對的隨機數即偽隨機數。計算機生成的偽隨機數既是隨機的又是有規律的 —— 一部份遵守一定的規律,一部份則不遵守任何規律。比如「世上沒有兩片形狀完全相同的樹葉」,這正點到了事物的特性 —— 規律性;但是每種樹的葉子都有近似的形狀,這正是事物的共性 —— 規律性。從這個角度講,我們就可以接受這樣的事實了:計算機只能產生偽隨機數而不是絕對的隨機數。
系統在呼叫rand()之前都會自動呼叫srand(),如果使用者在rand()之前曾呼叫過srand()給引數seed指定了乙個值,那麼rand()就會將seed的值作為產生偽隨機數的初始值;而如果使用者在rand()前沒有呼叫過srand(),那麼系統預設將1作為偽隨機數的初始值。如果給了乙個定值,那麼每次rand()產生的隨機數序列都是一樣的~~
所以為了避免上述情況的發生我們通常用srand((unsigned)time(0))或者srand((unsigned)time(null))來產生種子。如果仍然覺得時間間隔太小,可以在(unsigned)time(0)或者(unsigned)time(null)後面乘上某個合適的整數。例如,srand((unsigned)time(null)*10)
另外,關於time_t time(0):time_t被定義為長整型,它返回從2023年1月1日零時零分零秒到目前為止所經過的時間,單位為秒。
關於求值區域的問題:要取得[a,b)之間的隨機整數,使用(rand() % (b-a))+ a (結果值將含a不含b)。
在a為0的情況下,簡寫為rand() % b。
VC中產生隨機數
需要的標頭檔案 stdlib.h 庫函式 srand rand time 方法 1.首先設定種子srand unsigned time null 使用當前時間作為種子是多數人的習慣做法 2.產生隨機數 rand 可以產生乙個隨機數 範圍在0 rand max 32767 之間 如果要產生乙個 min...
C C 中產生隨機數 rand,srand用法
計算機的隨機數都是由偽隨機數,即是由小m多項式序列生成的,其中產生每個小序列都有乙個初始值,即隨機種子。注意 小m多項式序列的週期是65535,即每次利用乙個隨機種子生成的隨機數的週期是65535,當你取得65535個隨機數後它們又重複出現了。我們知道rand 函式可以用來產生隨機數,但是這不是真正...
C C 中產生隨機數 rand,srand用法
計算機的隨機數都是由偽隨機數,即是由小m多項式序列生成的,其中產生每個小序列都有乙個初始值,即隨機種子。注意 小m多項式序列的週期是65535,即每次利用乙個隨機種子生成的隨機數的週期是65535,當你取得65535個隨機數後它們又重複出現了。我們知道rand 函式可以用來產生隨機數,但是這不是真正...