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