內容來自《編程實戰寶典》
首先來看函數原型
int rand(void); void srand(unsigned int seed);
1、rand()函數不需要任何參數,直接返回一個隨機數,注意,這個隨機數是有范圍的,在0~RAND_MAX之間,RAND_MAX一般最小取值為32767,其具體值在頭文件stdlib.h中進行定義
2、srand需要一個無符號整形數作為參數(種子),如果作為種子的無符號數相同,那么獲取的隨機數也就相同,注意:srand()必須配合rand()使用才能有效果
下面是用法
#include <iostream> using namespace std; int main() { int i; cout << "測試rand()函數" << endl; cout << "隨機數最大值RAND_MAX為:" << RAND_MAX << endl; for (i = 0; i < 3;i++) { cout << "num = " << rand() << endl; } cout << "測試srand()函數" << endl; cout << "使用不同的種子生成隨機數" << endl; for (i = 0; i < 3;i++) { srand(i); cout << "num = " << rand() << endl; } cout << "使用相同的種子生成隨機數" << endl; for (i = 0; i < 3;i++) { srand(2); cout << "num = " << rand() << endl; } }
以下是結果
可以看出,在使用srand()函數時,如果使用相同的種子,那么最終用rand()函數所生成的隨機數也相同
特定隨機數的生成
為了使rand()函數生成的隨機數在一定的范圍內,可以使用如下表達式
a + rand() % n
使用上述表達式生成的隨機數的范圍在a ~ (a + n)之間,其中a為生成的隨機數的最小值,a + n - 1為最大值。
例子如下
#include <iostream> using namespace std;
int main() { cout << "生成特定范圍內的隨機數:" << endl; cout << "生成5 到 15 之間的隨機數" << endl; for (int i = 0; i < 5;i++) { cout << "num = " << 5 + rand() % 10 << endl; //可生成5,6,7,...,14,不包含15 } }
結果如下
使用系統時間作為種子生成隨機數
為了讓隨機數更像隨機數,降低人為因數的干擾,可以使用系統當前時間作為種子產生隨機數
#include <iostream> #include <time.h> //時間函數time()的頭文件 #include <windows.h> //暫停函數Sleep()的頭文件 using namespace std; int main() { cout << "使用系統時間作為種子生成隨機數:" << endl; for (int i = 0; i < 5;i++) { Sleep(1000); //暫停一秒,避免因程序執行過快,5次循環中系統時間未發生變化,導致產生的隨機數也相同 srand((unsigned)time(NULL)); cout << "num = " << rand() << endl; } return 0; }
結果
也可以使用系統時間作為種子生成特定范圍內的隨機數
懶得舉例了。。