C語言中,設置隨機數(shù)種子需要包含頭文件stdlib.h,利用系統(tǒng)時間需要包含頭文件time.h。
成都創(chuàng)新互聯(lián)自2013年起,是專業(yè)互聯(lián)網(wǎng)技術服務公司,擁有項目網(wǎng)站制作、網(wǎng)站建設網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元芷江做網(wǎng)站,已為上家服務,為芷江各地企業(yè)和個人服務,聯(lián)系電話:18982081108
設置隨機數(shù)種子的函數(shù)原型為:void?srand(unsigned int seed);
利用系統(tǒng)時間作為隨機數(shù)的種子代碼如下:
#include?stdlib.h
#include?time.h
int?main(){
srand((unsigned)time(NULL));?//?利用系統(tǒng)時間作為隨機數(shù)的種子
return?0;
}
在C語言中取隨機數(shù)所需要的函數(shù)是:
int rand(void);
void srand (unsigned int n);
rand()函數(shù)和srand()函數(shù)被聲明在頭文件stdlib.h中,所以要使用這兩個函數(shù)必須包含該頭文件:
#include stdlib.h
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)生的結果一樣。
#include stdlib.h
#include time.h
int main( )
{
int a[100]; /* 存放隨機數(shù)的數(shù)組 */
time_t t1; /* 用于存放時間 */
time(t1); /* 取得當前系統(tǒng)時間 */
srand(t1); /* 設置隨機數(shù)種子 */
for (i = 0; i 100; i ++) /* 循環(huán)生成10個隨機數(shù),放到數(shù)組a中 */
a[i] = 10 + rand( ) % 90;
/* 數(shù)值范圍在10到99間,需要不同范圍的數(shù)據(jù)請自行更改 */
...
}
c語言中 srand(time(NULL)); 的意思是:使用當前時間進行隨機數(shù)發(fā)生器的初始化。
time_t time(time_t *t); 是C標準庫函數(shù),如果t是空指針(NULL),直接返回當前時間。如果t不是空指針,返回當前時間的同時,將返回值賦予t指向的內(nèi)存空間。time() 是指返回自 Unix 紀元起的當前時間的秒數(shù)的函數(shù),主要用來獲取當前的系統(tǒng)時間,返回的結果是一個time_t類型。
srand函數(shù)是隨機數(shù)發(fā)生器的初始化函數(shù)。原型:void srand(unsigned int seed); srand和rand()配合使用產(chǎn)生偽隨機數(shù)序列。
擴展資料:
srand函數(shù)的相關信息:
1、語法:void srand (unsigned seed);
2、參數(shù)說明:unsigned seed:隨機數(shù)產(chǎn)生器的初始值(種子值)。
3、功能說明:srand設置產(chǎn)生一系列偽隨機數(shù)發(fā)生器的起始點,要想把發(fā)生器重新初始化,可用1作seed值。任何共它的值都把發(fā)生器匿成一個隨機的起始點。rand檢索生成的偽隨機數(shù)。在任何調(diào)用srand之前調(diào)用rand與以1作為seed調(diào)用srand產(chǎn)生相同的序列。
此函數(shù)可以設定rand函數(shù)所用的隨機數(shù)產(chǎn)生演算法的種子值。任何大于一的種子值都會將rand隨機數(shù)所產(chǎn)生的虛擬隨機數(shù)序列重新設定一個起始點。
4、包含文件:stdlib. h
5、返回值:無
參考資料來源:百度百科-time()
參考資料來源:百度百科-srand
計算機產(chǎn)生的隨機數(shù)并不是真正隨機的,所以叫
偽隨機數(shù)。
當“種子”固定時,它產(chǎn)生的隨機數(shù)序列是不變的,例如產(chǎn)生10個數(shù),這10個數(shù)大小是變化的,但只要用這個種子,每次產(chǎn)生的這10個數(shù)序列,是一模一樣的。
用
srand(time(0));
設種子,就會因時間變化,得到不同的種子,那么隨機數(shù)序列就會變化。
time(0)
是當前時間,(精度可能是毫秒)。只要兩次跑程序啟動時間差別
超過1毫秒,兩個序列就不同了(隨機)。如果,時間差別不到1毫秒,兩個序列就沒變化。
--------
錯誤的程序:
for
(i=0;i5;i++){
srand(time(0));
//
5次的種子若不變
printf("%d
",rand());
//
依次取
5個序列的
第一個數(shù)
}
5個數(shù)不變化。
-------------------
正確的程序:
srand(time(0));
//
設1次種子
for
(i=0;i5;i++){
printf("%d
",rand());
//依次取1個序列的第1到第5個隨機數(shù)
}
5個數(shù)變化