C語言產(chǎn)生隨機數(shù)的方法_第1頁
C語言產(chǎn)生隨機數(shù)的方法_第2頁
C語言產(chǎn)生隨機數(shù)的方法_第3頁
C語言產(chǎn)生隨機數(shù)的方法_第4頁
C語言產(chǎn)生隨機數(shù)的方法_第5頁
已閱讀5頁,還剩2頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

C語言產(chǎn)生隨機數(shù)的方法C語言的設(shè)計目標是提供一種能以簡易的方式編譯、處理低級存儲器、產(chǎn)生少量的機器碼以及不需要任何運行環(huán)境支持便能運行的編程語言。那么C語言產(chǎn)生隨機數(shù)的方法都有哪些呢?以下僅供參考!在C語言中,rand()函數(shù)可以用來產(chǎn)生隨機數(shù),但是這不是真真意義上的隨機數(shù),是一個偽隨機數(shù),是根據(jù)一個數(shù),我們可以稱它為種子,為基準以某個遞推公式推算出來的一系數(shù),當這系列數(shù)很大的時候,就符合正態(tài)公布,從而相當于產(chǎn)生了隨機數(shù),但這不是真正的隨機數(shù),當計算機正常開機后,這個種子的值是定了的,除非你破壞了系統(tǒng),為了改變這個種子的值,C提供了srand()函數(shù),它的原形是voidsrand(inta)??赡艽蠹叶贾繡語言中的隨機函數(shù)random,可是random函數(shù)并不是ANSIC標準,所以說,random函數(shù)不能在gcc,vc等編譯器下編譯通過。rand()會返回一隨機數(shù)值,范圍在0至RAND_MAX間。返回0至RAND_MAX之間的隨機數(shù)值,RAND_MAX定義在stdlib.h,(其值至少為32767)我運算的結(jié)果是一個不定的數(shù),要看你定義的變量類型,int整形的話就是32767。在調(diào)用此函數(shù)產(chǎn)生隨機數(shù)前,必須先利用srand()設(shè)好隨機數(shù)種子,如果未設(shè)隨機數(shù)種子,rand()在調(diào)用時會自動設(shè)隨機數(shù)種子為1。一般用for語句來設(shè)置種子的個數(shù)。具體見下面的'例子。一、 如何產(chǎn)生不可預(yù)見的隨機序列呢利用srand((unsignedint)(time(NULL))是一種方法,因為每一次運行程序的時間是不同的。在C語言里所提供的隨機數(shù)發(fā)生器的用法:現(xiàn)在的C編譯器都提供了一個基于ANSI標準的偽隨機數(shù)發(fā)生器函數(shù),用來生成隨機數(shù)。它們就是rand()和srand()函數(shù)。這二個函數(shù)的工作過程如下:首先給srand()提供一個種子,它是一個unsignedint類型,其取值范圍從0~65535;然后調(diào)用rand(),它會根據(jù)提供給srand()的種子值返回一個隨機數(shù)(在0到32767之間)根據(jù)需要多次調(diào)用rand(),從而不間斷地得到新的隨機數(shù);無論什么時候,都可以給srand()提供一個新的種子,從而進一步“隨機化”rand()的輸出結(jié)果。下面是0~32767之間的隨機數(shù)程序:#include#include#include//使用當前時鐘做種子voidmain(void){inti;srand((unsigned)time(NULL)); //初始化隨機數(shù)for(i=0;i<10;i++) //打印出10個隨機數(shù)printf("%d",rand());}根據(jù)上面的程序可以很容易得到0~1之間的隨機數(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之間的隨機數(shù)可以這樣寫:#include#include#includeintmain(){inti;srand((unsigned)time(NULL));for(i=0;i<10;i++)printf("%d",rand()%100+1);}comefrom/akaneyu二、三個通用的隨機數(shù)發(fā)生器,推薦用第三個函數(shù)名:rand功能:隨機數(shù)發(fā)生器用法:voidrand(void);程序例:#include#includeintmain(void){inti;printf("Tenrandomnumbersfrom0to99");for(i=0;i<10;i++)printf("%d",rand()%100);return0;函數(shù)名:random功能:隨機數(shù)發(fā)生器用法:intrandom(intnum);程序例:#include#include#include/*printsarandomnumberintherange0to99*/intmain(void){randomize();printf("Randomnumberinthe0-99range:%d",random(100));return0;}函數(shù)名:randomize這個比較好!功能:初始化隨機數(shù)發(fā)生器用法:voidrandomize(void);程序例:#include#include#includeintmain(void)inti;randomize();printf("Tenrandomnumbersfrom0to99");for(i=0;i<10;i++)printf("%d",rand()%100);return0;}在《計算機常用算法》中有介紹隨機數(shù)的生成算法三、如何產(chǎn)生設(shè)定范圍內(nèi)的隨機數(shù)由于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ù)了。四、產(chǎn)生不重復(fù)的隨機數(shù)1)#include#include#includeswap(int*pm,int*pn)/*必須用指針進行交換*/{inttemp;temp=*pm;*pm=*pn;*pn=temp;}intmain(void){inti,a[513];/*int*pa,*pb;*/srand((unsigned)time(NULL));/*定義這個可以產(chǎn)生不同的隨機數(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的隨機,就不會包含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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論