函數(shù)名: rand
創(chuàng)新互聯(lián)主要從事成都網(wǎng)站制作、成都網(wǎng)站設(shè)計、外貿(mào)營銷網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)烏拉特前,十年網(wǎng)站建設(shè)經(jīng)驗(yàn),價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):18980820575
功 能: 隨機(jī)數(shù)發(fā)生器
用 法: void rand(void);
程序例:
#include stdlib.h
#include stdio.h
int main(void)
{
int i;
printf("Ten random numbers from 0 to 99\n\n");
for(i=0; i10; i++)
printf("%d\n", rand() % 100);
return 0;
}
這樣產(chǎn)生的隨機(jī)數(shù)為偽隨機(jī)數(shù),如果要產(chǎn)生隨機(jī)數(shù),可以在前面加一個隨機(jī)種子,srand(time(0)); time(0)返回的是系統(tǒng)的時間(從1970.1.1午夜算起)的總秒數(shù),單位:秒
#include stdlib.h
#include stdio.h
#include time.h
int main(void)
{
srand(time(0));
int i;
printf("Ten random numbers from 0 to 99\n\n");
for(i=0; i10; i++)
printf("%d\n", rand() % 100);這樣就產(chǎn)生了0到99的隨機(jī)數(shù)(隨機(jī)數(shù)對100取余的結(jié)果)
return 0;
}
可以自己試試,沒加隨機(jī)種子時候,rand()%100每次產(chǎn)生的數(shù)都是一樣的,而加了srand(time(0))效果就不同了。
通過敲代碼實(shí)驗(yàn),并且參考以下網(wǎng)址
rand函數(shù)功能為獲取一個偽隨機(jī)數(shù)(偽隨機(jī)數(shù)的概念下面會有介紹)。
一、函數(shù)名:
rand();
二、聲明:
int rand();
三、所在頭文件:
stdlib.h
四、功能:
返回一個偽隨機(jī)數(shù)。之所以說是偽隨機(jī)數(shù),是因?yàn)樵跊]有其它操作下,每次執(zhí)行同一個程序,調(diào)用rand得到的隨機(jī)數(shù)序列是固定的(不是真正的“隨機(jī)”)。
五、為了使rand的結(jié)果更“真”一些,也就是令其返回值更具有隨機(jī)性(不確定性),C語言在stdlib.h中還提供了srand函數(shù),通過該函數(shù)可以設(shè)置一個隨機(jī)數(shù)種子,一般用當(dāng)前時間的毫秒數(shù)來做參數(shù)。通過time(NULL)可以獲取到當(dāng)前時間的毫秒值(該函數(shù)位于time.h)中。
六、使用rand的流程可以總結(jié)為:
1 調(diào)用srand(time(NULL))設(shè)置隨機(jī)數(shù)種子。
2 調(diào)用rand函數(shù)獲取一個或一系列隨機(jī)數(shù)。
需要注意的是,srand只需要在所有rand調(diào)用前,被調(diào)用一次即可,沒必要調(diào)用多次。
七、以下是隨機(jī)獲取10個整型值并輸出的例子,輔助理解。
#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());//每次獲取一個隨機(jī)數(shù)并輸出。
return?0;
}
rand()
rand()函數(shù)用來產(chǎn)生隨機(jī)數(shù),但是,rand()的內(nèi)部實(shí)現(xiàn)是用線性同余法實(shí)現(xiàn)的,是偽隨機(jī)數(shù),由于周期較長,因此在一定范圍內(nèi)可以看成是隨機(jī)的。
rand()會返回一個范圍在0到RAND_MAX(至少是32767)之間的偽隨機(jī)數(shù)(整數(shù))。
在調(diào)用rand()函數(shù)之前,可以使用srand()函數(shù)設(shè)置隨機(jī)數(shù)種子,如果沒有設(shè)置隨機(jī)數(shù)種子,rand()函數(shù)在調(diào)用時,自動設(shè)計隨機(jī)數(shù)種子為1。隨機(jī)種子相同,每次產(chǎn)生的隨機(jī)數(shù)也會相同。
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()用來設(shè)置rand()產(chǎn)生隨機(jī)數(shù)時的隨機(jī)數(shù)種子。參數(shù)seed是整數(shù),通??梢岳胻ime(0)或getpid(0)的返回值作為seed。
使用rand()和srand()產(chǎn)生1-100以內(nèi)的隨機(jī)整數(shù):
srand(time(0));
int number1 = rand() % 100+1。
函數(shù)rand()是隨機(jī)數(shù)生成器
有兩個函數(shù)用于產(chǎn)生隨機(jī)數(shù):srand()和rand()。
函數(shù)一:int
rand(void);從srand
(seed)中指定的seed開始,返回一個[0,
RAND_MAX(0x7fff)]間的隨機(jī)整數(shù)。
函數(shù)二:void
srand(unsigned
seed);參數(shù)seed是rand()的種子,用來初始化rand()的起始值。
rand()是C語言中產(chǎn)生隨機(jī)數(shù)的一個函數(shù),但是需要注意的是,產(chǎn)生的是偽隨機(jī)數(shù)。
rand()用法舉例:
產(chǎn)生1到100之間的隨機(jī)數(shù)
#includestdio.h
int
main(){
srand((unsigned)time(NULL));//產(chǎn)生隨機(jī)數(shù)種子
int
rand_num=(rand()%100)+1;//產(chǎn)生1到100直接的隨機(jī)數(shù)
printf("rand_num=%d\n",rand_num);
return
0;
}
代碼截圖:
擴(kuò)展資料:
所謂的“偽隨機(jī)數(shù)”指的并不是假的隨機(jī)數(shù)。其實(shí)絕對的隨機(jī)數(shù)只是一種理想狀態(tài)的隨機(jī)數(shù),計算機(jī)只能生成相對的隨機(jī)數(shù)即偽隨機(jī)數(shù)。
系統(tǒng)在調(diào)用rand()之前都會自動調(diào)用srand(),如果用戶在rand()之前曾調(diào)用過srand()給參數(shù)seed指定了一個值,那么
rand()就會將seed的值作為產(chǎn)生偽隨機(jī)數(shù)的初始值;
而如果用戶在rand()前沒有調(diào)用過srand(),那么系統(tǒng)默認(rèn)將1作為偽隨機(jī)數(shù)的初始
值。如果給了一個定值,那么每次rand()產(chǎn)生的隨機(jī)數(shù)序列都是一樣的。
所以為了避免上述情況的發(fā)生我們通常用srand((unsigned)time(0))或者srand((unsigned)time(NULL))來
產(chǎn)生種子。
如果仍然覺得時間間隔太小,可以在(unsigned)time(0)或者(unsigned)time(NULL)后面乘上某個合適的整數(shù)。
例如,srand((unsigned)time(NULL)*10)。
參考資料:百度百科-rand函數(shù)