C語言隨機函式的使用
阿新 • • 發佈:2018-11-25
rand()和srand()應該是初學者最先接觸到的隨機函數了,今天博主就這兩個函式陳述一下自己的理解。
這兩個函式的使用規範如下:
/*這是一個模擬擲色子1800次的程式*/
#include <stdlib.h>
#include <time.h>
int main()
{ int i;
srand((unsigned)time(0));
for (i=0;i<1800;i++) printf("%d\n",rand()%6+1);
return 0;
}
執行結果如下:
根據百度百科,庫函式中系統提供了兩個函式用於產生隨機數:srand()和rand()。 原型為:
函式一:int rand(void);
返回一個[0,RAND_MAX]間的隨機整數。
函式二:void srand(unsigned seed);
引數seed是srand()的種子,用來初始化srand()的起始值。
系統在呼叫rand()之前都會自動呼叫srand(),如果在srand()裡給引數seed指定了一個值(這裡指定的值是當前時間),那麼 rand()就會將seed的值作為產生偽隨機數的初始值;而如果使用者在rand()前沒有呼叫過srand(),那麼系統預設將1作為偽隨機數的初始值,如果初始值是此時的1或是其他定值,那麼每次rand()產生的隨機數序列都是一樣的,這也就是所謂的“偽隨機數”。
值得注意的是,如果srand()括號中沒有argument的話,程式是會報錯的,因為在函式原型中,srand()函式是要求加上內容的。
簡而言之,即有如下點:
- rand()函式可以生成一個[0,RAND_MAX]間的隨機整數;
(ISO IEC 9899 2011 (C11)標準中未規定 RAND_MAX 的具體數值。但該標準規定了RAND_MAX 的值應至少為32767。程式設計的時候,不應該對 RAND_MAX 的具體數值做任何假設。)
- srand()可以被認為是為rand()的“偽隨機數”的結果指定一個固定的序列,若未引用srand()函式,則程式預設srand()括號中的值為1;如果引用的話,srand()括號中不能為空;
- 為了確保生成的隨機數為儘可能符合概率上的隨機,需要呼叫一個函式time()
(是指返回自 Unix 紀元(January 1 1970 00:00:00 GMT)起的當前時間的秒數的函式,主要用來獲取當前的系統時間,返回的結果是一個time_t型別)
rand()和srand()應該是初學者最先接觸到的隨機函數了,今天博主就這兩個函式陳述一下自己的理解。
這兩個函式的使用規範如下: