c語言中的rand隨機(jī)數(shù)函數(shù),是按指定順序來產(chǎn)生的,在生成隨機(jī)數(shù)之前,在stdlib.h頭文件中,會初始化函數(shù)srand,根據(jù)隨機(jī)種子seed,來獲取隨機(jī)數(shù),如果seed不變,每次運行得到的隨機(jī)數(shù)會是一樣的,因此,rand函數(shù)也被大家叫做偽隨機(jī)數(shù)。下面就來介紹下rand函數(shù)的使用
成都創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比玉泉網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式玉泉網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋玉泉地區(qū)。費用合理售后完善,十載實體公司更值得信賴。
01
打開代碼編譯器,輸入如下所示的代碼片段
02
運行該代碼片段,得到10個隨機(jī)數(shù),但是我們發(fā)現(xiàn),不論運行幾次,生成的隨機(jī)數(shù)都是這10個,也就是說,在種子seed不變的情況下,生成的隨機(jī)數(shù)是偽隨機(jī)數(shù)
03
我們引入頭文件time.h,取時間戳作為seed的取值來源,改代碼片段如下,將srand(1)改成srand(time(NULL))
04
運行代碼,得到10個隨機(jī)數(shù)如下,定義非常量的srand參數(shù),可以避免偽隨機(jī)數(shù)的產(chǎn)生
rand()
rand()函數(shù)用來產(chǎn)生隨機(jī)數(shù),但是,rand()的內(nèi)部實現(xiàn)是用線性同余法實現(xiàn)的,是偽隨機(jī)數(shù),由于周期較長,因此在一定范圍內(nèi)可以看成是隨機(jī)的。
rand()會返回一個范圍在0到RAND_MAX(至少是32767)之間的偽隨機(jī)數(shù)(整數(shù))。
在調(diào)用rand()函數(shù)之前,可以使用srand()函數(shù)設(shè)置隨機(jī)數(shù)種子,如果沒有設(shè)置隨機(jī)數(shù)種子,rand()函數(shù)在調(diào)用時,自動設(shè)計隨機(jī)數(shù)種子為1。隨機(jī)種子相同,每次產(chǎn)生的隨機(jī)數(shù)也會相同。
rand()函數(shù)需要的頭文件是:stdlib.h
rand()函數(shù)原型:int rand(void);
使用rand()函數(shù)產(chǎn)生1-100以內(nèi)的隨機(jī)整數(shù):int number1 = rand() % 100+1。
srand()
srand()函數(shù)需要的頭文件仍然是:stdlib.h
srand()函數(shù)原型:void srand (usigned int seed);
srand()用來設(shè)置rand()產(chǎn)生隨機(jī)數(shù)時的隨機(jī)數(shù)種子。參數(shù)seed是整數(shù),通??梢岳胻ime(0)或getpid(0)的返回值作為seed。
使用rand()和srand()產(chǎn)生1-100以內(nèi)的隨機(jī)整數(shù):
srand(time(0));
int number1 = rand() % 100+1。
函數(shù)rand()是隨機(jī)數(shù)生成器
有兩個函數(shù)用于產(chǎn)生隨機(jī)數(shù):srand()和rand()。
函數(shù)一:int
rand(void);從srand
(seed)中指定的seed開始,返回一個[0,
RAND_MAX(0x7fff)]間的隨機(jī)整數(shù)。
函數(shù)二:void
srand(unsigned
seed);參數(shù)seed是rand()的種子,用來初始化rand()的起始值。
rand()是C語言中產(chǎn)生隨機(jī)數(shù)的一個函數(shù),但是需要注意的是,產(chǎn)生的是偽隨機(jī)數(shù)。
rand()用法舉例:
產(chǎn)生1到100之間的隨機(jī)數(shù)
#includestdio.h
int
main(){
srand((unsigned)time(NULL));//產(chǎn)生隨機(jī)數(shù)種子
int
rand_num=(rand()%100)+1;//產(chǎn)生1到100直接的隨機(jī)數(shù)
printf("rand_num=%d\n",rand_num);
return
0;
}
代碼截圖:
擴(kuò)展資料:
所謂的“偽隨機(jī)數(shù)”指的并不是假的隨機(jī)數(shù)。其實絕對的隨機(jī)數(shù)只是一種理想狀態(tài)的隨機(jī)數(shù),計算機(jī)只能生成相對的隨機(jī)數(shù)即偽隨機(jī)數(shù)。
系統(tǒng)在調(diào)用rand()之前都會自動調(diào)用srand(),如果用戶在rand()之前曾調(diào)用過srand()給參數(shù)seed指定了一個值,那么
rand()就會將seed的值作為產(chǎn)生偽隨機(jī)數(shù)的初始值;
而如果用戶在rand()前沒有調(diào)用過srand(),那么系統(tǒng)默認(rèn)將1作為偽隨機(jī)數(shù)的初始
值。如果給了一個定值,那么每次rand()產(chǎn)生的隨機(jī)數(shù)序列都是一樣的。
所以為了避免上述情況的發(fā)生我們通常用srand((unsigned)time(0))或者srand((unsigned)time(NULL))來
產(chǎn)生種子。
如果仍然覺得時間間隔太小,可以在(unsigned)time(0)或者(unsigned)time(NULL)后面乘上某個合適的整數(shù)。
例如,srand((unsigned)time(NULL)*10)。
參考資料:百度百科-rand函數(shù)
它的返回值就是求取隨機(jī)的值,所以如果沒有對數(shù)有要求,直接這樣定:
printf("%d", rand());就能輸出一個隨機(jī)數(shù).但如果對數(shù)有要求,如小數(shù)或在一定值以內(nèi):
小數(shù):rand()+rand()/100.0 //100.0后面的.0必須寫,100是說明求兩位小數(shù),你可以自己加大.
一定范圍:rand()%10+0 //10是頂和底的差,0是底,就是說求10到20之間的數(shù)就是:rand()%10+10
但是調(diào)用它必須先調(diào)用srand()來生成隨機(jī)種子,如果你沒調(diào)用它,系統(tǒng)會自動調(diào)用.但是srand是有個參數(shù)的,種子就是根據(jù)這個參數(shù)來定的,所以這個參數(shù)決定著生成的隨機(jī)數(shù).如果你在代碼里寫死了它:srand(10);那這樣rand生成的隨機(jī)數(shù)就也被定格在了一定量,所以不要這樣用.要這樣寫:
srand(time(NULL));time的返回值是當(dāng)前系統(tǒng)時間.因為時間不同,所取的數(shù)值也就不同.這樣隨機(jī)數(shù)就真正的隨機(jī)了.
time在time.h中聲明
rand,srand在stdilb.h中聲明.