c\c++ 随机数函数
(1) rand()函數(shù):
???原型: int rand(void)
???功能: 產(chǎn)生從?[0,RAND_MAX]?之間的隨機數(shù),RAND_MAX為系統(tǒng)定義的宏, 32位機器上大小為32767。
???頭文件: stdlib.h或者iostream
?
(2)srand()函數(shù):
???原型: void srand(unsigned seed)
???功能: 產(chǎn)生隨機數(shù)的起始發(fā)生數(shù)據(jù),和rand函數(shù)配合使用
???頭文件: stdlib.h或者iostream???time.h
???比如以當前時間作為起始發(fā)生數(shù)據(jù):srand( (unsigned)time(0) );
?
(3) randomize()函數(shù):
???原型:?void randomize(void)
???功能: 通過time函數(shù)來初始化隨機數(shù)發(fā)生器,和srand( (unsigned)time(0) )語句功能相同
???頭文件: stdlib.h???time.h
?
(4)random()函數(shù)
?????原型:int random(int num)
?????功能:random函數(shù)返回一個0~num-1之間的隨機數(shù). random(num)是在stdlib.h中的一個宏定義
?????頭文件:stdlib.h
?
(5)產(chǎn)生[minNum, maxNum]范圍內(nèi)的整數(shù)隨機數(shù)
1 //產(chǎn)生[minNum, maxNum]的隨機數(shù) 2 default_random_engine generator(time(0)); 3 int myrand(int minNum, int maxNum) 4 { 5 std::uniform_int_distribution<int> distribution(minNum, maxNum); 6 return distribution(generator); 7 }?
?
注意幾點:
1 從vc6.0以后randomize()和random()都已經(jīng)不能用了,完全由srand()和rand()代替。但是在tc和c++ builder中還是可以用的(親自測試),此時randomize、srand 和 random、rand兩組之間可以任意組合,效果均沒差別
2 如果沒有初始化隨機數(shù)發(fā)生器,程序每次重新運行產(chǎn)生的隨機數(shù)都相同
3 若循環(huán)產(chǎn)生隨機數(shù),srand(time(0))不要放在循環(huán)內(nèi)部,因為time()的精度是秒,如果兩次time()之間程序沒有超過一秒,其返回值是一樣的,srand(time(0))設(shè)置的隨機種子也就一樣,產(chǎn)生的隨機數(shù)也就一樣
?
用法:(rand和srand比較通用,以下用它們舉例)
1 產(chǎn)生[0,1]的小數(shù):??rand()*1.0/RAND_MAX
2 產(chǎn)生[0,x]的整數(shù):??rand()%(x+1)
3?產(chǎn)生[x,y]的整數(shù):??rand()%(Y-X+1)+X(由于rand()產(chǎn)生的隨機數(shù)最大為32767,因此如果范圍內(nèi)包括比32767大的數(shù),要用 rand()*(y-x)/RAND_MAX +X ?)
#include<stdlib.h>#include<stdio.h>#include<time.h>int main(){srand((unsigned)time(0)); //srand放在循環(huán)外面for(int i=1;i<=10;i++)printf("%d ",rand()1);}?【版權(quán)聲明】轉(zhuǎn)載請注明出處?http://www.cnblogs.com/TenosDoIt/archive/2013/04/15/3022029.html
轉(zhuǎn)載于:https://www.cnblogs.com/TenosDoIt/archive/2013/04/15/3022029.html
總結(jié)
以上是生活随笔為你收集整理的c\c++ 随机数函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java经典算法四十题
- 下一篇: merge语句