C語(yǔ)言產(chǎn)生隨機(jī)數(shù)的方法_第1頁(yè)
C語(yǔ)言產(chǎn)生隨機(jī)數(shù)的方法_第2頁(yè)
C語(yǔ)言產(chǎn)生隨機(jī)數(shù)的方法_第3頁(yè)
C語(yǔ)言產(chǎn)生隨機(jī)數(shù)的方法_第4頁(yè)
C語(yǔ)言產(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)介

C語(yǔ)言產(chǎn)生隨機(jī)數(shù)的方法C語(yǔ)言的設(shè)計(jì)目標(biāo)是提供一種能以簡(jiǎn)易的方式編譯、處理低級(jí)存儲(chǔ)器、產(chǎn)生少量的機(jī)器碼以及不需要任何運(yùn)行環(huán)境支持便能運(yùn)行的編程語(yǔ)言。那么C語(yǔ)言產(chǎn)生隨機(jī)數(shù)的方法都有哪些呢?以下僅供參考!在C語(yǔ)言中,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ī)數(shù),但這不是真正的隨機(jī)數(shù),當(dāng)計(jì)算機(jī)正常開(kāi)機(jī)后,這個(gè)種子的值是定了的,除非你破壞了系統(tǒng),為了改變這個(gè)種子的值,C提供了srand()函數(shù),它的原形是voidsrand(inta)??赡艽蠹叶贾繡語(yǔ)言中的隨機(jī)函數(shù)random,可是random函數(shù)并不是ANSIC標(biāo)準(zhǔn),所以說(shuō),random函數(shù)不能在gcc,vc等編譯器下編譯通過(guò)。rand()會(huì)返回一隨機(jī)數(shù)值,范圍在0至RAND_MAX間。返回0至RAND_MAX之間的隨機(jī)數(shù)值,RAND_MAX定義在stdlib.h,(其值至少為32767)我運(yùn)算的結(jié)果是一個(gè)不定的數(shù),要看你定義的變量類(lèi)型,int整形的話就是32767。在調(diào)用此函數(shù)產(chǎn)生隨機(jī)數(shù)前,必須先利用srand()設(shè)好隨機(jī)數(shù)種子,如果未設(shè)隨機(jī)數(shù)種子,rand()在調(diào)用時(shí)會(huì)自動(dòng)設(shè)隨機(jī)數(shù)種子為1。一般用for語(yǔ)句來(lái)設(shè)置種子的個(gè)數(shù)。具體見(jiàn)下面的'例子。一、 如何產(chǎn)生不可預(yù)見(jiàn)的隨機(jī)序列呢利用srand((unsignedint)(time(NULL))是一種方法,因?yàn)槊恳淮芜\(yùn)行程序的時(shí)間是不同的。在C語(yǔ)言里所提供的隨機(jī)數(shù)發(fā)生器的用法:現(xiàn)在的C編譯器都提供了一個(gè)基于ANSI標(biāo)準(zhǔn)的偽隨機(jī)數(shù)發(fā)生器函數(shù),用來(lái)生成隨機(jī)數(shù)。它們就是rand()和srand()函數(shù)。這二個(gè)函數(shù)的工作過(guò)程如下:首先給srand()提供一個(gè)種子,它是一個(gè)unsignedint類(lèi)型,其取值范圍從0~65535;然后調(diào)用rand(),它會(huì)根據(jù)提供給srand()的種子值返回一個(gè)隨機(jī)數(shù)(在0到32767之間)根據(jù)需要多次調(diào)用rand(),從而不間斷地得到新的隨機(jī)數(shù);無(wú)論什么時(shí)候,都可以給srand()提供一個(gè)新的種子,從而進(jìn)一步“隨機(jī)化”rand()的輸出結(jié)果。下面是0~32767之間的隨機(jī)數(shù)程序:#include#include#include//使用當(dāng)前時(shí)鐘做種子voidmain(void){inti;srand((unsigned)time(NULL)); //初始化隨機(jī)數(shù)for(i=0;i<10;i++) //打印出10個(gè)隨機(jī)數(shù)printf("%d",rand());}根據(jù)上面的程序可以很容易得到0~1之間的隨機(jī)數(shù):#include#include#includeintmain(){inti;srand((unsigned)time(NULL));for(i=0;i<10;i++)printf("%5.2f",rand()/32767.0);}而產(chǎn)生1~100之間的隨機(jī)數(shù)可以這樣寫(xiě):#include#include#includeintmain(){inti;srand((unsigned)time(NULL));for(i=0;i<10;i++)printf("%d",rand()%100+1);}comefrom/akaneyu二、三個(gè)通用的隨機(jī)數(shù)發(fā)生器,推薦用第三個(gè)函數(shù)名:rand功能:隨機(jī)數(shù)發(fā)生器用法:voidrand(void);程序例:#include#includeintmain(void){inti;printf("Tenrandomnumbersfrom0to99");for(i=0;i<10;i++)printf("%d",rand()%100);return0;函數(shù)名:random功能:隨機(jī)數(shù)發(fā)生器用法:intrandom(intnum);程序例:#include#include#include/*printsarandomnumberintherange0to99*/intmain(void){randomize();printf("Randomnumberinthe0-99range:%d",random(100));return0;}函數(shù)名:randomize這個(gè)比較好!功能:初始化隨機(jī)數(shù)發(fā)生器用法:voidrandomize(void);程序例:#include#include#includeintmain(void)inti;randomize();printf("Tenrandomnumbersfrom0to99");for(i=0;i<10;i++)printf("%d",rand()%100);return0;}在《計(jì)算機(jī)常用算法》中有介紹隨機(jī)數(shù)的生成算法三、如何產(chǎn)生設(shè)定范圍內(nèi)的隨機(jī)數(shù)由于rand產(chǎn)生的隨機(jī)數(shù)從0到rand_max,而rand_max是一個(gè)很大的數(shù),那么如何產(chǎn)生從X~Y的數(shù)呢?從X到Y(jié),有Y—X+1個(gè)數(shù),所以要產(chǎn)生從X到Y(jié)的數(shù),只需要這樣寫(xiě):k=rand()%(Y-X+1)+X;這樣,就可以產(chǎn)生你想要的任何范圍內(nèi)的隨機(jī)數(shù)了。四、產(chǎn)生不重復(fù)的隨機(jī)數(shù)1)#include#include#includeswap(int*pm,int*pn)/*必須用指針進(jìn)行交換*/{inttemp;temp=*pm;*pm=*pn;*pn=temp;}intmain(void){inti,a[513];/*int*pa,*pb;*/srand((unsigned)time(NULL));/*定義這個(gè)可以產(chǎn)生不同的隨機(jī)數(shù)*/for(i=1;i<=512;i++){a[i]=i;printf("%4d",a[i]);}for(i=512;i>=1;i--){/*pa=&a[i];pb=&a[rand()%i+1];*/swap(&a[i],&a[rand()%i+1]);/*加一是從一到i的隨機(jī),就不會(huì)包含0*//*不用再定義指針,這樣結(jié)論是一樣的*/}printf("");for(i=1;i<=64;i++)printf("%4d",a[i]);getch();/*wintc的輸出*/}#include#include#includeintmain(void){inta[100]={0};inti,m;for(i=1;i<=99;++i)prin

溫馨提示

  • 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)論