int rand( void );
我們先來(lái)看一下rand函數(shù)的基本信息:
rand函數(shù)根據(jù)種子生成隨機(jī)值,但是每次程序運(yùn)行種子是固定的,如果只使用它實(shí)際上返回的是偽隨機(jī)整數(shù)。
看上圖紅線部分內(nèi)容:rand函數(shù)返回的偽隨機(jī)整數(shù)。在調(diào)用rand之前,要先使用srand函數(shù)為偽隨機(jī)數(shù)發(fā)生器設(shè)定種子。
void srand( unsigned int seed );
我們?cè)賮?lái)看一下srand函數(shù)的基本信息:
我們通過(guò)函數(shù)原型可以看到,srand需要一個(gè)無(wú)符號(hào)整形的一個(gè)種子參數(shù),如果srand每次傳入的種子相同的話,那么rand函數(shù)生成的隨機(jī)值也是相同的,這在某種意義上并不隨機(jī)了。
那么問(wèn)題來(lái)了,要想隨機(jī)值夠隨機(jī)的話,我們還需要一個(gè)隨機(jī)種子~
通常我們使用時(shí)間作為隨機(jī)數(shù)生成的種子,因?yàn)槊看纬绦蜻\(yùn)行時(shí)間不相同,所以生成的隨機(jī)數(shù)也肯定不相同。
time_t time( time_t *timer );
我們?cè)賮?lái)看一下time函數(shù)的基本信息:
我們只需要給time函數(shù)傳空指針NULL,他會(huì)給我們返回當(dāng)前時(shí)間的時(shí)間戳。這樣的話就可以實(shí)現(xiàn)時(shí)間種子生成隨機(jī)數(shù)。
演示代碼:
#include#include#includeint main()
{srand((unsigned int)time(NULL));
int ret = rand();
printf("%d\n", ret);
return 0;
}
四、生成范圍隨機(jī)數(shù)公式:很多時(shí)候我們需要生成一個(gè)帶范圍的隨機(jī)值:例如1~100。
其實(shí)這個(gè)很簡(jiǎn)單:
srand((unsigned int)time(NULL));
int ret1 = rand() % 10 + 1;//生成1~10的隨機(jī)數(shù)
int ret2 = rand() % 100 + 1;//生成1~100的隨機(jī)數(shù)
int ret3 = rand() % 34 + 66;//生成66~99的隨機(jī)數(shù)
int ret4 = rand() % (n - m + 1) + m;//生成m~n的隨機(jī)數(shù)
五、實(shí)戰(zhàn)練習(xí):實(shí)戰(zhàn)練習(xí)運(yùn)用一下生成隨機(jī)數(shù):
點(diǎn)看這篇:C語(yǔ)言猜數(shù)字游戲
以上就是今天要講C語(yǔ)言生成隨機(jī)數(shù)的內(nèi)容,包含rand、srand和time函數(shù)的使用,希望對(duì)剛剛閱讀本篇博客的你有所幫助。
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧