rand函數(shù)是根據(jù)一個數(shù)(我們可以稱它為種子)為基準(zhǔn),以某個遞推公式推算出來的一系數(shù),當(dāng)這系列數(shù)很大的時候,就符合正態(tài)公布,從而相當(dāng)于產(chǎn)生了隨機(jī)數(shù),

泗陽ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18982081108(備注:SSL證書合作)期待與您的合作!
但這產(chǎn)生的并不是真意正義上的隨機(jī)數(shù),是一個偽隨機(jī)數(shù),當(dāng)計(jì)算機(jī)正常開機(jī)后,這個種子的值是定了的,除非你破壞了系統(tǒng),為了改變這個種子的值。
種子相同,產(chǎn)生的隨機(jī)序列相同。這樣做的好處是,方便我們產(chǎn)生一組固定的隨機(jī)序列,用來調(diào)試程序。
C提供了srand()函數(shù),用來設(shè)置種子,它的原形是void srand( int a)。
在調(diào)用rand函數(shù)產(chǎn)生隨機(jī)數(shù)前,應(yīng)該先利用srand()設(shè)好隨機(jī)數(shù)種子,如果未設(shè)隨機(jī)數(shù)種子,默認(rèn)種子為1。
在C語言中取隨機(jī)數(shù)所需要的函數(shù)是:
int rand(void);
void srand (unsigned int n);
rand()函數(shù)和srand()函數(shù)被聲明在頭文件stdlib.h中,所以要使用這兩個函數(shù)必須包含該頭文件:
#include stdlib.h
rand()函數(shù)返回0到RAND_MAX之間的偽隨機(jī)數(shù)(pseudorandom)。RAND_MAX常量被定義在stdlib.h頭文件中。其值等于32767,或者更大。
srand()函數(shù)使用自變量n作為種子,用來初始化隨機(jī)數(shù)產(chǎn)生器。只要把相同的種子傳入srand(),然后調(diào)用rand()時,就會產(chǎn)生相同的隨機(jī)數(shù)序列。因此,我們可以把時間作為srand()函數(shù)的種子,就可以避免重復(fù)的發(fā)生。如果,調(diào)用rand()之前沒有先調(diào)用srand(),就和事先調(diào)用srand(1)所產(chǎn)生的結(jié)果一樣。
使用函數(shù) rand()
舉例:
int rrr = rand() %100;
則產(chǎn)生[0,99]的隨機(jī)數(shù)
使用時請?jiān)黾影募?/p>
#include stdlib.h
C語言隨機(jī)函數(shù)主要用于實(shí)現(xiàn)一組隨機(jī)數(shù)的生成。
代碼示例如下:
#includestdio.h
#includestdlib.h
int main ()
{
int a;
a=rand()%4;
printf("%d\n",a);
return 0;
}
C預(yù)先生成一組隨機(jī)數(shù),每次調(diào)用隨機(jī)函數(shù)時從指針?biāo)赶虻奈恢瞄_始取值,因此使用rand()重復(fù)運(yùn)行程序產(chǎn)生的隨機(jī)數(shù)都是相同的,可以通過srand()函數(shù)來改變指針位置。
擴(kuò)展資料:
C語言隨機(jī)函數(shù)指針位置
void srand( unsigned int seed )
改變隨機(jī)數(shù)表的指針位置(用seed變量控制)。一般配合time(NULL)使用,因?yàn)闀r間每時每刻都在改變,產(chǎn)生的seed值都不同。
基于毫秒級隨機(jī)數(shù)產(chǎn)生方法:
#includewindows.h
種子設(shè)為:srand(unsigned int seed);
srand(GetTickCount());
參考資料:百度百科-C語言隨機(jī)函數(shù)
1、只能產(chǎn)生偽隨機(jī)數(shù),最多也只是提高模擬的程度而已,rand函數(shù)內(nèi)部管理著一個計(jì)數(shù)單位,程序每調(diào)用一次,它就根據(jù)這個計(jì)數(shù)單位和對應(yīng)的srand產(chǎn)生種子的值,經(jīng)過一系列的運(yùn)算,得到隨機(jī)值,其實(shí)就相當(dāng)于你傳了2個參數(shù)給rand(),比如是x是計(jì)數(shù)器的值,y是srand的值,那么:
rand() = x*2 + y // 舉個簡單的例子,實(shí)際可能比這個關(guān)系式要復(fù)雜
對于給定的參數(shù)和關(guān)系式,x由rand函數(shù)內(nèi)部管理,而y也就是srand的默認(rèn)值是1,也不變,所以每調(diào)用一次只有x產(chǎn)生變化,而且是固定的變化,得到的隨機(jī)數(shù)也就是固定的了。
2、srand的作用就是設(shè)置y,根據(jù)以上的解釋,它的作用很已經(jīng)很明顯了吧。
其實(shí)就算設(shè)置srand,得到的還是偽隨機(jī)數(shù),只設(shè)定一個固定值的話,rand產(chǎn)生的偽隨機(jī)數(shù)的范圍就是0~RAND_MAX,而如果調(diào)用time()函數(shù)來返回一個隨時都會變化的值給rand做種子的話,也只相當(dāng)于擴(kuò)大了rand對偽隨機(jī)數(shù)列的選擇范圍,偽隨機(jī)數(shù)列的數(shù)量由1個增加至sizeof(time_t)個,對于每個由time()產(chǎn)生的種子,都有一個偽隨機(jī)數(shù)列與之對應(yīng),而x又不斷變化。舉個形象的例子:
rand函數(shù)就像是從流水線上選選蘋果一樣(只以顏色區(qū)分),設(shè)置srand可以變換這條流水線,比如原來為編號1的流水線,srand(2)之后,就變?yōu)榫幪?的流水線了,但選蘋果的位置是不變的(x不變),也就是rand第一次選擇了1號流水線上的第3個黃色蘋果,srand之后,rand就接下來去選2號流水線上的第4個蘋果了,而如果調(diào)用srand(time(0))的,相當(dāng)于每次rand選蘋果之前都變換流水線,也可以理解為rand面前共有sizeof(time_t)條流水線,如果rand函數(shù)的調(diào)用速度和time函數(shù)相當(dāng)?shù)脑挘敲磖and就依此從各條流水線上挑選對應(yīng)位置x的蘋果。其實(shí)所有的流水線和每條流水線上的蘋果的擺放次序都是不變的。
計(jì)算機(jī)不會產(chǎn)生絕對隨機(jī)的隨機(jī)數(shù),計(jì)算機(jī)只能產(chǎn)生“偽隨機(jī)數(shù)”。其實(shí)絕對隨機(jī)的隨機(jī)數(shù)只是一種理想的隨機(jī)數(shù),即使計(jì)算機(jī)怎樣發(fā)展,它也不會產(chǎn)生一串絕對隨機(jī)的隨機(jī)數(shù)。計(jì)算機(jī)只能生成相對的隨機(jī)數(shù),即偽隨機(jī)數(shù)。 偽隨機(jī)數(shù)并不是假隨機(jī)數(shù),這里的“偽”是有規(guī)律的意思,就是計(jì)算機(jī)產(chǎn)生的偽隨機(jī)數(shù)既是隨機(jī)的又是有規(guī)律的。怎樣理解呢?產(chǎn)生的偽隨機(jī)數(shù)有時遵守一定的規(guī)律,有時不遵守任何規(guī)律;偽隨機(jī)數(shù)有一部分遵守一定的規(guī)律;另一部分不遵守任何規(guī)律。比如“世上沒有兩片形狀完全相同的樹葉”,這正是點(diǎn)到了事物的特性,即隨機(jī)性,但是每種樹的葉子都有近似的形狀,這正是事物的共性,即規(guī)律性。從這個角度講,你大概就會接受這樣的事實(shí)了:計(jì)算機(jī)只能產(chǎn)生偽隨機(jī)數(shù)而不能產(chǎn)生絕對隨機(jī)的隨機(jī)數(shù)。
隨機(jī)函數(shù)有如下兩種:
rand()函數(shù)返回0到RAND_MAX之間的偽隨機(jī)數(shù)(pseudorandom)。RAND_MAX常量被定義在stdlib.h頭文件中。其值等于32767,或者更大。
srand()函數(shù)使用自變量n作為種子,用來初始化隨機(jī)數(shù)產(chǎn)生器。只要把相同的種子傳入srand(),然后調(diào)用rand()時,就會產(chǎn)生相同的隨機(jī)數(shù)序列。因此,我們可以把時間作為srand()函數(shù)的種子,就可以避免重復(fù)的發(fā)生。如果,調(diào)用rand()之前沒有先調(diào)用srand(),就和事先調(diào)用srand(1)所產(chǎn)生的結(jié)果一樣。
網(wǎng)站名稱:c語言中隨機(jī)數(shù)函數(shù)原理,c語言中隨機(jī)數(shù)函數(shù)原理是什么
網(wǎng)站地址:http://chinadenli.net/article47/dsiojhj.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google、標(biāo)簽優(yōu)化、網(wǎng)站制作、外貿(mào)建站、全網(wǎng)營銷推廣、響應(yīng)式網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)