c語言中產(chǎn)生隨機(jī)數(shù)的相關(guān)函數(shù)主要包括srand和rand函數(shù),兩者配合生成隨機(jī)數(shù)據(jù),測試代碼如下,
成都創(chuàng)新互聯(lián)公司云計(jì)算的互聯(lián)網(wǎng)服務(wù)提供商,擁有超過13年的服務(wù)器租用、成都服務(wù)器托管、云服務(wù)器、虛擬空間、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗(yàn),已先后獲得國家工業(yè)和信息化部頒發(fā)的互聯(lián)網(wǎng)數(shù)據(jù)中心業(yè)務(wù)許可證。專業(yè)提供云主機(jī)、虛擬空間、主機(jī)域名、VPS主機(jī)、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。
#includestdio.h
#include stdlib.h
#include time.h
void main()
{
int i=0,j=0;
int p[5][5]={0};
srand(time(NULL));
for(i=0;i5;i++)
for(j=0;j5;j++)
p[i][j]=rand()%100+1;//產(chǎn)生1-100的隨機(jī)數(shù)存入數(shù)組p中
printf("二維數(shù)組p為:\n");
for(i=0;i5;i++)
{
for(j=0;j5;j++)
printf("%d\t",p[i][j]);
printf("\n");
}
}
一般srand和rand配合使用產(chǎn)生偽隨機(jī)數(shù)序列。rand函數(shù)在產(chǎn)生隨機(jī)數(shù)前,需要系統(tǒng)提供的生成偽隨機(jī)數(shù)序列的種子,rand根據(jù)這個(gè)種子的值產(chǎn)生一系列隨機(jī)數(shù)。如果系統(tǒng)提供的種子沒有變化,每次調(diào)用rand函數(shù)生成的偽隨機(jī)數(shù)序列都是一樣的。srand(unsigned seed)通過參數(shù)seed改變系統(tǒng)提供的種子值,從而可以使得每次調(diào)用rand函數(shù)生成的偽隨機(jī)數(shù)序列不同,從而實(shí)現(xiàn)真正意義上的“隨機(jī)”。通??梢岳孟到y(tǒng)時(shí)間來改變系統(tǒng)的種子值,即srand(time(NULL)),可以為rand函數(shù)提供不同的種子值,進(jìn)而產(chǎn)生不同的隨機(jī)數(shù)序列。
隨機(jī)函數(shù)就是產(chǎn)生數(shù)的函數(shù),c語言里有rand(),srand()等函數(shù)。
用法
#include
#include
#include
void main( void )
{
int i,k;
srand( (unsigned)time( NULL ) ); //用系統(tǒng)時(shí)間當(dāng)種子,對(duì)隨機(jī)函數(shù)進(jìn)行初始化
for( i = 0; i 10;i++ )
{
k=rand()%100; //產(chǎn)生各個(gè)隨機(jī)數(shù)
printf( " k=%d/n", k );
}
}
詳述
rand() srand() 頭文件為#include
標(biāo)準(zhǔn)C庫中函數(shù)rand()可以生成0~RAND_MAX之間的一個(gè)隨機(jī)數(shù),其中RAND_MAX 是stdlib.h 中定義的一個(gè)整數(shù),它與系統(tǒng)有關(guān)。
rand()函數(shù)沒有輸入?yún)?shù),直接通過表達(dá)式rand()來引用,rand()%n是產(chǎn)生的隨機(jī)數(shù)對(duì)n取余,起到了取0到n-1之間隨機(jī)數(shù)的作用;
例如可以用下面的語句來打印兩個(gè)隨機(jī)數(shù): printf("Random numbers are: %i %i/n",rand(),rand());
因?yàn)閞and()函數(shù)是按指定的順序來產(chǎn)生整數(shù),而未指定運(yùn)行的種子,所以rand()每次使用的都是同一個(gè)種子來產(chǎn)生隨機(jī)數(shù)序列,因此每次執(zhí)行上面的語句都打印相同的兩個(gè)值,所以說C語言的隨機(jī)并不是正真意義上的隨機(jī)。
為了時(shí)程序在每次執(zhí)行時(shí)都能生成一個(gè)新序列的隨機(jī)值,我們通常通過為隨機(jī)數(shù)生成器提供一粒新的隨機(jī)種子。函數(shù) srand()(來自stdlib.h)可以為隨機(jī)數(shù)生成器播散種子。只要種子不同rand()函數(shù)就會(huì)產(chǎn)生不同的隨機(jī)數(shù)序列。srand()稱為隨機(jī)數(shù)生成器的初始化器。
srand( (unsigned)time( NULL ) ); 用系統(tǒng)時(shí)間當(dāng)種子,對(duì)隨機(jī)函數(shù)進(jìn)行初始化,每次的系統(tǒng)時(shí)間不同,所以種子也就不同,產(chǎn)生的隨機(jī)數(shù)序列也就不同。
c語言隨機(jī)數(shù)函數(shù)是 rand()
若要輸出1~10之間的隨機(jī)數(shù),
可用rand()%10+1。
把
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)行起來耗時(shí)連0.000001秒都不到!
也就是說,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)前面可以得不同的種子,這樣才能得到你想要的。