一、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ù)需要的頭文件是:
rand()函數(shù)原型:int rand(void);
使用rand()函數(shù)產(chǎn)生1-100以內(nèi)的隨機(jī)整數(shù):int number1 = rand() % 100;
二、srand()
srand()函數(shù)需要的頭文件仍然是:
srand()函數(shù)原型:void srand (usigned int seed);
srand()用來設(shè)置rand()產(chǎn)生隨機(jī)數(shù)時的隨機(jī)數(shù)種子。參數(shù)seed是整數(shù),通??梢岳胻ime(0)或geypid(0)的返回值作為seed。
使用rand()和srand()產(chǎn)生1-100以內(nèi)的隨機(jī)整數(shù):srand(time(0));
int number1 = rand() % 100;
三、使用rand()和srand()產(chǎn)生指定范圍內(nèi)的隨機(jī)整數(shù)的方法
“模除+加法”的方法
因為,對于任意數(shù),0<=rand()%(n-m+1)<=n-m
因此,0+m<=rand()%(n-m+1)+m<=n-m+m
因此,如要產(chǎn)生[m,n]范圍內(nèi)的隨機(jī)數(shù)num,可用:
int num=rand()%(n-m+1)+m;
其中的rand()%(n-m+1)+m算是一個公式,記錄一下方便以后查閱。
比如產(chǎn)生10~30的隨機(jī)整數(shù):
srand(time(0));
int a = rand() % (21)+10;