1. 程式人生 > >C語言隨機函式的使用

C語言隨機函式的使用

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()函式是要求加上內容的。

簡而言之,即有如下點:

  1. rand()函式可以生成一個[0,RAND_MAX]間的隨機整數;(ISO IEC 9899 2011 (C11)標準中未規定 RAND_MAX 的具體數值。但該標準規定了RAND_MAX 的值應至少為32767。程式設計的時候,不應該對 RAND_MAX 的具體數值做任何假設。)
  2. srand()可以被認為是為rand()的“偽隨機數”的結果指定一個固定的序列,若未引用srand()函式,則程式預設srand()括號中的值為1;如果引用的話,srand()括號中不能為空;
  3. 為了確保生成的隨機數為儘可能符合概率上的隨機,需要呼叫一個函式time()(是指返回自 Unix 紀元(January 1 1970 00:00:00 GMT)起的當前時間的秒數的函式,主要用來獲取當前的系統時間,返回的結果是一個time_t型別)
    ,這個函式包含在標頭檔案time.h裡,在生成隨機數的呼叫下需強制型別轉換為(unsigned)time(),後面一個括號中必須填入(unsigned)time(NULL)或(unsigned)time(0)。

rand()和srand()應該是初學者最先接觸到的隨機函數了,今天博主就這兩個函式陳述一下自己的理解。
這兩個函式的使用規範如下: