#include
int rand(void);
void srand(unsigned int n);
(1) rand()函式會產生0至rand_max(其值大於等於36767)之間的偽隨機數(pseudorandom); 計算機不會產生絕對隨機的隨機數,計算機只能產生「偽隨機數」。其實絕對隨機的隨機數只是一種理想的隨機數,即使計算機怎樣發展,它也不會產生一串絕對隨機的隨機數。計算機只能生成相對的隨機數,即偽隨機數。
例如:
for(int i=0; i<10; i++)
編譯執行,發現每次執行程式產生的隨機數都是
一樣的; 計算機中產生隨機數,實際是採用乙個固定的數作為「種子」,在乙個給定的複雜演算法中計算結果,所以叫「
偽隨機數」。c語言中由於採用固定的序列作為"種子",所以每次執行所取的是同乙個數。
(2) 為了產生不同的隨機數列,需要srand函式來改變隨機數「種子」。 srand()函式使用自變數n作為種子,用來初始化隨機數產生器。只要把相同的種子傳入srand(),然後呼叫rand()時,就會產生相同的隨機數序列。因此,我們可以把 時間作為srand()函式的種子,就可以避免重複的發生。如果呼叫rand()之前沒有先呼叫srand(),就會導致每次執行產生的結果一樣。
例如:
srand((unsigned)time(null)); //呼叫time()函式前必須包含標頭檔案time.h
for(int i=0; i<10; i++)
該程式每次執行結果都不一樣,因為每次啟動程式的時間都不同。
(3)產生一定區間內的隨機數:
(a,b) (rand()%(b-a+1))+a-1 [a,b) (rand()%(b-a))+a
(a,b] (rand()%(b-a))+a+1 [a,b] (rand()%(b-a+1))+a
(4)產生偽隨機浮點數:
rand() / (double)(rand_max)
rand() /((double)(rand_max)/100
例如:
srand(time(null));
printf("%lf\n",(double)rand()/rand_max);
#include#include#includeint main()
//使用rand()函式產生0-20偽隨機數
printf("\n\nrand()函式產生1-20的偽隨機序列 :\n");
for (int i = 0; i < 10; i++)
//使用rand()函式產生a-b的偽隨機數a=3;b=42;(rand()%(b-a)+a)
printf("\n\nrand()函式產生3-42的偽隨機序列 :\n");
for (int i = 0; i < 10; i++)
//關於浮點數可以使用rand_max
//用時間作為種子,獲得隨機數
printf("\n\n獲取真隨機數:\n");
srand((unsigned)time(null));
for (int i = 0; i < 10; i++)
//採用時間作為種子是為了保證獲得不同的隨機序列
//我們會發現相同的種子可以獲得相同的隨機序列
printf("\n\n採用相同的種子獲得相同的時間序列:\n");
printf("\n序列1的值:\n");
srand(1);
for (int i = 0; i < 10; i++)
printf("\n序列2的值:\n");
srand(1);
for (int i = 0; i < 10; i++)
printf("\n序列3的值:\n");
c語言產生隨機數的方法
產生互不相同的六個整數數 include include include int main 產生互不相同的六個整數數 include include include int main 產生互不相同的六個整數數 include include include int main for int j 0 ...
C 語言產生隨機數的方法
在c語言中,rand 函式可以用來產生隨機數,但是這不是真真意義上的隨機數,是乙個偽隨機數,是根據乙個數,我們可以稱它為種子,為基準以某個遞推公式推算出來的一係數,當這系列數很大的時候,就符合正態公布,從而相當於產生了隨機數,但這不是真正的隨機數,當計算機正常開機後,這個種子的值是定了的,除非你破壞...
C語言產生隨機數的方法
在c語言中,rand 函式可以用來產生隨機數,但是這不是真真意義上的隨機數,是乙個偽隨機數,是根據乙個數,我們可以稱它為種子,為基準以某個遞推公式推算出來的一係數,當這系列數很大的時候,就符合正態公布,從而相當於產生了隨機數,但這不是真正的隨機數,當計算機正常開機後,這個種子的值是定了的,除非你破壞...