rand和srand產(chǎn)生隨機(jī)數(shù)_第1頁(yè)
rand和srand產(chǎn)生隨機(jī)數(shù)_第2頁(yè)
rand和srand產(chǎn)生隨機(jī)數(shù)_第3頁(yè)
rand和srand產(chǎn)生隨機(jī)數(shù)_第4頁(yè)
rand和srand產(chǎn)生隨機(jī)數(shù)_第5頁(yè)
已閱讀5頁(yè),還剩2頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、rand 和 srand 產(chǎn)生隨機(jī)數(shù)rand 和 srand 的用法首先我們要對(duì) rand srand 有個(gè)總體的看法 :srand 初始化隨 機(jī)種子 ,rand 產(chǎn)生隨機(jī)數(shù),下面將詳細(xì)說(shuō)明。rand (產(chǎn)生隨機(jī)數(shù))表頭文件 : #include<stdlib.h>定義函數(shù) :int rand(void)函數(shù)說(shuō)明 :因?yàn)?rand 的內(nèi)部實(shí)現(xiàn)是用線性同余法做的,他不是真的隨 機(jī)數(shù),只不過(guò)是因?yàn)槠渲芷谔貏e長(zhǎng),所以有一定的范圍里可 看成是隨機(jī)的, rand() 會(huì)返回一隨機(jī)數(shù)值,范圍在 0 至 RAND_MAX 間。在調(diào)用此函數(shù)產(chǎn)生隨機(jī)數(shù)前,必須先利用 srand() 設(shè)好隨機(jī)數(shù)種子,

2、如果未設(shè)隨機(jī)數(shù)種子, rand() 在調(diào) 用時(shí)會(huì)自動(dòng)設(shè)隨機(jī)數(shù)種子為 1。rand ()產(chǎn)生的是假隨機(jī)數(shù)字, 每次執(zhí)行時(shí)是相同的。若要不同 ,以不同的值來(lái)初始化它 .初 始化的函數(shù)就是 srand() 。返回值 : 返回 0 至 RAND_MAX 之間的隨機(jī)整數(shù)值, RAND_MAX 的 范圍最少是在 32767 之間( int ),即雙字節(jié)( 16 位數(shù))。若 用 unsigned int 雙字節(jié)是 65535 ,四字節(jié)是 4294967295 的 整數(shù)范圍。0RAND_MAX 每個(gè)數(shù)字被選中的機(jī)率是相同的。范例:/* 產(chǎn)生介于 1 到 10 間的隨機(jī)數(shù)值, 此范例未設(shè)隨機(jī)數(shù)種子, 完整的隨機(jī)

3、數(shù)產(chǎn)生請(qǐng)參考srand () */#include<stdlib.h>main()int i,j;for(i=0;i<10;i+)j=1+(int)(10.0*rand()/(RAND_MAX+1.0);printf(%d ,j);執(zhí)行:9 4 8 8 10 2 4 8 3 69 4 8 8 10 2 4 8 3 6 / 再次執(zhí)行仍然產(chǎn)生相同的隨機(jī)數(shù)srand (設(shè)置隨機(jī)數(shù)種子)表頭文件: #include<stdlib.h>定義函數(shù): void srand (unsigned int seed);函數(shù)說(shuō)明:srand() 用來(lái)設(shè)置 rand() 產(chǎn)生隨機(jī)數(shù)時(shí)的隨

4、機(jī)數(shù)種子。參數(shù) seed 必須是個(gè)整數(shù),通??梢岳?geypid() 或 time(0) 的返 回值來(lái)當(dāng)做 seed 。如果每次 seed 都設(shè)相同值, rand() 所產(chǎn) 生的隨機(jī)數(shù)值每次就會(huì)一樣。范例/* 產(chǎn)生介于 1 到 10 間的隨機(jī)數(shù)值, 此范例與執(zhí)行結(jié)果可與 rand ()參照 */#include<time.h>#include<stdlib.h>main()int i,j;srand(int)time(0); for(i=0;i<10;i+) j=1+(int)(10.0*rand()/(RAND_MAX+1.0); printf( %d ,j)

5、;執(zhí)行:與 rand 范例比較5 8 8 8 10 2 10 8 9 92 9 7 4 10 3 2 10 8 7 又或:用 int x = rand() % 100; 來(lái)生成 0 到 100 之間的隨機(jī)數(shù)這 種方法是不或取的,比較好的做法是:j=(int)(n*rand()/(RAND_MAX+1.0)產(chǎn)生一個(gè) 0 到 n 之間的隨機(jī)數(shù)int main(void)int i;time_t t;srand(unsigned) time(&t);printf(Ten random numbers from 0 to 99nn);for(i=0; i<10; i+) printf(%

6、dn, rand() % 100);return 0;除以上所說(shuō)的之外,補(bǔ)充一點(diǎn)就是 srand 這個(gè)函數(shù)一定要放 在循環(huán)外面或者是循環(huán)調(diào)用的外面,否則的話得到的是相同 的數(shù)字。MSDN 中的例子。/ crt_rand.c/ This program seeds the random-number generator/ with the time, then displays 10 random integers./#include <stdlib.h>#include <stdio.h>#include <time.h>int main( void )in

7、t i;/ Seed the random-number generator with current time so that/ the numbers will be different every time we run./srand( (unsigned)time( NULL ) );/ Display 10 numbers.for( i = 0;i < 10;i+ )printf( %6dn, rand() );printf(n);/ Usually, you will want to generate a number in a specific range,/ such a

8、s 0 to 100, like this:int RANGE_MIN = 0;int RANGE_MAX = 100;for (i = 0;i < 10; i+ )int rand100 = (double) rand() /(double) RAND_MAX)RANGE_MAX + RANGE_MIN);printf( %6dn, rand100);總結(jié):我們知道 rand() 函數(shù)可以用來(lái)產(chǎn)生隨機(jī)數(shù),但是這不是真真 意義上的隨機(jī)數(shù),是一個(gè)偽隨機(jī)數(shù),是根據(jù)一個(gè)數(shù),我們可 以稱它為種了,為基準(zhǔn)以某個(gè)遞推公式推算出來(lái)的一系數(shù), 當(dāng)這系列數(shù)很大的時(shí)候,就符合正態(tài)公布,從而相當(dāng)于產(chǎn)生 了隨機(jī)

9、數(shù),但這不是真正的隨機(jī)數(shù),當(dāng)計(jì)算機(jī)正常開機(jī)后, 這個(gè)種子的值是定了的,除非你破壞了系統(tǒng),為了改變這個(gè) 種子的值,C提供了 srand()函數(shù),它的原形是void srand( int a) 功能是初始化隨機(jī)產(chǎn)生器既 rand() 函數(shù)的初始值,即使把種子的值 改成 a; 從這你可以看到通過(guò) sand() 函數(shù),我們是可以產(chǎn)生 可以預(yù)見的隨機(jī)序列, 那我們?nèi)绾尾拍墚a(chǎn)生不可預(yù)見的隨機(jī)序列呢?我們可能常 常需要這樣的隨機(jī)序列,是吧。利用 srand(unsign)(time(NULL) 是一種方法, 因?yàn)槊恳淮芜\(yùn)行程 序的時(shí)間是不同的, 對(duì)了, 你知道 time() 函數(shù)的功能是返回 從 1970/01/01 到現(xiàn)在的秒數(shù)的吧,可能這個(gè)起始時(shí)間不正 確,你查一下對(duì)不對(duì)吧, C 還提供了另一個(gè)更方便的函數(shù), randomize

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論