C++ 生成隨機數 srand()和rand()


1. rand()

rand(產生隨機數)
表頭文件: #include<stdlib.h>
定義函數 :int rand(void)

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

返回值:
返回 0 至 RAND_MAX 之間的隨機整數值,RAND_MAX 的范圍最少是在 32767 之間(int),即雙字節(16位數)。
若用unsigned int 雙字節是 65535,四字節是 4294967295 的整數范圍。
0~RAND_MAX 每個數字被選中的機率是相同的。

a、rand()不需要參數,它會返回一個從0到最大隨機數的任意整數,最大隨機數的大小通常是固定的一個大整數。

b、如果你要產生0~99這100個整數中的一個隨機整數,可以表達為:int num = rand() % 100; 

     這樣,num的值就是一個0~99中的一個隨機數了。

c、如果要產生1~100,則是這樣:int num = rand() % 100 + 1;  

d、總結來說,可以表示為:int num = rand() % n +a;

     其中的a是起始值,n-1+a是終止值,n是整數的范圍。

e、一般性:rand() % (b-a+1)+ a ;    就表示  a~b 之間的一個隨機整數。

f、若要產生0~1之間的小數,則可以先取得0~10的整數,然后均除以10即可得到“隨機到十分位”的10個隨機小數。

     若要得到“隨機到百分位”的隨機小數,則需要先得到0~100的10個整數,然后均除以100,其它情況依 此類推。

g、通常rand()產生的隨機數在每次運行的時候都是與上一次相同的,這樣是為了便於程序的調試。

     若要產生每次不同的隨機數,則可以使用srand( seed )函數進行產生隨機化種子,隨着seed的不同,就能夠產生不同的隨機數。

h、還可以包含time.h頭文件,然后使用srand(time(0))來使用當前時間使隨機數發生器隨機化,這樣就可以保證每兩次運行時可以得到不同的隨機數序列,同時這要求程序的兩次運行的間隔超過1秒。

2. srand()


功能:初始化隨機數發生器,用以生成種子數,每次種子數應為整數,配合rand()函數使用。

srand(time(0)),基於當前的時間生成種子。(include(ctime))

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM