


版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、用C語(yǔ)言產(chǎn)生隨機(jī)數(shù)在c語(yǔ)言中zndo函數(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提供了 send。函數(shù),它的原形是 void srand( int a)0可能大家都知道C語(yǔ)言中的隨機(jī)函數(shù)random r可是random函數(shù) 并不是ANSI C標(biāo)準(zhǔn),所以說(shuō),random函數(shù)不能在gcc,vc等編譯器下編譯通過(guò)。randQ會(huì)返回一隨機(jī)數(shù)值
2、圍在0至RAND_MAX間。返回0至RAND_MAX之間的隨機(jī)數(shù)值r RAND_MAX定義在stdlib.h ,(其類(lèi)型,int整形的話就是32767。在調(diào)用此函數(shù)產(chǎn)生隨機(jī)數(shù)前,必 須先利用srandQ設(shè)好隨機(jī)數(shù)種子,如果未設(shè)隨機(jī)數(shù)種子,randQ 在調(diào)用時(shí)會(huì)自動(dòng)設(shè)隨機(jī)數(shù)種子為le 一股用for語(yǔ)句來(lái)設(shè)置種子的個(gè) 數(shù)。具體見(jiàn)下面的例子。如何產(chǎn)生不可預(yù)見(jiàn)的隨機(jī)序列呢 利用 srand(unsigned int)(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ù)。它
3、們就是“nd0和srandO函數(shù)。這二個(gè)函數(shù)的工作過(guò)程如下:1)首先給srandQ提供一個(gè)種子,它是一個(gè)unsigned int類(lèi)型其2)然后調(diào)用randQ 它會(huì)根據(jù)提供給send0的種子值返回一個(gè)隨機(jī)數(shù)(在0到32767之間)3)根據(jù)需要多次調(diào)用randQ ,從而不間斷地得到新的隨機(jī)數(shù); 4)無(wú)論什么時(shí)候,都可以給srandQ提供一個(gè)新的種子,從而進(jìn)一步"隨機(jī)化"rand0的輸出結(jié)果。下面是0-32767之間的隨機(jī)數(shù)程瘵:#include <stdlib.h> #include <stdio.h>#include <time.h>使用當(dāng)
4、前時(shí)鐘做種子void main( void)int i;srand( (unsigned)time( NULL );初始化隨機(jī)數(shù)for(i = 0; i < 10;i+ )打印出10個(gè)隨機(jī)數(shù)printf( n %dnHr randO );根據(jù)上面的程康可以很容易得到01之間的隨機(jī)數(shù):#include <stdlib>h>#include <stdio<h>#include <time.h>main()int i;srand( (unsigned)time( NULL);for(i = 0;i < 10;i+ )printf( ”52f
5、n: randO/32767.0); 而產(chǎn)生1-100之間的隨機(jī)數(shù)可以這樣寫(xiě):#include <stdlib.h>#include <stdio.h>#include <time.h> main()int i;srand( (unsigned)time( NULL);for(i = 0;i < 10;i+ )printf( n%dnn, randQ%100+l);二.三個(gè)通用的隨機(jī)數(shù)發(fā)生器推薦用第三個(gè) 函數(shù)名:rand 功能:隨機(jī)數(shù)發(fā)生器 用 法:void rand(void);程序例:#include <stdlib>h>#inc
6、lude <stdioeh> int main (void)int i;printfC'Ten random numbers from 0 to 99nn");for(i=0;i<10;i+)printf(n%dnn, randO % 100);return 0;函數(shù)名:random 功能:隨機(jī)數(shù)發(fā)生器用 法:int random(int num);程原例:#include <stdlib»h> #include <stdio.h> #include vtime.h /* prints a random number in
7、the range 0 to 99 */ int main (void)randomizeO;printfC'Randoin number in the 0-99 range: %dn,f random (100);return 0;函數(shù)名:randomize這個(gè)比較好!功 能:初始化隨機(jī)數(shù)發(fā)生器 用 法:void randomize(void);程序例:#include <stdlib>h> #include <stdio.h> #include vtime.h int main (void)int i;randomizeO;printf(nTen ra
8、ndom numbers from 0 to 99nnn);for(i=0;i<10;i+)printf(H%dnHf randO % 100);return 0;在計(jì)算機(jī)常用算法中有介紹隨機(jī)數(shù)的生成算法三如何產(chǎn)生設(shè)定圍的隨機(jī)數(shù)由于rand產(chǎn)生的隨機(jī)數(shù)從0到rand_max,而rand_max是一個(gè)很大的數(shù),那么如何產(chǎn)生從XY的數(shù)呢?從X到Y(jié) 有YX+ 1個(gè)數(shù).所以要產(chǎn)生從X到Y(jié)的數(shù),只需 要這皓:k=randO%(Y-X+l)+X;這樣就可以產(chǎn)生你想要的任何圍的隨機(jī)數(shù)了。,產(chǎn)生不重復(fù)的隨機(jī)數(shù)1 ) #include <stdlib.h> #include <stdio
9、eh> #i nclude < stdio«h>廠必須用指針進(jìn)行交換*/#include <time<h> swap(int *pmfint *pn) int temp;temp = *pm;*pm=*pn;*pn=temp; int main (void) int ifa513;/*int *pa,*pb;7 srand( (unsigned)tiine( NULL ) ); /*定義這個(gè)可以產(chǎn)生不同的隨機(jī)數(shù)*/for(i = l; i< = 512;i + +)ai=i;printf(,%4dnf ai);for(i = 512; i&g
10、t; = l; i-)/* pa二&ai; pb二&arandO%i + l;*/swap(&arandO%i +1);/*加一是從一到 i 的隨機(jī),就不會(huì)包含0*/廠不用再定義指針.這樣結(jié)論是一樣的*/printf(W);for(i = l;i<=64; i + +)printf(n%4d,ai);getchO; /*wintc 的輸出 2)#include <stdlib.h> #include <stdio.h> #include<stdio.h> int main (void)inta100=0; int ifm;for
11、(i = l; i< = 99;+i)printf(M%4dHfai);srand( (unsigned)time( NULL);or(i = l; i<=99; i + +)while(am=randO%100+l); am = i;for(i = l;i<=99;+i)printf(“4d:ai);getchO;srand ( (int) time ( NULL);設(shè)定隨機(jī)數(shù)種子randO%100 ;產(chǎn)生0-99的隨機(jī)數(shù)。高級(jí)點(diǎn)的,假如要產(chǎn)生16-59之間的數(shù), 你可以這樣寫(xiě):rand ( ) %44+16 (這里44由59-16+1得到)0其他情況如 法炮制!F面是捜回
12、來(lái)的:問(wèn)題1:怎樣獲得一個(gè)真正的隨機(jī)數(shù)?要知道” random能產(chǎn)生真正的隨機(jī)數(shù) 的!即使不能產(chǎn)生真正的隨機(jī)數(shù),也要大概接近呀!而randO好象每次的隨機(jī)都 一樣。專家解答:之所以randOS的隨機(jī)數(shù)都一樣是因?yàn)閞andO函數(shù)使用不正確。各種編 程語(yǔ)言返回的隨機(jī)數(shù)(確切地說(shuō)是偽隨機(jī)數(shù))實(shí)際上都是根據(jù)遞推公式計(jì)算的一 組數(shù)值,當(dāng)序列足夠長(zhǎng),這組數(shù)值近似滿足均勻分布。如果計(jì)算偽隨機(jī)序列的初 始數(shù)值(稱為種子)相同,則計(jì)算岀來(lái)的偽隨機(jī)序列就是完全相同的。這個(gè)特性 被有的軟件利用于加密和解密。加密時(shí),可以用某個(gè)種子數(shù)生成一個(gè)偽隨機(jī)序列 并對(duì)數(shù)據(jù)進(jìn)行處理;解密時(shí),再利用種子數(shù)生成一個(gè)偽隨機(jī)序列并對(duì)加密數(shù)
13、據(jù)進(jìn) 行還原。這樣,對(duì)于不知道種子數(shù)的人要想解密就需要多費(fèi)些事了。當(dāng)然,這種 完全相同的序列對(duì)于你來(lái)說(shuō)是非常糟糕的。要解決這個(gè)問(wèn)題,需要在每次產(chǎn)生隨 機(jī)序列前,先指定不同的種子,這樣計(jì)算岀來(lái)的隨機(jī)序列就不會(huì)完全相同了。你 可以在調(diào)用randO函數(shù)之前調(diào)用srand( (unsigned用NULL),這樣以 time函數(shù)值(即當(dāng)前時(shí)間)作為種子數(shù),因?yàn)閮纱握{(diào)用rand函數(shù)的時(shí)間通常 是不同的,這樣就可以保證隨機(jī)性了。你也可以使用srand函數(shù)來(lái)人為指定種 子數(shù)。Windows 9x/NT的游戲FreeCell就允許用戶指定種子數(shù),這樣用戶如果一次游戲沒(méi)有成功,下次還可以以同樣的發(fā)牌結(jié)果再玩一次。問(wèn)題2:我按照上述方法并不能產(chǎn)生隨機(jī)數(shù),僅產(chǎn)生公差為3或4的等差數(shù)列:莽include <stdlib.h>include <iostream.h>include <conio.h>include <time.h>void mainOfor(inti=0;i<100000;i+)srand( (unsigned)time( NULL);cout< < randO &
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 大慶師范學(xué)院《嵌入式系統(tǒng)原理與接口技術(shù)含實(shí)驗(yàn)》2023-2024學(xué)年第二學(xué)期期末試卷
- 天津仁愛(ài)學(xué)院《教育則里與評(píng)價(jià)》2023-2024學(xué)年第二學(xué)期期末試卷
- 武漢鐵路橋梁職業(yè)學(xué)院《第二外語(yǔ)(日、韓)》2023-2024學(xué)年第二學(xué)期期末試卷
- 湖北文理學(xué)院《獸醫(yī)影像診斷學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 山西運(yùn)城農(nóng)業(yè)職業(yè)技術(shù)學(xué)院《學(xué)生科研指導(dǎo)》2023-2024學(xué)年第二學(xué)期期末試卷
- 福建信息職業(yè)技術(shù)學(xué)院《工程制圖與實(shí)驗(yàn)》2023-2024學(xué)年第二學(xué)期期末試卷
- 蘭州交通大學(xué)《公司金融》2023-2024學(xué)年第二學(xué)期期末試卷
- 連云港師范高等專科學(xué)校《初等數(shù)理天文》2023-2024學(xué)年第二學(xué)期期末試卷
- 黔南民族師范學(xué)院《歌曲作法與小樂(lè)隊(duì)編配1》2023-2024學(xué)年第二學(xué)期期末試卷
- 婁底職業(yè)技術(shù)學(xué)院《中學(xué)地理課程標(biāo)準(zhǔn)與地理教學(xué)案例分析》2023-2024學(xué)年第二學(xué)期期末試卷
- 數(shù)字貿(mào)易學(xué) 課件 第5章 數(shù)字服務(wù)貿(mào)易
- DB11∕T 848-2023 壓型金屬板屋面工程施工質(zhì)量驗(yàn)收標(biāo)準(zhǔn)
- 孕婦乳母的飲食調(diào)理
- 2023年國(guó)家衛(wèi)生健康委統(tǒng)計(jì)信息中心招聘3人筆試《行政職業(yè)能力測(cè)驗(yàn)》模擬試卷答案詳解版
- 奶茶分析報(bào)告
- 行政能力測(cè)試常識(shí)題庫(kù)及答案
- 小學(xué)生反詐知識(shí)宣傳課件
- 高血壓腦出血專家共識(shí)
- NB-T 47013.1-2015 承壓設(shè)備無(wú)損檢測(cè) 第1部分-通用要求
- 西格列汀二甲雙胍緩釋片-藥品解讀
- 多因素身份認(rèn)證
評(píng)論
0/150
提交評(píng)論