C++用rand()和srand()生成隨機數


內容來自《編程實戰寶典》

首先來看函數原型

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;
}

  

結果

 

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

  懶得舉例了。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM