當前位置:編程學習大全網 - 源碼下載 - rand函數的C語言

rand函數的C語言

srand((unsigned)time(NULL))則使用系統定時/計數器的值作為隨機種子。每個種子對應壹組根據算法預先生成的隨機數,所以,在相同的平臺環境下,不同時間產生的隨機數會是不同的,相應的,若將srand(unsigned)time(NULL)改為srand(TP)(TP為任壹常量),則無論何時運行、運行多少次得到的“隨機數”都會是壹組固定的序列,因此srand生成的隨機數是偽隨機數。

庫函數中系統提供了兩個函數用於產生隨機數:srand()和rand()。 原型為:

函數壹:int rand(void);

返回壹個[0,RAND_MAX]間的隨機整數。

函數二: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被定義為長整型,它返回從1970年1月1日零時零分零秒到目前為止所經過的時間,單位為秒。

srand()、rand()用法舉例: #include<time.h>#include<stdlib.h>#include<stdio.h>void?main(){inti,j;srand((int)time(0));for(i=0;i<10;i++){j=1+(int)(10.0*rand()/(RAND_MAX+1.0));printf("%d",j);}}

  • 上一篇:php直播源代碼做開發有什麽優勢?
  • 下一篇:c#.net中dataset.table["數據表名稱"].rows.count無法賦值給int型變量
  • copyright 2024編程學習大全網