隨機(jī)數(shù)的使用,是不少在學(xué)C語(yǔ)言過(guò)程中進(jìn)行一些小功能開(kāi)發(fā)的同學(xué)的一個(gè)技術(shù)問(wèn)題,今天我們?yōu)榇蠹抑v解如何在C語(yǔ)言中使用隨機(jī)數(shù)。
通常情況下,使用最多的方法的就是使用rand函數(shù)隨機(jī)生成偽隨機(jī)數(shù)來(lái)完成隨機(jī)數(shù)的生成工作。注意這里的偽隨機(jī)數(shù)并非是假的! 只不過(guò)是計(jì)算機(jī)按自己的一套理論生成,并不是”完全理想”狀態(tài)下的隨機(jī)數(shù),所以是可以接受的。
函數(shù)原型為:int rand(void); 需要包含stdlib頭文件,它可以生成一個(gè)0 ~RAND_MAX之間的數(shù)字,其中RAND_MAX是一個(gè)宏,VC6下筆者查看為0x7fff,建議大家親自上機(jī)實(shí)驗(yàn)!
這個(gè)時(shí)候你可能會(huì)遇到下面幾個(gè)問(wèn)題:
Q1:為什么每次生成的數(shù)字都一樣?
A1:rand函數(shù)每次生成的數(shù)字與所謂的”種子”有關(guān),使用rand函數(shù)前需要使用srand函數(shù)進(jìn)行種種子(請(qǐng)見(jiàn)后文)。如果沒(méi)有調(diào)用,系統(tǒng)會(huì)默認(rèn)給1,導(dǎo)致每次的隨機(jī)數(shù)都一樣。
Q2:為什么最大是0x7fff?
A2:這可能取決于編譯器環(huán)境,筆者這里是VC6,在rand的函數(shù)中看到定義的最大值為0x7fff,如下圖:
Q3:如果我想生成特定范圍內(nèi)的數(shù)字,該如何寫(xiě)呢?
A3:多多利用%求余運(yùn)算符即可。如:
生成10以內(nèi)的數(shù)字,可以參考rand()%10
生成1~10之間的數(shù)字,可以參考rand()%10+1
特定的,要生成a~b之間的數(shù)字,可以參考rand()%(b-a+1)+a
更多時(shí)候,我們希望每次運(yùn)行生成的數(shù)字都不相同,這個(gè)時(shí)候需要配合srand函數(shù)來(lái)解決這一問(wèn)題。關(guān)于具體原因,大家可以參考rand函數(shù)與srand函數(shù)的實(shí)現(xiàn)細(xì)節(jié)來(lái)加以理解,代碼如下:
那么srand函數(shù)如何使用呢,先看函數(shù)原型:
void srand(unsigned seed); 只需要在rand函數(shù)使用之前,調(diào)用srand函數(shù)傳入一個(gè)種子即可。但事實(shí)上傳入一個(gè)數(shù),往往產(chǎn)生的隨時(shí)仍然固定不變。那么較為聰明的寫(xiě)法目前看來(lái)只有使用系統(tǒng)時(shí)間作為種子最為合適,所以這里srand的參數(shù)往往傳入time(NULL)參數(shù)作為獲取系統(tǒng)當(dāng)前時(shí)間作為種子,來(lái)產(chǎn)生不同的結(jié)果!
并注意類(lèi)型一致,srand((unsigned)time(NULL)); 記得添加time.h的頭文件!
測(cè)試代碼如下:
-
C語(yǔ)言
+關(guān)注
關(guān)注
180文章
7630瀏覽量
140273 -
隨機(jī)數(shù)
+關(guān)注
關(guān)注
0文章
18瀏覽量
12137
原文標(biāo)題:C語(yǔ)言如何使用隨機(jī)數(shù)?
文章出處:【微信號(hào):cyuyanxuexi,微信公眾號(hào):C語(yǔ)言編程學(xué)習(xí)基地】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
請(qǐng)問(wèn)Ti的哪個(gè)庫(kù)可以調(diào)用C語(yǔ)言隨機(jī)數(shù)產(chǎn)生函數(shù)?
單片機(jī)C語(yǔ)言如何產(chǎn)生隨機(jī)數(shù)
產(chǎn)生隨機(jī)數(shù)的方法有哪些
什么是隨機(jī)數(shù)
C語(yǔ)言中偽隨機(jī)數(shù)的產(chǎn)生及性能檢驗(yàn)
C語(yǔ)言random函數(shù)偽隨機(jī)數(shù)產(chǎn)生
C語(yǔ)言教程之循環(huán)顯示隨機(jī)數(shù)問(wèn)題
單片機(jī)產(chǎn)生隨機(jī)數(shù)的兩種方法
DApp的隨機(jī)數(shù)為什么會(huì)被黑客破解
單片機(jī)C語(yǔ)言如何產(chǎn)生隨機(jī)數(shù)
單片機(jī)C語(yǔ)言如何產(chǎn)生隨機(jī)數(shù)

如何在FPGA中實(shí)現(xiàn)隨機(jī)數(shù)發(fā)生器

評(píng)論