


版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、用C語言產(chǎn)生隨機數(shù)在c語言中zndo函數(shù)可以用來產(chǎn)生隨機數(shù)但是這不是真真意義上的隨機數(shù),是一個偽隨機數(shù),是根據(jù)一個數(shù),我們可以稱它 為種子,為基準以某個遞推公武推算出來的一系數(shù),當(dāng)這系列數(shù)很大 的時候,就符合正態(tài)公布,從而相當(dāng)于產(chǎn)生了隨機數(shù)但這不是真正 的隨機數(shù)當(dāng)計算機正常開機后這個種子的值是定了的除非你破 壞了系統(tǒng),為了改變這個種子的值,C提供了 send。函數(shù),它的原形是 void srand( int a)0可能大家都知道C語言中的隨機函數(shù)random r可是random函數(shù) 并不是ANSI C標準,所以說,random函數(shù)不能在gcc,vc等編譯器下編譯通過。randQ會返回一隨機數(shù)值
2、圍在0至RAND_MAX間。返回0至RAND_MAX之間的隨機數(shù)值r RAND_MAX定義在stdlib.h ,(其類型,int整形的話就是32767。在調(diào)用此函數(shù)產(chǎn)生隨機數(shù)前,必 須先利用srandQ設(shè)好隨機數(shù)種子,如果未設(shè)隨機數(shù)種子,randQ 在調(diào)用時會自動設(shè)隨機數(shù)種子為le 一股用for語句來設(shè)置種子的個 數(shù)。具體見下面的例子。如何產(chǎn)生不可預(yù)見的隨機序列呢 利用 srand(unsigned int)(time(NULL)是一種方法因為每一次 運行程序的時間是不同的。在C語言里所提供的隨機數(shù)發(fā)生器的用法:現(xiàn)在的C編譯器都提供了_個基于ANSI標準的偽隨機數(shù)發(fā)生器函數(shù)用來生成隨機 數(shù)。它
3、們就是“nd0和srandO函數(shù)。這二個函數(shù)的工作過程如下:1)首先給srandQ提供一個種子,它是一個unsigned int類型其2)然后調(diào)用randQ 它會根據(jù)提供給send0的種子值返回一個隨機數(shù)(在0到32767之間)3)根據(jù)需要多次調(diào)用randQ ,從而不間斷地得到新的隨機數(shù); 4)無論什么時候,都可以給srandQ提供一個新的種子,從而進一步"隨機化"rand0的輸出結(jié)果。下面是0-32767之間的隨機數(shù)程瘵:#include <stdlib.h> #include <stdio.h>#include <time.h>使用當(dāng)
4、前時鐘做種子void main( void)int i;srand( (unsigned)time( NULL );初始化隨機數(shù)for(i = 0; i < 10;i+ )打印出10個隨機數(shù)printf( n %dnHr randO );根據(jù)上面的程康可以很容易得到01之間的隨機數(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之間的隨機數(shù)可以這樣寫:#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);二.三個通用的隨機數(shù)發(fā)生器推薦用第三個 函數(shù)名:rand 功能:隨機數(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 功能:隨機數(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這個比較好!功 能:初始化隨機數(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;在計算機常用算法中有介紹隨機數(shù)的生成算法三如何產(chǎn)生設(shè)定圍的隨機數(shù)由于rand產(chǎn)生的隨機數(shù)從0到rand_max,而rand_max是一個很大的數(shù),那么如何產(chǎn)生從XY的數(shù)呢?從X到Y(jié) 有YX+ 1個數(shù).所以要產(chǎn)生從X到Y(jié)的數(shù),只需 要這皓:k=randO%(Y-X+l)+X;這樣就可以產(chǎn)生你想要的任何圍的隨機數(shù)了。,產(chǎn)生不重復(fù)的隨機數(shù)1 ) #include <stdlib.h> #include <stdio
9、eh> #i nclude < stdio«h>廠必須用指針進行交換*/#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 ) ); /*定義這個可以產(chǎn)生不同的隨機數(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 的隨機,就不會包含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è)定隨機數(shù)種子randO%100 ;產(chǎn)生0-99的隨機數(shù)。高級點的,假如要產(chǎn)生16-59之間的數(shù), 你可以這樣寫:rand ( ) %44+16 (這里44由59-16+1得到)0其他情況如 法炮制!F面是捜回
12、來的:問題1:怎樣獲得一個真正的隨機數(shù)?要知道” random能產(chǎn)生真正的隨機數(shù) 的!即使不能產(chǎn)生真正的隨機數(shù),也要大概接近呀!而randO好象每次的隨機都 一樣。專家解答:之所以randOS的隨機數(shù)都一樣是因為randO函數(shù)使用不正確。各種編 程語言返回的隨機數(shù)(確切地說是偽隨機數(shù))實際上都是根據(jù)遞推公式計算的一 組數(shù)值,當(dāng)序列足夠長,這組數(shù)值近似滿足均勻分布。如果計算偽隨機序列的初 始數(shù)值(稱為種子)相同,則計算岀來的偽隨機序列就是完全相同的。這個特性 被有的軟件利用于加密和解密。加密時,可以用某個種子數(shù)生成一個偽隨機序列 并對數(shù)據(jù)進行處理;解密時,再利用種子數(shù)生成一個偽隨機序列并對加密數(shù)
13、據(jù)進 行還原。這樣,對于不知道種子數(shù)的人要想解密就需要多費些事了。當(dāng)然,這種 完全相同的序列對于你來說是非常糟糕的。要解決這個問題,需要在每次產(chǎn)生隨 機序列前,先指定不同的種子,這樣計算岀來的隨機序列就不會完全相同了。你 可以在調(diào)用randO函數(shù)之前調(diào)用srand( (unsigned用NULL),這樣以 time函數(shù)值(即當(dāng)前時間)作為種子數(shù),因為兩次調(diào)用rand函數(shù)的時間通常 是不同的,這樣就可以保證隨機性了。你也可以使用srand函數(shù)來人為指定種 子數(shù)。Windows 9x/NT的游戲FreeCell就允許用戶指定種子數(shù),這樣用戶如果一次游戲沒有成功,下次還可以以同樣的發(fā)牌結(jié)果再玩一次。問題2:我按照上述方法并不能產(chǎn)生隨機數(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. 本站所有資源如無特殊說明,都需要本地電腦安裝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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 個人職業(yè)規(guī)劃的思路與方向計劃
- 幼兒成長之路小班教學(xué)活動規(guī)劃計劃
- 生產(chǎn)計劃與需求預(yù)測的關(guān)系
- 小班音樂與韻律教育活動計劃
- 《貴州連云礦業(yè)有限公司興仁縣潘家莊鎮(zhèn)旭東煤礦(延續(xù))礦產(chǎn)資源綠色開發(fā)利用方案(三合一)》專家組評審意見
- 鹽邊縣中天礦業(yè)有限責(zé)任公司新九大老包鐵礦礦山地質(zhì)環(huán)境保護與土地復(fù)墾方案情況
- 第1課 互聯(lián)網(wǎng)與物聯(lián)網(wǎng) 教學(xué)設(shè)計 -初中信息技術(shù)七年級下冊浙教版2023
- 第八單元-第2課時-角的度量(教學(xué)設(shè)計)四年級數(shù)學(xué)上冊同步高效課堂系列(蘇教版)
- 《三位數(shù)乘兩位數(shù)的筆算乘法》(教學(xué)設(shè)計)-2024-2025學(xué)年四年級上冊數(shù)學(xué)人教版
- 不同茶葉沖泡方法
- 辦公樓招商知識培訓(xùn)課件
- 廣西壯族自治區(qū)馬山縣實驗高中-主題班會-高中如何上好自習(xí)課【課件】
- 2025年阜陽科技職業(yè)學(xué)院單招職業(yè)技能測試題庫及答案1套
- 開啟新征程??點亮新學(xué)期+課件=2024-2025學(xué)年高一下學(xué)期開學(xué)家長會
- 2025內(nèi)蒙古烏審旗圖克鎮(zhèn)圖克工業(yè)園區(qū)中天合創(chuàng)化工分公司招聘20人易考易錯模擬試題(共500題)試卷后附參考答案
- 2.3品味美好情感 課件 -2024-2025學(xué)年統(tǒng)編版道德與法治七年級下冊
- 七年級道法下冊 第一單元 綜合測試卷(人教海南版 2025年春)
- 海洋自主無人系統(tǒng)跨域協(xié)同任務(wù)規(guī)劃模型與技術(shù)發(fā)展研究
- GB/T 18851.2-2024無損檢測滲透檢測第2部分:滲透材料的檢驗
- 正弦穩(wěn)態(tài)電路分析
- 中國中材海外科技發(fā)展有限公司招聘筆試沖刺題2025
評論
0/150
提交評論