生成c語言隨機(jī)數(shù)的函數(shù),c++ 隨機(jī)數(shù)生成函數(shù)
c語言怎么生成隨機(jī)數(shù)?
你好!
創(chuàng)新互聯(lián)建站專注于瑞麗企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè)公司,商城網(wǎng)站制作。瑞麗網(wǎng)站建設(shè)公司,為瑞麗等地區(qū)提供建站服務(wù)。全流程按需策劃,專業(yè)設(shè)計,全程項目跟蹤,創(chuàng)新互聯(lián)建站專業(yè)和態(tài)度為您提供的服務(wù)
完整的代碼,紅圈處就是從上面100個數(shù)字中抽取到的數(shù)字:
#include?stdio.h
#includestdlib.h??????????????????//生成隨機(jī)數(shù)用?
#includetime.h????????????????????//利用時間生成種子?
#includemath.h????????????????????
int?main()
{
int?i;
??int?a[100];
srand(?time(NULL)?);?????????//生成種子?
for(i=0;i100;i++)
{
a[i]=rand()%1000+1000;??????//生成一個小于1000的隨機(jī)數(shù)
???//然后加1000,變成?1000?-?2000之間的數(shù)?
printf("%d??",a[i]);???????//打印?
}
i=rand()%100;??????????????//隨機(jī)抽取其中的一個數(shù)?
printf("\n抽取到的是:%d\n",a[i]);//打印?
return?0;?
}
c語言隨機(jī)數(shù)怎么生成
在實(shí)際編程中,我們經(jīng)常需要生成隨機(jī)數(shù)。在c語言中我們通常使用rand方法生成隨機(jī)數(shù),在調(diào)用rand前需要調(diào)用srand初始化隨機(jī)數(shù)種子。
電腦:華為MateBook14
系統(tǒng):Windows10
軟件:notepad++等編輯器、gcc編譯器1.0
1、使用rand函數(shù)生成隨機(jī)數(shù),rand隨機(jī)生成一個位于0 ~ RAND_MAX之間的整數(shù)。如下圖中,我們直接使用rand方法生成10個隨機(jī)數(shù)。
2、程序運(yùn)行后生成了隨機(jī)數(shù),但直接使用rand的問題在于,在下次程序調(diào)用時,生成的隨機(jī)數(shù)與上次一致。所以,rand函數(shù)雖然生成隨機(jī)數(shù),但可以說是一個偽隨機(jī)。因為每次調(diào)用時,生成數(shù)字順序都是固定的。
3、為了在每次調(diào)用時生成不同的隨機(jī)數(shù),使用srand函數(shù)初始化隨機(jī)數(shù)種子。只要隨機(jī)數(shù)種子變化了,那么生成的隨機(jī)數(shù)就會改變。通常,srand使用當(dāng)前時間作為種子。
4、但使用時間作為隨機(jī)數(shù)種子是否安全呢?我們目前程序執(zhí)行的速度都太快了,一秒鐘對于計算機(jī)來說太漫長了。我們將生成隨機(jī)數(shù)的操作定義為函數(shù),然后調(diào)用函數(shù)兩次,看生成的隨機(jī)數(shù)仍然時一樣。
5、優(yōu)化函數(shù)也比較簡單,在使用時間的基礎(chǔ)上,我們還加上一個定增序號。這樣能保證就算同一秒鐘內(nèi)多次調(diào)用,隨機(jī)數(shù)的種子都是不一樣的。
6、通常,我們需要獲取一定范圍內(nèi)的隨機(jī)數(shù)。所以,在生成隨機(jī)數(shù)之后我們使用模運(yùn)算獲取對應(yīng)范圍內(nèi)的數(shù)據(jù)。如生成0到100內(nèi)的隨機(jī)數(shù)。
C語言中產(chǎn)生隨機(jī)數(shù)的函數(shù)是什么?
c語言中產(chǎn)生隨機(jī)數(shù)的相關(guān)函數(shù)主要包括srand和rand函數(shù),兩者配合生成隨機(jī)數(shù)據(jù),測試代碼如下,
#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ù)這個種子的值產(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ī)”。通常可以利用系統(tǒng)時間來改變系統(tǒng)的種子值,即srand(time(NULL)),可以為rand函數(shù)提供不同的種子值,進(jìn)而產(chǎn)生不同的隨機(jī)數(shù)序列。
網(wǎng)頁名稱:生成c語言隨機(jī)數(shù)的函數(shù),c++ 隨機(jī)數(shù)生成函數(shù)
網(wǎng)頁鏈接:http://www.xueling.net.cn/article/hdhjhg.html