C語(yǔ)言隨機(jī)函數(shù)主要用于實(shí)現(xiàn)一組隨機(jī)數(shù)的生成。
成都創(chuàng)新互聯(lián)公司是一家專(zhuān)注于做網(wǎng)站、成都網(wǎng)站制作與策劃設(shè)計(jì),獲嘉網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)公司做網(wǎng)站,專(zhuān)注于網(wǎng)站建設(shè)十載,網(wǎng)設(shè)計(jì)領(lǐng)域的專(zhuān)業(yè)建站公司;建站業(yè)務(wù)涵蓋:獲嘉等地區(qū)。獲嘉做網(wǎng)站價(jià)格咨詢(xún):13518219792
代碼示例如下:
#includestdio.h
#includestdlib.h
int main ()
{
int a;
a=rand()%4;
printf("%d\n",a);
return 0;
}
C預(yù)先生成一組隨機(jī)數(shù),每次調(diào)用隨機(jī)函數(shù)時(shí)從指針?biāo)赶虻奈恢瞄_(kāi)始取值,因此使用rand()重復(fù)運(yùn)行程序產(chǎn)生的隨機(jī)數(shù)都是相同的,可以通過(guò)srand()函數(shù)來(lái)改變指針位置。
擴(kuò)展資料:
C語(yǔ)言隨機(jī)函數(shù)指針位置
void srand( unsigned int seed )
改變隨機(jī)數(shù)表的指針位置(用seed變量控制)。一般配合time(NULL)使用,因?yàn)闀r(shí)間每時(shí)每刻都在改變,產(chǎn)生的seed值都不同。
基于毫秒級(jí)隨機(jī)數(shù)產(chǎn)生方法:
#includewindows.h
種子設(shè)為:srand(unsigned int seed);
srand(GetTickCount());
參考資料:百度百科-C語(yǔ)言隨機(jī)函數(shù)
首先一樓代碼是可以的,只是num
=
rand()%10的10后漏了個(gè)0;
詳細(xì)回答你的疑惑:
1、你要用的隨機(jī)函數(shù)rand是包含在庫(kù)文件stdib.h中,如果不引用#include當(dāng)然出錯(cuò)!:
error
C2065:
'rand'
:
undeclared
identifier
2、rand是個(gè)偽隨機(jī)函數(shù),如果不用srand每一次運(yùn)行程序產(chǎn)生的隨機(jī)數(shù)一樣的,
因此使用一個(gè)時(shí)間種子函數(shù)srand,它的參數(shù)是電腦的系統(tǒng)時(shí)間,該函數(shù)包含在庫(kù)文件time.h中,這樣由于每次運(yùn)行程序的時(shí)間不同,種子不同,生成的隨機(jī)數(shù)也不同,更接近真正的隨機(jī)數(shù)。
希望能幫到你!
c語(yǔ)言中 srand(time(NULL)); 的意思是:使用當(dāng)前時(shí)間進(jìn)行隨機(jī)數(shù)發(fā)生器的初始化。
time_t time(time_t *t); 是C標(biāo)準(zhǔn)庫(kù)函數(shù),如果t是空指針(NULL),直接返回當(dāng)前時(shí)間。如果t不是空指針,返回當(dāng)前時(shí)間的同時(shí),將返回值賦予t指向的內(nèi)存空間。time() 是指返回自 Unix 紀(jì)元起的當(dāng)前時(shí)間的秒數(shù)的函數(shù),主要用來(lái)獲取當(dāng)前的系統(tǒng)時(shí)間,返回的結(jié)果是一個(gè)time_t類(lèi)型。
srand函數(shù)是隨機(jī)數(shù)發(fā)生器的初始化函數(shù)。原型:void srand(unsigned int seed); srand和rand()配合使用產(chǎn)生偽隨機(jī)數(shù)序列。
擴(kuò)展資料:
srand函數(shù)的相關(guān)信息:
1、語(yǔ)法:void srand (unsigned seed);
2、參數(shù)說(shuō)明:unsigned seed:隨機(jī)數(shù)產(chǎn)生器的初始值(種子值)。
3、功能說(shuō)明:srand設(shè)置產(chǎn)生一系列偽隨機(jī)數(shù)發(fā)生器的起始點(diǎn),要想把發(fā)生器重新初始化,可用1作seed值。任何共它的值都把發(fā)生器匿成一個(gè)隨機(jī)的起始點(diǎn)。rand檢索生成的偽隨機(jī)數(shù)。在任何調(diào)用srand之前調(diào)用rand與以1作為seed調(diào)用srand產(chǎn)生相同的序列。
此函數(shù)可以設(shè)定rand函數(shù)所用的隨機(jī)數(shù)產(chǎn)生演算法的種子值。任何大于一的種子值都會(huì)將rand隨機(jī)數(shù)所產(chǎn)生的虛擬隨機(jī)數(shù)序列重新設(shè)定一個(gè)起始點(diǎn)。
4、包含文件:stdlib. h
5、返回值:無(wú)
參考資料來(lái)源:百度百科-time()
參考資料來(lái)源:百度百科-srand
把
srand(
time(0)
);
放在循環(huán)外每次產(chǎn)生隨機(jī)數(shù)的種子也是一樣的啊,為什么產(chǎn)生的隨機(jī)數(shù)就不一樣了?
因?yàn)殡S機(jī)函數(shù)只需要一個(gè)種子就能產(chǎn)生一系列的隨機(jī)數(shù),并不是每個(gè)隨機(jī)數(shù)都需要一個(gè)種子。
你把
srand(time(0))
放到循環(huán)前面就可以了。
原因:
time(0)返回的是系統(tǒng)的時(shí)間(從1970.1.1午夜算起),單位:秒,而那個(gè)循環(huán)運(yùn)行起來(lái)耗時(shí)連0.000001秒都不到!
也就是說(shuō),srand(time(0))
連著4次的種子是一樣的,種子一樣,生產(chǎn)的隨機(jī)數(shù)當(dāng)然是一樣了。
如果你在把srand()放循環(huán)里面,在中間加個(gè)sleep函數(shù),消耗一點(diǎn)時(shí)間(間隔大于1秒),那么生成的rand
就不一樣了.但是這樣做很不好,連著兩次用srand生成的種子,間隔一樣,生產(chǎn)的隨機(jī)數(shù)間隔有會(huì)有規(guī)律性。
另:因?yàn)閮纱芜\(yùn)行同一程序的時(shí)間肯定是不一樣的,所以把srand放在循環(huán)前面可以得不同的種子,這樣才能得到你想要的。