一、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...