| C++分析研究 |
|
|||
| C++ | ||||
|
日歷
統(tǒng)計
導航常用鏈接留言簿隨筆檔案
文章檔案搜索最新評論
|
C語言/C++怎樣產生隨機數(shù):這里要用到的是rand()函數(shù), srand()函數(shù),和time()函數(shù)。
需要說明的是,iostream頭文件中就有srand函數(shù)的定義,不需要再額外引入stdlib.h;而使用time()函數(shù)需要引入ctime頭文件。托福答案 使用rand()函數(shù)獲取一個隨機數(shù) 如果你只要產生隨機數(shù)而不需要設定范圍的話,你只要用rand()就可以了:rand()會返回一隨機數(shù)值, 范圍在0至RAND_MAX 間。RAND_MAX定義在stdlib.h, 其值為2147483647. 例子1.1: [cpp #include<iostream> using namespace std; int main() { for(int i=0;i<10;i++) { cout《rand()《endl; } } 使用rand()函數(shù)獲取一定范圍內的一個隨機數(shù) 如果想要獲取在一定范圍內的數(shù)的話,直接做相應的除法取余即可。 例子2.1: [cpp] #include<iostream> using namespace std; int main() { for(int i=0;i<10;i++) { //產生10以內的整數(shù) cout《rand()%10《endl; } } 我們上面獲取的都是隨機的整數(shù),那么如何獲取小數(shù)呢?例如:我們可以先獲得10001以內的整數(shù)(0~10000),然后再用這個整數(shù)除以10000得到小數(shù)點后兩位的小數(shù)。 例子2.2: [cpp] #include<iostream> using namespace std; int main() { for(int i=0;i<10;i++) { cout《(rand()%10001)/10000.0《endl; } } 注意10000.0后面的有個小數(shù)點,表示結果為浮點數(shù)。 使用rand函數(shù)和time函數(shù) 我們上面已經可以獲取隨機數(shù)了,為什么還需要使用time函數(shù)呢?我們通過多次運行發(fā)現(xiàn),該程序雖然生成了10個隨機數(shù),但是這個10個隨機數(shù)是固定的,也就是說并不隨著時間的變化而變化。 這與srand()函數(shù)有關。srand()用來設置rand()產生隨機數(shù)時的隨機數(shù)種子。在調用rand()函數(shù)產生隨機數(shù)前,必須先利用srand()設好隨機數(shù)種子(seed), 如果未設隨機數(shù)種子, rand()在調用時會自動設隨機數(shù)種子為1.托福改分 上面的例子就是因為沒有設置隨機數(shù)種子,每次隨機數(shù)種子都自動設成相同值1 ,進而導致rand()所產生的隨機數(shù)值都一樣。 srand()函數(shù)定義 : void srand (unsigned int seed); 通常可以利用geypid()或time(0)的返回值來當做seed 如果你用time(0)的話,要加入頭文件#include<ctime> time(0)或者time(NULL)返回的是系統(tǒng)的時間(從1970.1.1午夜算起),單位:秒 例子3.1: [cpp] #include <iostream> #include <ctime> using namespace std; void main() { int a; a=time(0);//time(0)返回的是系統(tǒng)的時間(從1970.1.1午夜算起),單位:秒 cout《a《endl; } 例子3.2: [cpp] #include<iostream> #include<ctime> using namespace std; int main() { srand(time(0)); for(int i=0;i<10;i++) { //產生10以內的整數(shù) cout《rand()%10《endl; } } 這樣做的話,每次運行的結果就都不一樣了。
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() |
|
| Copyright © HAOSOLA | Powered by: 博客園 模板提供:滬江博客 |