C++學習筆記:隨機數函數:srand()函數和rand()函數

因爲rand的內部實現是用線性同餘法(如果不懂你可以去網上查查)做的,他不是真的隨機數,只不過是因爲其週期特別長,所以有一定的範圍裏可看成是隨機的,rand()會返回一隨機數值,範圍在0至RAND_MAX 間。在調用此函數產生隨機數前,必須先利用srand()設好隨機數種子,如果未設隨機數種子,rand()在調用時會自動設隨機數種子爲1。rand ()產生的是假隨機數字,每次執行時是相同的。若要不同,以不同的值來初始化它.初始化的函數就是srand()

頭文件:<cstdlib>

srand(unsigned int seed) --seed表示隨機數種子

rand() 

不顯示調用srand()的話,將默認爲srand(1)。

如何引入變化的種子呢?一般來說,我們會使用time(NULL)或time(0)來表示變化的種子,time(0)的返回的是從1970 UTC Jan 1 00:00到當前時刻的秒數,爲unsigned int類型。當我們在不同時刻運行程序時,就會有不同的隨機數種子,因此就可以得到不同的結果

//srand rand
//rand()%(n-m+1)+m 生成[m,n]之間的隨機數 
#include<iostream>
#include<cstdlib> //函數rand srand 
#include<ctime>  //函數time() 

using namespace std;

int main() {
	int i,k,num;
	
	//不顯示調用srand()的話,將默認爲srand(1)
	
	//每次調用的時候seed應該不同 否則不管什麼時候調用都返回的隨機數相同
	//避免每次手動改變seed值,所以選擇電腦的當前時間爲seed 
	srand(time(0));
	
	for(k=0; k<4; k++) {
		cout<<"第"<<k<<"次:"<<endl;
		//srand(time(0));//若這個語句在循環內,則每次隨機數的起點都一樣;得到的隨機數也相同 
		for(i=0; i<5; i++) {
			num=rand();
			cout<<num<<endl;
		}
	}

	return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章