C/C++生成隨機數需要用到rand()函數和srand()函數,C/C++內沒有在一個范圍內生成隨機數的自帶函數。
1.rand()函數
功能:隨機發生器
所在頭文件:stdlib.h
rand()返回隨機數值的范圍在0~RAND_MAX之間。0~RAND_MAX每個數字被選中的概率相同。
注:rand()產生的是偽隨機數字,每次執行時的結果是相同的。Ctrl+Shift+F5時每次產生的結果是一樣的。
#include <iostream> #include"stdlib.h" using namespace std; int main() { double x; x = rand(); x = x/RAND_MAX; cout<<x<<endl; return 1; }
2.srand()函數
為了避免每次生成固定的隨機數,引進srand()函數。
功能:初始化隨機數發生器
用法:srand(unsigned int seed)
所在頭文件:stdlib.h
srand()是用來設置rand()產生隨機數時的隨機種子。參數seed必須是整數,如果每次seed都設置相同的值,rand()所產生的隨機數值每次也都一樣。
注:要每次生成的隨機數不一樣,用srand()初始化,為了方便,可以利用srand((unsigned) time(NULL))的方法,產生不同的隨機種子。
#include <iostream> #include <time.h> #include"stdlib.h" using namespace std; int main() { double x; srand((unsigned)time(NULL)); //srand(3) x = rand(); x = x/RAND_MAX; cout<<x<<endl; return 1; }
3.在一定范圍內生成隨機數的通用公式
要取得[a,b)的隨機整數,使用(rand() % (b-a))+ a;
要取得[a,b]的隨機整數,使用(rand() % (b-a+1))+ a;
要取得(a,b]的隨機整數,使用(rand() % (b-a))+ a + 1;
通用公式:a + rand() % n;其中的a是起始值,n是整數的范圍。
要取得a到b之間的隨機整數,另一種表示:a + (int)b * rand() / (RAND_MAX + 1)。
要取得0~1之間的浮點數,可以使用rand() / double(RAND_MAX)。