C語(yǔ)言程序隨機(jī)數(shù)的產(chǎn)生方法.doc_第1頁(yè)
C語(yǔ)言程序隨機(jī)數(shù)的產(chǎn)生方法.doc_第2頁(yè)
C語(yǔ)言程序隨機(jī)數(shù)的產(chǎn)生方法.doc_第3頁(yè)
C語(yǔ)言程序隨機(jī)數(shù)的產(chǎn)生方法.doc_第4頁(yè)
C語(yǔ)言程序隨機(jī)數(shù)的產(chǎn)生方法.doc_第5頁(yè)
已閱讀5頁(yè),還剩4頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

隨機(jī)數(shù)的產(chǎn)生方法 瑞達(dá)路 水瓶酒窩哥 由于老師布置了產(chǎn)生隨機(jī)數(shù)的作業(yè),要求編一個(gè)程序能夠產(chǎn)生0000到9999總共10000個(gè)不重復(fù)的隨機(jī)數(shù),可能大家在網(wǎng)上看了一些方法,都用了函數(shù)Rand與Brand的結(jié)合,可以產(chǎn)生10000個(gè)隨機(jī)數(shù),并且大家都是用公式(rand() % (b-a)+ a來約束產(chǎn)生隨機(jī)數(shù)的范圍和個(gè)數(shù)的,但是大家?guī)缀跬瞬荒苤貜?fù)的要求,所以產(chǎn)生的隨機(jī)數(shù)是有很多重復(fù)的,不能滿足要求,鑒于這種情況,我把大眾化隨機(jī)數(shù)的產(chǎn)生方法以及自己的一點(diǎn)改進(jìn)措施與大家共享如下:1、 可重復(fù)隨機(jī)數(shù)的產(chǎn)生方法: 我們知道rand()函數(shù)可以用來產(chǎn)生隨機(jī)數(shù),但是這不是真正意義上的隨機(jī)數(shù),是一個(gè)偽隨機(jī)數(shù),是根據(jù)一個(gè)數(shù)(我們可以稱它為種子)為基準(zhǔn)以某個(gè)遞推公式推算出來的一系列數(shù),當(dāng)這系列數(shù)很大的時(shí)候,就符合正態(tài)公布,從而相當(dāng)于產(chǎn)生了隨機(jī)數(shù),但這不是真正的隨機(jī)數(shù),當(dāng)計(jì)算機(jī)正常開機(jī)后,這個(gè)種子的值是定了的,除非你破壞了系統(tǒng)。但是有一個(gè)函數(shù)srand()可以初始化這個(gè)種子函數(shù)。 1、函數(shù)rand()用法:說明:rand是包含在頭文件stdlib.h中,跟stdio.h是一個(gè)道理,具體運(yùn)用方法如下:代碼:# include stdio.h# include stdlib.hint main()int k;k=rand();printf(%d,k);return 0;程序在編譯軟件中的運(yùn)行截圖過程如下:當(dāng)運(yùn)行這個(gè)程序時(shí),我們會(huì)發(fā)現(xiàn),產(chǎn)生的隨機(jī)數(shù)永遠(yuǎn)都是一個(gè)值,例如我的電腦是41,這是因?yàn)橛?jì)算機(jī)的隨機(jī)數(shù)都是由偽隨機(jī)數(shù),即是由小M多項(xiàng)式序列生成的,其中產(chǎn)生每個(gè)小序列都有一個(gè)初始值,即隨機(jī)種子。(注意: 小M多項(xiàng)式序列的周期是65535,即每次利用一個(gè)隨機(jī)種子生成的隨機(jī)數(shù)的周期是65535,當(dāng)你取得65535個(gè)隨機(jī)數(shù)后它們又重復(fù)出現(xiàn)了。)rand()返回一隨機(jī)數(shù)值的范圍在0至RAND_MAX 間。RAND_MAX的范圍最少是在32767之間(int)。用unsigned int 雙字節(jié)是65535,四字節(jié)是4294967295的整數(shù)范圍。0RAND_MAX每個(gè)數(shù)字被選中的機(jī)率是相同的。 用戶未設(shè)定隨機(jī)數(shù)種子時(shí),系統(tǒng)默認(rèn)的隨機(jī)數(shù)種子為1。rand()產(chǎn)生的是偽隨機(jī)數(shù)字,每次執(zhí)行時(shí)是相同的;若要不同,用函數(shù)srand()初始化它。2、 Srand()的用法: 函數(shù)srand是包含在頭文件stdlib.h中的。用法: void srand(unsigned int seed) srand()用來設(shè)置rand()產(chǎn)生隨機(jī)數(shù)時(shí)的隨機(jī)數(shù)種子。參數(shù)seed必須是個(gè)整數(shù),如果每次seed都設(shè)相同值,rand()所產(chǎn)生的隨機(jī)數(shù)值每次就會(huì)一樣,因此我們得想辦法使得seed不斷變化,才能使產(chǎn)生的隨機(jī)數(shù)是真隨機(jī)數(shù)。程序例子如下:# include stdio.h# include stdlib.h# include time.hint main()time_t t;srand(unsigned)time(&t);/引用函數(shù)srand,產(chǎn)生不同的種子數(shù)FILE *f;int i,j,a10000;f=fopen(d:1234.txt,wt);/將產(chǎn)生的隨機(jī)數(shù)寫入d盤中的1234.txt文檔中方便查看 if(f=NULL) printf(文件打開失敗!n); return 0; else printf(文件打開成功!n);for(i=0;i10000;i+)ai=rand()%10000;fprintf(f,%4d ,ai);printf(文件寫入成功!n);i=fclose(f); if(i=0)printf(文件關(guān)閉成功!n);else printf(文件關(guān)閉失敗!n);return 0;程序在編譯器中的運(yùn)行截圖如下:運(yùn)行完程序后在d盤中找到1234.txt文檔,打開便看到產(chǎn)生的10000個(gè)隨機(jī)數(shù)這里產(chǎn)生的隨機(jī)數(shù)是從09999的可重復(fù)隨機(jī)數(shù),并且用到下列公式:要取得a,b)的隨機(jī)整數(shù),使用(rand() % (b-a)+ a;要取得a,b的隨機(jī)整數(shù),使用(rand() % (b-a+1)+ a;要取得(a,b的隨機(jī)整數(shù),使用(rand() % (b-a)+ a + 1;通用公式:a + rand() % n;其中的a是起始值,n是整數(shù)的范圍。要取得a到b之間的隨機(jī)整數(shù),另一種表示:a + (int)b * rand() / (RAND_MAX + 1)。要取得01之間的浮點(diǎn)數(shù),可以使用rand() / double(RAND_MAX)。問題:產(chǎn)生00009999的隨機(jī)數(shù)代碼(注意:不是09999)?程序代碼如下:# include stdio.h# include stdlib.h# include time.hint main()time_t t;srand(unsigned)time(&t);FILE *f;int i,j,a10000;f=fopen(c:隨機(jī)數(shù).txt,wt);if(f=NULL) printf(文件打開失敗!n); return 0; else printf(文件打開成功!n);for(i=0;i10000;i+)ai=rand()%10000;if(0=ai&ai=9)fprintf(f,000%d ,ai);if(10=ai&ai=99)fprintf(f,00%d ,ai);if(100=ai&ai=999)fprintf(f,0%d ,ai);if(1000=ai&ai=9999)fprintf(f,%d ,ai);printf(文件寫入成功!n);i=fclose(f); if(i=0)printf(文件關(guān)閉成功!n);else printf(文件關(guān)閉失敗!n);return 0;注意:如果有些編者只想在屏幕上看到結(jié)果,而對(duì)文件的輸入輸出不熟悉,可看以下代碼:# include stdio.h# include stdlib.h# include time.hint main()time_t t;srand(unsigned)time(&t);int i,j,a10000;for(i=0;i10000;i+)ai=rand()%10000;if(0=

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論