C 中用srand 和rand 產生隨機數

2021-07-02 14:42:48 字數 1468 閱讀 2176

一、c++中不能使用random()函式

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

1、c++標準函式庫提供一隨機數生成器rand,返回0-rand_max之間均勻分布的偽隨機整數。 rand_max必須至少為32767。rand()函式不接受引數,預設以1為種子(即起始值)。 隨機數生成器總是以相同的種子開始,所以形成的偽隨機數列也相同,失去了隨機意義。(但這樣便於程式除錯)

2、c++中另一函式srand(),可以指定不同的數(無符號整數變元)為種子。但是如果種子相同,偽隨機數列也相同。乙個辦法是讓使用者輸入種子,但是仍然不理想。

3、 比較理想的是用變化的數,比如時間來作為隨機數生成器的種子。 time的值每時每刻都不同。所以種子不同,所以,產生的隨機數也不同。

// c++隨機函式(vc program)

#include

#include

#include

using namespace std; 

#define max 100 

int main(int argc, char* argv) 

{ srand( (unsigned)time( null ) );//srand()函式產生乙個以當前時間開始的隨機種子.應該放在for等迴圈語句前面 不然要很長時間等待

for (int i=0;i<10;i++) 

cout*/   

#definerand_max0x7fffu   

這個是bcc55中的定義,說明這個整數的最大數是0x7fffu,u代表unicode編碼。

這樣,如果你要產生0~10的10個整數,可以表達為:

int n = rand() % 11; 

這樣,n的值就是乙個0~10的隨機數,如果要產生1~10,則是這樣:

int n = 1 + rand() % 10; 

總結來說,可以表示為:

a + rand() % n

其中的a是起始值,n是整數的範圍。 

a + rand() % (b-a+1) 就表示 a~b之間的乙個隨機數

若要0~1的小數,則可以先取得0~10的整數,然後均除以10即可得到隨機到十分位的10個隨機小數,若要得到隨機到百分位的隨機小數,則需要先得到0~100的10個整數,然後均除以100,其它情況依

此類推。

通常rand()產生的隨機數在每次執行的時候都是與上一次相同的,這是有意這樣設計的,是為了便於程式的除錯。若要產生每次不同的隨機數,可以使用srand( seed )函式進行隨機化,隨著seed的不同,就能夠產生不同的隨機數。

如大家所說,還可以包含time.h標頭檔案,然後使用srand(time(0))來使用當前時間使隨機數發生器隨機化,這樣就可以保證每兩次執行時可以得到不同的隨機數序列(只要兩次執行的間隔超過1秒)。 

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

產生隨機函式srand函式和rand函式的使用

srand 初始隨機數發生器 rand 隨機數發生器 當srand 的內容相同時,則在rand 後產生相同的隨機數列 所以當用time null 來進行初始隨機數,根據時間來產生隨機數,這樣就能產生不同的。呼叫方法是srand gettickcount 但是又不能在每次呼叫rand 的時候都用sra...