C 隨機數 rand和srand函式總結

2021-10-09 09:52:28 字數 1991 閱讀 1037

一、rand和srand函式

在c語言的庫函式中,系統提供了兩個用於產生隨機數的函式:srand()和rand() 。

rand()函式原型如下:

int rand(void);
void表示它不接受任何引數,返回值是在[0,rand_max]之間的隨機整數。

srand()函式原型:

void srand(unsigned seed);
引數的變數型別為unsigned,表示seed只能儲存非負整數,這樣就避免了不會將複數傳遞給srand 。

seed是乙個用於儲存種子的變數,,用來初始化srand()的起始值。

二、函式的呼叫情況

rand函式並不是真正的隨機數生成器,它所產生的其實是根據演算法生成的隨機數,即在一定範圍具備差異性,但當樣本足夠大時,又具有規律性。

在呼叫rand函式前,需要呼叫srand來提供隨機數種子。如果在第一次呼叫rand函式時沒有呼叫srand函式,那麼系統將會自動呼叫srand(),這時rand函式每次執行產生的將會是相同的隨機數序列。

如下圖所示,這個**無論執行多少次,產生的都必然是相同的五個隨機數。

#include 

#include

using namespace std;

int main()

return0;

}

41

18467

6334

26500

19169

同樣,如果我們在rand()之前呼叫srand函式,給引數seed指定了乙個固定的值,那麼每次rand()產生的隨機數序列也將是一樣的。

#include 

#include

using namespace std;

int main()

return0;

}

71

16899

3272

13694

13697

由此可見,如果希望rand函式每次執行都產生一組不同的隨機數,辦法就是讓傳遞給srand函式的引數seed(即種子的值)每次都不相同。

呼叫time函式能為我們提供不同的種子值。time返回從2023年1月1日起至現在逝去的秒數,標頭檔案是time.h

#include 

#include

#include

using namespace std;

int main()

return0;

}

// 第一次

1219

23413

8158

24980

30285

// 第二次

1330

28411

25716

23933

20532

三、限制隨機數範圍

1.隨機生成1至某個最大值max之間的整數

num = rand()%max+1
**示例:

#include 

#include

#include

using namespace std;

int main()

2.隨機生成某個最小值min至某個最大值max之間的整數

num = rand()%(max-min+1)+min
**示例:

#include 

#include

#include

using namespace std;

int main()

參考資料:

rand 和 srand產生隨機數

在c語言中,rand 函式可以用來產生隨機數,但是這不是真真意義上的隨機數,是 乙個偽隨機數,是根據乙個數,我們可以稱它為種子,為基準以某個遞推公式推算出來的一係數,當這系列數很大的時候,就符合正態公布,從而相當於產生了隨機 數,但這不是真正的隨機數,當計算機正常開機後,這個種子的值是定了的,除非你...

C 利用srand和rand產生隨機數

他人部落格,時間久了,忘記 轉的了。以後發現再補充出處。產生一到十的十個隨機數 include include include include using namespace std define max 10 int main int main srand unsigned time null f...

C 中用srand 和rand 產生隨機數

一 c 中不能使用random 函式 random函式不是ansi c標準,不能在gcc,vc等編譯器下編譯通過。但在c語言中int random num 可以這樣使用,它返回的是0至num 1的乙個隨機數。可改用c 下的rand函式來實現。1 c 標準函式庫提供一隨機數生成器rand,返回0 ra...