在實(shí)際編程中,我們經(jīng)常需要生成隨機(jī)數(shù)。在c語(yǔ)言中我們通常使用rand方法生成隨機(jī)數(shù),在調(diào)用rand前需要調(diào)用srand初始化隨機(jī)數(shù)種子。

公司主營(yíng)業(yè)務(wù):網(wǎng)站制作、網(wǎng)站建設(shè)、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來(lái)驚喜。創(chuàng)新互聯(lián)推出大觀免費(fèi)做網(wǎng)站回饋大家。
電腦:華為MateBook14
系統(tǒng):Windows10
軟件:notepad++等編輯器、gcc編譯器1.0
1、使用rand函數(shù)生成隨機(jī)數(shù),rand隨機(jī)生成一個(gè)位于0 ~ RAND_MAX之間的整數(shù)。如下圖中,我們直接使用rand方法生成10個(gè)隨機(jī)數(shù)。
2、程序運(yùn)行后生成了隨機(jī)數(shù),但直接使用rand的問題在于,在下次程序調(diào)用時(shí),生成的隨機(jī)數(shù)與上次一致。所以,rand函數(shù)雖然生成隨機(jī)數(shù),但可以說(shuō)是一個(gè)偽隨機(jī)。因?yàn)槊看握{(diào)用時(shí),生成數(shù)字順序都是固定的。
3、為了在每次調(diào)用時(shí)生成不同的隨機(jī)數(shù),使用srand函數(shù)初始化隨機(jī)數(shù)種子。只要隨機(jī)數(shù)種子變化了,那么生成的隨機(jī)數(shù)就會(huì)改變。通常,srand使用當(dāng)前時(shí)間作為種子。
4、但使用時(shí)間作為隨機(jī)數(shù)種子是否安全呢?我們目前程序執(zhí)行的速度都太快了,一秒鐘對(duì)于計(jì)算機(jī)來(lái)說(shuō)太漫長(zhǎng)了。我們將生成隨機(jī)數(shù)的操作定義為函數(shù),然后調(diào)用函數(shù)兩次,看生成的隨機(jī)數(shù)仍然時(shí)一樣。
5、優(yōu)化函數(shù)也比較簡(jiǎn)單,在使用時(shí)間的基礎(chǔ)上,我們還加上一個(gè)定增序號(hào)。這樣能保證就算同一秒鐘內(nèi)多次調(diào)用,隨機(jī)數(shù)的種子都是不一樣的。
6、通常,我們需要獲取一定范圍內(nèi)的隨機(jī)數(shù)。所以,在生成隨機(jī)數(shù)之后我們使用模運(yùn)算獲取對(duì)應(yīng)范圍內(nèi)的數(shù)據(jù)。如生成0到100內(nèi)的隨機(jī)數(shù)。
rand()函數(shù) 返回值是產(chǎn)生一個(gè)隨機(jī)數(shù),這個(gè)返回值雖然是隨機(jī)數(shù),但是可能會(huì)發(fā)現(xiàn),每回產(chǎn)生的都一樣,比如:
#include iostream
using namespace std;
void main()
{
for(int i=0;i3;i++){
coutrand()endl;
}
}
運(yùn)行程序后發(fā)現(xiàn),產(chǎn)生的隨機(jī)數(shù),雖然每次運(yùn)行程序時(shí)是隨機(jī)數(shù),但是,后來(lái)再運(yùn)行程序,發(fā)現(xiàn)與上幾次結(jié)果一樣。
這是因?yàn)椋S機(jī)數(shù)的起始值都一樣。
為了產(chǎn)生真正的隨機(jī)數(shù),就應(yīng)該設(shè)置隨機(jī)數(shù)的起始值,這個(gè)要利用srand()函數(shù)。
將上面程序改為:
#include iostream
using namespace std;
void main()
{
cout"請(qǐng)輸入隨機(jī)數(shù)的起始值"endl;
int num;
cinnum;
srand(num);
for(int i=0;i3;i++){
coutrand()endl;
}
}
運(yùn)行程序 就會(huì)發(fā)現(xiàn) 輸入的起始值不同,產(chǎn)生的隨機(jī)數(shù)就不同。
當(dāng)然 也可以產(chǎn)生時(shí)間隨機(jī)數(shù),這個(gè)要用到c語(yǔ)言time.h中的程序,這個(gè)可以供你自己思考,自己解決問題,樂趣更多呢~呵呵~
啰嗦這么多 希望對(duì)您有所幫助!
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ù)種子,如果沒有設(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+1。
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ù),通常可以利用time(0)或getpid(0)的返回值作為seed。
使用rand()和srand()產(chǎn)生1-100以內(nèi)的隨機(jī)整數(shù):
srand(time(0));
int number1 = rand() % 100+1。
當(dāng)前名稱:c語(yǔ)言如何使用隨機(jī)數(shù)函數(shù),c語(yǔ)言隨機(jī)產(chǎn)生函數(shù)
網(wǎng)站鏈接:http://chinadenli.net/article36/heodsg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動(dòng)態(tài)網(wǎng)站、外貿(mào)網(wǎng)站建設(shè)、服務(wù)器托管、云服務(wù)器、自適應(yīng)網(wǎng)站、App開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
營(yíng)銷型網(wǎng)站建設(shè)知識(shí)