srand((int)time(NULL));設(shè)定隨機(jī)數(shù)種子
創(chuàng)新互聯(lián)公司-專(zhuān)業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比開(kāi)陽(yáng)網(wǎng)站開(kāi)發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式開(kāi)陽(yáng)網(wǎng)站制作公司更省心,省錢(qián),快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋開(kāi)陽(yáng)地區(qū)。費(fèi)用合理售后完善,十年實(shí)體公司更值得信賴。
rand()%100;產(chǎn)生0-99的隨機(jī)數(shù)。
高級(jí)點(diǎn)的,假如要產(chǎn)生16-59之間的數(shù),你可以這樣寫(xiě):rand()%44+16(這里44由59-16+1得到)。其他情況如法炮制!
C語(yǔ)言中用rand()函數(shù)產(chǎn)生20-90的隨機(jī)整數(shù)
20-90共有71個(gè)數(shù)字,所以是rand()%71+20 ;
用rand()生成-20-20的隨機(jī)數(shù)
-20-20共有41個(gè)數(shù)字,所以是rand()%41-20;
需要注意的是,在運(yùn)行以上代碼之前最好設(shè)定一下:
srand(time(NULL));//用系統(tǒng)當(dāng)前時(shí)間設(shè)置rand()隨機(jī)序列種子,保證每次運(yùn)行隨機(jī)序列不一樣
編譯環(huán)境為:vs2013
產(chǎn)生1到3的整型隨機(jī)數(shù)的代碼如下:
#includestdio.h
#includetime.h
#includestdlib.h
#define max 3 ? //這個(gè)函數(shù)的意義為:隨機(jī)生成最大的數(shù)為3
#define min 1 ?? //這個(gè)函數(shù)的意義為:隨機(jī)生成最小的數(shù)為1
int main()
{
int num;
srand(time(0));
num = rand() % (max - min) + min; ?// 這里的意義,“%”為模運(yùn)算
printf("隨機(jī)數(shù)為:%d\n", num);
system("pause"); ?//這個(gè)代碼可以讓彈出的黑框不會(huì)一下就消失
return 0;
}
擴(kuò)展資料:
根據(jù)密碼學(xué)原理,隨機(jī)數(shù)的隨機(jī)性檢驗(yàn)可以分為三個(gè)標(biāo)準(zhǔn):
條件一、統(tǒng)計(jì)學(xué)偽隨機(jī)性。統(tǒng)計(jì)學(xué)偽隨機(jī)性指的是在給定的隨機(jī)比特流樣本中,1的數(shù)量大致等于0的數(shù)量,同理,“10”“01”“00”“11”四者數(shù)量大致相等。類(lèi)似的標(biāo)準(zhǔn)被稱為統(tǒng)計(jì)學(xué)隨機(jī)性。滿足這類(lèi)要求的數(shù)字在人類(lèi)“一眼看上去”是隨機(jī)的。
條件二、密碼學(xué)安全偽隨機(jī)性。其定義為,給定隨機(jī)樣本的一部分和隨機(jī)算法,不能有效的演算出隨機(jī)樣本的剩余部分。
條件三、真隨機(jī)性。其定義為隨機(jī)樣本不可重現(xiàn)。實(shí)際上只要給定邊界條件,真隨機(jī)數(shù)并不存在,可是如果產(chǎn)生一個(gè)真隨機(jī)數(shù)樣本的邊界條件十分復(fù)雜且難以捕捉(比如計(jì)算機(jī)當(dāng)?shù)氐谋镜纵椛洳▌?dòng)值),可以認(rèn)為用這個(gè)方法演算出來(lái)了真隨機(jī)數(shù)。
隨機(jī)數(shù)分為三類(lèi):
①偽隨機(jī)數(shù):滿足第一個(gè)條件的隨機(jī)數(shù)。
②密碼學(xué)安全的偽隨機(jī)數(shù):同時(shí)滿足前兩個(gè)條件的隨機(jī)數(shù)??梢酝ㄟ^(guò)密碼學(xué)安全偽隨機(jī)數(shù)生成器
計(jì)算得出。
③真隨機(jī)數(shù):同時(shí)滿足三個(gè)條件的隨機(jī)數(shù)。
srand((int)time(NULL));設(shè)定隨機(jī)數(shù)種子
例子如下:
直接編譯,程序執(zhí)行結(jié)果如下圖所示:
擴(kuò)展資料:
隨機(jī)數(shù)是專(zhuān)門(mén)的隨機(jī)試驗(yàn)的結(jié)果。在統(tǒng)計(jì)學(xué)的不同技術(shù)中需要使用隨機(jī)數(shù),比如在從統(tǒng)計(jì)總體中抽取有代表性的樣本的時(shí)候,或者在將實(shí)驗(yàn)動(dòng)物分配到不同的試驗(yàn)組的過(guò)程中,或者在進(jìn)行蒙特卡羅模擬法計(jì)算的時(shí)候等等。
產(chǎn)生隨機(jī)數(shù)有多種不同的方法。這些方法被稱為隨機(jī)數(shù)發(fā)生器。隨機(jī)數(shù)最重要的特性是:它所產(chǎn)生的后面的那個(gè)數(shù)與前面的那個(gè)數(shù)毫無(wú)關(guān)系。
#include stdlib.h
#include stdio.h
#include time.h
srand()((int)time(NULL));設(shè)定隨機(jī)數(shù)種子
rand()()%100;產(chǎn)生0-99的隨機(jī)數(shù)。高級(jí)點(diǎn)的,假如要產(chǎn)生16-59之間的數(shù),你可以這樣寫(xiě):rand()()%44+16(這里44由59-16+1得到)。其他情況如法炮制!
各種編程語(yǔ)言返回的隨機(jī)數(shù)(確切地說(shuō)是偽隨機(jī)數(shù))實(shí)際上都是根據(jù)遞推公式計(jì)算的一組數(shù)值,當(dāng)序列足夠長(zhǎng),這組數(shù)值近似滿足均勻分布。如果計(jì)算偽隨機(jī)序列的初始數(shù)值(稱為種子)相同,則計(jì)算出來(lái)的偽隨機(jī)序列就是完全相同的。這個(gè)特性被有的軟件利用于加密和解密。加密時(shí),可以用某個(gè)種子數(shù)生成一個(gè)偽隨機(jī)序列并對(duì)數(shù)據(jù)進(jìn)行處理;解密時(shí),再利用種子數(shù)生成一個(gè)偽隨機(jī)序列并對(duì)加密數(shù)據(jù)進(jìn)行還原。這樣,對(duì)于不知道種子數(shù)的人要想解密就需要多費(fèi)些事了。當(dāng)然,這種完全相同的序列對(duì)于你來(lái)說(shuō)是非常糟糕的。要解決這個(gè)問(wèn)題,需要在每次產(chǎn)生隨機(jī)序列前,先指定不同的種子,這樣計(jì)算出來(lái)的隨機(jī)序列就不會(huì)完全相同了。你可以在調(diào)用rand()函數(shù)之前調(diào)用srand( (unsigned)time( NULL ) ),這樣以time函數(shù)值(即當(dāng)前時(shí)間)作為種子數(shù),因?yàn)閮纱握{(diào)用rand函數(shù)的時(shí)間通常是不同的,這樣就可以保證隨機(jī)性了。你也可以使用srand函數(shù)來(lái)人為指定種子數(shù)。
參考資料:
#include
stdlib.h
#include
stdio.h
#include
time.h
void
main()
{
int
i,count[100];
for(i=0;i100;i++)
{count[i]=random(100);//設(shè)定
取值范圍
,這表明
隨機(jī)數(shù)
是0-100之間取
printf("%d\n",count[i]);
}
}