內容來自《編程實戰寶典》
首先來看函數原型
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;
}
結果

也可以使用系統時間作為種子生成特定范圍內的隨機數
懶得舉例了。。
