1. 基本函數(shù)
成都創(chuàng)新互聯(lián)公司主要從事網(wǎng)站設計制作、成都網(wǎng)站建設、網(wǎng)頁設計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務。立足成都服務嘉善,十載網(wǎng)站建設經(jīng)驗,價格優(yōu)惠、服務專業(yè),歡迎來電咨詢建站服務:13518219792
在C語言中取隨機數(shù)所需要的函數(shù)是:
int rand(void); void srand (unsigned int n);
rand()函數(shù)和srand()函數(shù)被聲明在頭文件stdlib.h中,所以要使用這兩個函數(shù)必須包含該頭文件:
#include stdlib.h
2. 使用方法
rand()函數(shù)返回0到RAND_MAX之間的偽隨機數(shù)(pseudorandom)。RAND_MAX常量被定義在stdlib.h頭文件中。其值等于32767,或者更大。
srand()函數(shù)使用自變量n作為種子,用來初始化隨機數(shù)產(chǎn)生器。只要把相同的種子傳入srand(),然后調(diào)用rand()時,就會產(chǎn)生相同的隨機數(shù)序列。因此,我們可以把時間作為srand()函數(shù)的種子,就可以避免重復的發(fā)生。如果,調(diào)用rand()之前沒有先調(diào)用srand(),就和事先調(diào)用srand(1)所產(chǎn)生的結(jié)果一樣。
舉個例子,假設我們要取得0~10之間的隨機整數(shù)(不含10本身):
/* 例1:不指定種子的值 */
for (int i=0; i10; i++) { printf("%d ", rand()%10); }
每次運行都將輸出:1 7 4 0 9 4 8 8 2 4
/* 例2:指定種子的值為1 */
srand(1); for (int i=0; i10; i++) { printf("%d ", rand()%10); }
每次運行都將輸出:1 7 4 0 9 4 8 8 2 4
例2的輸出結(jié)果與例1是完全一樣的。
/* 例3:指定種子的值為8 */ srand(8); for (int i=0; i10; i++) { printf("%d ", rand()%10); }
每次運行都將輸出:4 0 1 3 5 3 7 7 1 5
該程序取得的隨機值也是在[0,10)之間,與srand(1)所取得的值不同,但是每次運行程序的結(jié)果都相同。
/* 例4:指定種子值為現(xiàn)在的時間 */ srand((unsigned)time(NULL)); for (int i=0; i10; i++) { printf("%d ", rand()%10); }
該程序每次運行結(jié)果都不一樣,因為每次啟動程序的時間都不同。另外需要注意的是,使用time()函數(shù)前必須包含頭文件time.h。
3. 注意事項
求一定范圍內(nèi)的隨機數(shù)。
如要取[0,10)之間的隨機整數(shù),需將rand()的返回值與10求模。
randnumber = rand() % 10;
那么,如果取的值不是從0開始呢?你只需要記住一個通用的公式。
要取[a,b)之間的隨機整數(shù)(包括a,但不包括b),使用:
(rand() % (b - a)) + a
偽隨機浮點數(shù)。
要取得0~1之間的浮點數(shù),可以用:
rand() / (double)(RAND_MAX)
如果想取更大范圍的隨機浮點數(shù),比如0~100,可以采用如下方法:
rand() /((double)(RAND_MAX)/100) 其他情況,以此類推,這里不作詳細說明。
一、首先包含必要的頭文件
#includestdio.h
這個包含用于輸入輸出的函數(shù)。
#includestdlib.h
這個包含初始化隨機數(shù)種子、產(chǎn)生隨機數(shù)的函數(shù)。
#includetime.h
這個包含與時間有關(guān)的函數(shù),初始化隨機數(shù)種子時可以用到。
二、使用如下公式產(chǎn)生在區(qū)間[min,max]之間的隨機數(shù)
int r=rand()%(max-min+1)+min;
三、一個例子,產(chǎn)生10個[1,100]的隨機整數(shù)
#include stdio.h
#include stdlib.h
#include time.h
int main()
{
const int min=1,max=100;
int i,r;
//用當前時間初始化隨機數(shù)種子
srand(time(NULL));
printf("隨機產(chǎn)生的10個1-100的整數(shù)是:");
for(i=0;i10;i++)
{
r=rand()%(max-min+1)+min;
printf("%d,",r);
}
return 0;
}
四、運行結(jié)果的截圖
截圖1
截圖2
用rand函數(shù)可以產(chǎn)生小于32767的隨機數(shù),如果需要的隨機數(shù)范圍超過了32767,可以用rand()*rand()來產(chǎn)生,舉例如下:
產(chǎn)生0~32767范圍內(nèi)的隨機數(shù):int num = rand();
產(chǎn)生0-20范圍內(nèi)的隨機數(shù):int num = rand()%20;
產(chǎn)生0~10000000范圍內(nèi)的隨機數(shù):int num = rand()*rand()%10000000;
注:需要包含頭文件stdlib.h
c語言中產(chǎn)生隨機數(shù)的相關(guān)函數(shù)主要包括srand和rand函數(shù),兩者配合生成隨機數(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的隨機數(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ù)序列。
可以使用C語言標準庫中的srand()和rand()來生成隨機數(shù),同時要生成1~99之間的隨機數(shù),只需要將生成的隨機數(shù)與99整除,取其余數(shù)+1即可保證所有產(chǎn)生的隨機數(shù)在[1,99]的區(qū)間之內(nèi)。示例代碼如下:
#includestdio.h
#includestdlib.h
#includetime.h
int?main()
{
int?a,i;
srand((unsigned)time(NULL));//初始化隨機數(shù)
for(i=0;i200;i++)
{
a=rand()%99+1;//隨機數(shù)的產(chǎn)生調(diào)用rand()函數(shù)
printf("%d\t",a);
}
printf("\n");
return?0;
}
其實,除了random函數(shù),還有一個rand函數(shù),這個函數(shù)也是一個隨機函數(shù),他可以產(chǎn)生從0到rand_max的隨機數(shù)。
大家可以把以上的代碼編譯運行一下,發(fā)現(xiàn)他的確產(chǎn)生隨機數(shù)了,但是你會發(fā)現(xiàn),每次運行程序產(chǎn)生的隨機數(shù)都是一樣的,如過
你在程序里加上for循環(huán),每次產(chǎn)生的數(shù)不一樣,但是,如果再運行這個程序,它產(chǎn)生的數(shù)故巧洗緯絳蠆??慕峁??
那么如何寫一個程序,讓它每次運行時產(chǎn)生的隨機數(shù)都不一樣呢? 請看下面的例子:
#include stdlib.h
#include stdio.h
#include time.h
int main(void)
{
int i;
time_t t;
srand((unsigned) time(t));
printf("Ten random numbers from 0 to 99\\n\\n");
for(i=0; i10; i++)
printf("%d\\n", rand() % 100);
return 0;
}
這時運行程序,會發(fā)現(xiàn)每次產(chǎn)生的隨機數(shù)都不一樣。
那么為什么第一個程序一樣而第二個程序一樣呢?
第二個程序用到了一個新的函數(shù)srand
這個函數(shù)是給隨機數(shù)產(chǎn)生一個隨機種子(seed),函數(shù)原型是srand( (unsigned)time( NULL ) );
time的值每時每刻都不同。所以種子不同,所以,產(chǎn)生的隨機數(shù)也不同。
所以說,要想產(chǎn)生不同的隨機數(shù),在使用rand之前需要先調(diào)用srand
srand和rand函數(shù)都包含在stdlib.h的頭文件里。
由于rand產(chǎn)生的隨機數(shù)是從0到rand_max的,而rand_max是一個很大的數(shù),那么如何產(chǎn)生從X~Y的數(shù)呢?
從X到Y(jié),有Y-X+1個數(shù),所以要產(chǎn)生從X到Y(jié)的數(shù),只需要這樣寫:
k = rand() % (Y - X + 1) +X;
這樣,就可以產(chǎn)生你想要的任何范圍內(nèi)的隨機數(shù)了。
網(wǎng)頁題目:c語言中隨機數(shù)函數(shù)例子,c語言里隨機函數(shù)
URL網(wǎng)址:http://muchs.cn/article46/hcpseg.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護、網(wǎng)站營銷、做網(wǎng)站、面包屑導航、網(wǎng)站內(nèi)鏈、建站公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)