一、rand()
rand()函數(shù)用來產(chǎn)生隨機(jī)數(shù)玄坦,但是血筑,rand()的內(nèi)部實(shí)現(xiàn)是用線性同余法實(shí)現(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ì)隨機(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ù)纲熏,通匙鼻穑可以利用time(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ù)的方法
“模除+加法”的方法
因?yàn)槠矗瑢τ谌我鈹?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;