標准庫 參數seed是rand()的種子,用來初始化rand()的起始值。(一般情況下:我們都使用time(NULL)種子, 從一個時間點(一般是1970年1月1日0時0分0秒)到那時的秒數(即日歷時間)) #define RAND_MAX 0x7fffu PS: time(NULL)返回值是time_t,實際上是長整型,到未來的某一天。對於time_t數據類型的值來說,它所表示的時間不能晚於2038年1月18日19時14分07秒。不過基本上也夠大家使用了,如果需要更長的時間,可以使用64的_time64來進行處理。 rand()在每次被調用的時候,它會查看: 1)如果用戶在此之前調用過srand(seed),給seed指定了一個值,那麼它會自動調用srand(seed)一次來初始化它的起始值。 產生隨機數的用法 一定范圍隨機數的通用表示公式 MSDN標准示例代碼
函數一:int rand(void);
從srand (seed)中指定的seed開始,返回一個[seed, RAND_MAX(0x7fff))間的隨機整數。
函數二:void srand(unsigned seed);
這個是bcc55中的定義,說明這個整數的最大數是0x7fffu,u代表unicode編碼。
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也是一個定值)。
1) 給srand()提供一個種子,它是一個unsigned int類型;
2) 調用rand(),它會根據提供給srand()的種子值返回一個隨機數(在0到RAND_MAX之間);
3) 根據需要多次調用rand(),從而不間斷地得到新的隨機數;
4) 無論什麼時候,都可以給srand()提供一個新的種子,從而進一步“隨機化”rand()的輸出結果。
// crt_rand.c
// This program seeds the random-number generator
// with the time, then exercises the rand function.
//
#include