c語言中產(chǎn)生隨機數(shù)的相關(guān)函數(shù)主要包括srand和rand函數(shù),兩者配合生成隨機數(shù)據(jù),測試代碼如下,
創(chuàng)新互聯(lián)是一家專注于成都網(wǎng)站建設、網(wǎng)站建設和四川主機托管的網(wǎng)絡公司,有著豐富的建站經(jīng)驗和案例。
#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的隨機數(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)生偽隨機數(shù)序列。rand函數(shù)在產(chǎn)生隨機數(shù)前,需要系統(tǒng)提供的生成偽隨機數(shù)序列的種子,rand根據(jù)這個種子的值產(chǎn)生一系列隨機數(shù)。如果系統(tǒng)提供的種子沒有變化,每次調(diào)用rand函數(shù)生成的偽隨機數(shù)序列都是一樣的。srand(unsigned seed)通過參數(shù)seed改變系統(tǒng)提供的種子值,從而可以使得每次調(diào)用rand函數(shù)生成的偽隨機數(shù)序列不同,從而實現(xiàn)真正意義上的“隨機”。通??梢岳孟到y(tǒng)時間來改變系統(tǒng)的種子值,即srand(time(NULL)),可以為rand函數(shù)提供不同的種子值,進而產(chǎn)生不同的隨機數(shù)序列。
在實際編程中,我們經(jīng)常需要生成隨機數(shù)。在c語言中我們通常使用rand方法生成隨機數(shù),在調(diào)用rand前需要調(diào)用srand初始化隨機數(shù)種子。
電腦:華為MateBook14
系統(tǒng):Windows10
軟件:notepad++等編輯器、gcc編譯器1.0
1、使用rand函數(shù)生成隨機數(shù),rand隨機生成一個位于0 ~ RAND_MAX之間的整數(shù)。如下圖中,我們直接使用rand方法生成10個隨機數(shù)。
2、程序運行后生成了隨機數(shù),但直接使用rand的問題在于,在下次程序調(diào)用時,生成的隨機數(shù)與上次一致。所以,rand函數(shù)雖然生成隨機數(shù),但可以說是一個偽隨機。因為每次調(diào)用時,生成數(shù)字順序都是固定的。
3、為了在每次調(diào)用時生成不同的隨機數(shù),使用srand函數(shù)初始化隨機數(shù)種子。只要隨機數(shù)種子變化了,那么生成的隨機數(shù)就會改變。通常,srand使用當前時間作為種子。
4、但使用時間作為隨機數(shù)種子是否安全呢?我們目前程序執(zhí)行的速度都太快了,一秒鐘對于計算機來說太漫長了。我們將生成隨機數(shù)的操作定義為函數(shù),然后調(diào)用函數(shù)兩次,看生成的隨機數(shù)仍然時一樣。
5、優(yōu)化函數(shù)也比較簡單,在使用時間的基礎(chǔ)上,我們還加上一個定增序號。這樣能保證就算同一秒鐘內(nèi)多次調(diào)用,隨機數(shù)的種子都是不一樣的。
6、通常,我們需要獲取一定范圍內(nèi)的隨機數(shù)。所以,在生成隨機數(shù)之后我們使用模運算獲取對應范圍內(nèi)的數(shù)據(jù)。如生成0到100內(nèi)的隨機數(shù)。
C語言隨機函數(shù)主要用于實現(xiàn)一組隨機數(shù)的生成。
代碼示例如下:
#includestdio.h
#includestdlib.h
int main ()
{
int a;
a=rand()%4;
printf("%d\n",a);
return 0;
}
C預先生成一組隨機數(shù),每次調(diào)用隨機函數(shù)時從指針所指向的位置開始取值,因此使用rand()重復運行程序產(chǎn)生的隨機數(shù)都是相同的,可以通過srand()函數(shù)來改變指針位置。
擴展資料:
C語言隨機函數(shù)指針位置
void srand( unsigned int seed )
改變隨機數(shù)表的指針位置(用seed變量控制)。一般配合time(NULL)使用,因為時間每時每刻都在改變,產(chǎn)生的seed值都不同。
基于毫秒級隨機數(shù)產(chǎn)生方法:
#includewindows.h
種子設為:srand(unsigned int seed);
srand(GetTickCount());
參考資料:百度百科-C語言隨機函數(shù)