最近在學(xué)著用c寫(xiě)一些小程序,過(guò)程中遇到很多問(wèn)題,在網(wǎng)上查很多大神的講解,以及查閱vs2010的幫助文檔。在此做個(gè)筆記,以便今后查閱,備忘。感謝無(wú)私奉獻(xiàn)講解的大神們!
一、rand()
rand()函數(shù)用來(lái)產(chǎn)生隨機(jī)數(shù),但是,rand()的內(nèi)部實(shí)現(xiàn)是用線性同余法實(shí)現(xiàn)的,是偽隨機(jī)數(shù),由于周期較長(zhǎng),因此在一定范圍內(nèi)可以看成是隨機(jī)的。
rand()會(huì)返回一個(gè)范圍在0到RAND_MAX(32767)之間的偽隨機(jī)數(shù)(整數(shù))。
在調(diào)用rand()函數(shù)之前,可以使用srand()函數(shù)設(shè)置隨機(jī)數(shù)種子,如果沒(méi)有設(shè)置隨機(jī)數(shù)種子,rand()函數(shù)在調(diào)用時(shí),自動(dòng)設(shè)計(jì)隨機(jī)數(shù)種子為1。隨機(jī)種子相同,每次產(chǎn)生的隨機(jī)數(shù)也會(huì)相同。
rand()函數(shù)需要的頭文件是:<stdlib.h>
rand()函數(shù)原型:int rand(void);
使用rand()函數(shù)產(chǎn)生1-100以內(nèi)的隨機(jī)整數(shù):int number1 = rand() % 100;
二、srand()
srand()函數(shù)需要的頭文件仍然是:<stdlib.h>
srand()函數(shù)原型:void srand (usigned int seed);
srand()用來(lái)設(shè)置rand()產(chǎn)生隨機(jī)數(shù)時(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ù)的方法
“模除+加法”的方法
因?yàn)?,?duì)于任意數(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算是一個(gè)公式,記錄一下方便以后查閱。
比如產(chǎn)生10~30的隨機(jī)整數(shù):
srand(time(0));
int a = rand() % (21)+10;
聯(lián)系客服