它的返回值就是求取隨機(jī)的值,所以如果沒(méi)有對(duì)數(shù)有要求,直接這樣定:
目前創(chuàng)新互聯(lián)公司已為上1000家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)絡(luò)空間、網(wǎng)站托管、服務(wù)器租用、企業(yè)網(wǎng)站設(shè)計(jì)、曲松網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。
printf("%d", rand());就能輸出一個(gè)隨機(jī)數(shù).但如果對(duì)數(shù)有要求,如小數(shù)或在一定值以內(nèi):
小數(shù):rand()+rand()/100.0 //100.0后面的.0必須寫,100是說(shuō)明求兩位小數(shù),你可以自己加大.
一定范圍:rand()%10+0 //10是頂和底的差,0是底,就是說(shuō)求10到20之間的數(shù)就是:rand()%10+10
但是調(diào)用它必須先調(diào)用srand()來(lái)生成隨機(jī)種子,如果你沒(méi)調(diào)用它,系統(tǒng)會(huì)自動(dòng)調(diào)用.但是srand是有個(gè)參數(shù)的,種子就是根據(jù)這個(gè)參數(shù)來(lái)定的,所以這個(gè)參數(shù)決定著生成的隨機(jī)數(shù).如果你在代碼里寫死了它:srand(10);那這樣rand生成的隨機(jī)數(shù)就也被定格在了一定量,所以不要這樣用.要這樣寫:
srand(time(NULL));time的返回值是當(dāng)前系統(tǒng)時(shí)間.因?yàn)闀r(shí)間不同,所取的數(shù)值也就不同.這樣隨機(jī)數(shù)就真正的隨機(jī)了.
time在中聲明
rand,srand在中聲明.
rand函數(shù)是根據(jù)一個(gè)數(shù)(我們可以稱它為種子)為基準(zhǔn),以某個(gè)遞推公式推算出來(lái)的一系數(shù),當(dāng)這系列數(shù)很大的時(shí)候,就符合正態(tài)公布,從而相當(dāng)于產(chǎn)生了隨機(jī)數(shù),
但這產(chǎn)生的并不是真意正義上的隨機(jī)數(shù),是一個(gè)偽隨機(jī)數(shù),當(dāng)計(jì)算機(jī)正常開機(jī)后,這個(gè)種子的值是定了的,除非你破壞了系統(tǒng),為了改變這個(gè)種子的值。
種子相同,產(chǎn)生的隨機(jī)序列相同。這樣做的好處是,方便我們產(chǎn)生一組固定的隨機(jī)序列,用來(lái)調(diào)試程序。
C提供了srand()函數(shù),用來(lái)設(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。
一、首先包含必要的頭文件
#includestdio.h
這個(gè)包含用于輸入輸出的函數(shù)。
#includestdlib.h
這個(gè)包含初始化隨機(jī)數(shù)種子、產(chǎn)生隨機(jī)數(shù)的函數(shù)。
#includetime.h
這個(gè)包含與時(shí)間有關(guān)的函數(shù),初始化隨機(jī)數(shù)種子時(shí)可以用到。
二、使用如下公式產(chǎn)生在區(qū)間[min,max]之間的隨機(jī)數(shù)
int r=rand()%(max-min+1)+min;
三、一個(gè)例子,產(chǎn)生10個(gè)[1,100]的隨機(jī)整數(shù)
#include stdio.h
#include stdlib.h
#include time.h
int main()
{
const int min=1,max=100;
int i,r;
//用當(dāng)前時(shí)間初始化隨機(jī)數(shù)種子
srand(time(NULL));
printf("隨機(jī)產(chǎn)生的10個(gè)1-100的整數(shù)是:");
for(i=0;i10;i++)
{
r=rand()%(max-min+1)+min;
printf("%d,",r);
}
return 0;
}
四、運(yùn)行結(jié)果的截圖
截圖1
截圖2
c語(yǔ)言中的rand隨機(jī)數(shù)函數(shù),是按指定順序來(lái)產(chǎn)生的,在生成隨機(jī)數(shù)之前,在stdlib.h頭文件中,會(huì)初始化函數(shù)srand,根據(jù)隨機(jī)種子seed,來(lái)獲取隨機(jī)數(shù),如果seed不變,每次運(yùn)行得到的隨機(jī)數(shù)會(huì)是一樣的,因此,rand函數(shù)也被大家叫做偽隨機(jī)數(shù)。下面就來(lái)介紹下rand函數(shù)的使用
打開代碼編譯器,輸入如下所示的代碼片段
運(yùn)行該代碼片段,得到10個(gè)隨機(jī)數(shù),但是我們發(fā)現(xiàn),不論運(yùn)行幾次,生成的隨機(jī)數(shù)都是這10個(gè),也就是說(shuō),在種子seed不變的情況下,生成的隨機(jī)數(shù)是偽隨機(jī)數(shù)
我們引入頭文件time.h,取時(shí)間戳作為seed的取值來(lái)源,改代碼片段如下,將srand(1)改成srand(time(NULL))
運(yùn)行代碼,得到10個(gè)隨機(jī)數(shù)如下,定義非常量的srand參數(shù),可以避免偽隨機(jī)數(shù)的產(chǎn)生
#include stdio.h
#include stdlib.h
#include time.h
int main()
{
srand((int)time(NULL));
printf("%d\n",rand()%200-100);//是求余不是乘積
return 0;
}
rand函數(shù)功能為獲取一個(gè)偽隨機(jī)數(shù)(偽隨機(jī)數(shù)的概念下面會(huì)有介紹)。
一、函數(shù)名:
rand();
二、聲明:
int rand();
三、所在頭文件:
stdlib.h
四、功能:
返回一個(gè)偽隨機(jī)數(shù)。之所以說(shuō)是偽隨機(jī)數(shù),是因?yàn)樵跊](méi)有其它操作下,每次執(zhí)行同一個(gè)程序,調(diào)用rand得到的隨機(jī)數(shù)序列是固定的(不是真正的“隨機(jī)”)。
五、為了使rand的結(jié)果更“真”一些,也就是令其返回值更具有隨機(jī)性(不確定性),C語(yǔ)言在stdlib.h中還提供了srand函數(shù),通過(guò)該函數(shù)可以設(shè)置一個(gè)隨機(jī)數(shù)種子,一般用當(dāng)前時(shí)間的毫秒數(shù)來(lái)做參數(shù)。通過(guò)time(NULL)可以獲取到當(dāng)前時(shí)間的毫秒值(該函數(shù)位于time.h)中。
六、使用rand的流程可以總結(jié)為:
1 調(diào)用srand(time(NULL))設(shè)置隨機(jī)數(shù)種子。
2 調(diào)用rand函數(shù)獲取一個(gè)或一系列隨機(jī)數(shù)。
需要注意的是,srand只需要在所有rand調(diào)用前,被調(diào)用一次即可,沒(méi)必要調(diào)用多次。
七、以下是隨機(jī)獲取10個(gè)整型值并輸出的例子,輔助理解。
#include?stdio.h
#include?stdlib.h
#include?time.h
int?main()
{
int?i;
srand(time(NULL));//設(shè)置隨機(jī)數(shù)種子。
for(i?=?0;?i??10;?i?++)//運(yùn)行10次。
printf("%d\n",?rand());//每次獲取一個(gè)隨機(jī)數(shù)并輸出。
return?0;
}