學過別的高階語言的都知道,產生隨機數用的都是類似於random這樣的字元,c++也不例外,在c++中使用的是rand()函式,但是不同的是,如果在c++中只使用了例如 "int i;i=rand();"這樣,使用程式會發現每次得到的隨機數都是一樣的,據了解在c++中這樣做是為了方便除錯。如果要每次都長生不同的隨機數,我們則需要在c++中加上"srand(time(null));"這條語句,他的作用是以時間為種子,產生隨機數(我們都知道時間是在不斷變化的,但兩次獲取隨機數要在1秒後,否則數值還是一樣),下面看個例子。
該例子是:在1~100內生成乙個隨機數,並指定乙個數,顯示出該數在產生多少個數後出現。程式**如下:
#include
#define fnum 56 //要找的數為56
using namespace std;
int main()
int get_rand()
///所謂的「偽隨機數」指的並不是假的隨機數,這裡的「偽」是有規律的意思。其實絕對的隨機數只是一種理想狀態的隨機數,計算機只能生成相對的隨機數即偽隨機 數。計算機生成的偽隨機數既是隨機的又是有規律的 —— 一部份遵守一定的規律,一部份則不遵守任何規律。比如「世上沒有兩片形狀完全相同的樹葉」,這正點到了事物的特性 —— 規律性;但是每種樹的葉子都有近似的形狀,這正是事物的共性 —— 規律性。從這個角度講,我們就可以接受這樣的事實了:計算機只能產生偽隨機數而不是絕對的隨機數。
c++中的標準庫(包含在中)提供兩個幫助生成偽隨機數的函式:rand()和srand()。
函式一:int rand(void);
從srand(seed)中指定seed開始,返回乙個範圍介於[seed,rand_max(0x7fff))的隨機整數
函式二:void srand(unsigned seed);
引數seed是rand()的隨機種子,即用來初始化rand()的起始值。
系統在呼叫rand()之前都會自動呼叫srand(),如果使用者在rand()之前曾呼叫過srand()給引數seed指定了乙個值,那麼rand ()就會將seed的值作為產生偽隨機數的初始值;而如果使用者在rand()前沒有呼叫過srand(),那麼rand()就會自動呼叫srand (1),即系統預設將1作為偽隨機數的初始值。
由上述可得知,如果希望rand()在每次程式執行時產生的值都不一樣,必須給srand(seed)中的引數seed指定乙個變值,這個變值必須在每次 程式執行時都不一樣(比如到目前為止流逝的時間);如果我們給seed指定的是乙個定值,那麼每次程式執行的時候,rand()產生的隨機數都會一樣,只 不過這個值是[seed,rand_max(0x7fff))範圍中的乙個隨機取得的值。
舉幾個例子說明一下,假設我們要取得0~6之間的隨機數(不包括6本身):
程式一(沒有指定seed的值):
for(int i=0;i<10;i++)
執行程式四的時候,第一次輸出:0 1 5 4 5 0 2 3 4 2,第二次輸出:3 2 3 0 3 5 5 2 2 3,... ...每次的執行結果都不一樣,因為每次啟動程式時的時刻都不同。
關於time_t time(0)
time_t 被定義為長整型,它將返回從2023年1月1日零時零分零秒到現在所經歷過的時間,單位為秒。比如輸出 cout<關於ran_num=rand()%6
將rand()的返回值與6求模是必須的,這樣才能確保目的隨機數落在[0,6)之間,否則很可能會得到乙個非常巨大的數值 (rand_max一般為32767)。乙個通用的公式是:要想取得[a,b)之間的隨機整數,使用(rand()%(b-a))+ a,結果包含 a 而不含 b 。
C 隨機數用法
隨機數分布 隨機數分布一般用到均勻分布uniform int distributionu m,n 和uniform real distributionu x,y 生成指定型別的,在給定範圍內的值。其中m或x是可以返回的最小值 n或y是最大值。預設的m為 0 且n為intt可表示的最大值。預設x為 0...
C 隨機數的用法
學過別的高階語言的都知道,產生隨機數用的都是類似於random這樣的字元,c 也不例外,在c 中使用的是rand 函式,但是不同的是,如果在c 中只使用了例如 int i i rand 這樣,使用程式會發現每次得到的隨機數都是一樣的,據了解在c 中這樣做是為了方便除錯。如果要每次都長生不同的隨機數,...
C 隨機數的用法
學過別的高階語言的都知道,產生隨機數用的都是類似於random這樣的字元,c 也不例外,在c 中使用的是rand 函式,但是不同的是,如果在c 中只使用了例如 int i i rand 這樣,使用程式會發現每次得到的隨機數都是一樣的,據了解在c 中這樣做是為了方便除錯。如果要每次都長生不同的隨機數,...