為什麼Srand 5 提供的種子一樣,但是rand 的值都不一樣

2022-03-04 14:55:27 字數 4690 閱讀 1184

1樓:

隨機數是這樣產生的 隨機數=fun(隨機種子);如果不加限制,隨機數應該是0到32768之間的某乙個數,在一次執行程式的過程中,這裡強調是一次,它通過這個fun函式產生的隨機數是不一樣的,這個fun函式是怎麼計算的咱不得而知,但是如果你第二次執行這個程式產生的隨機數跟第一次產生的五個隨機數是一樣的,隨機種子一樣產生的隨機數相同說的是在兩次執行程式時產生的隨機數相同,並不是說是在一次執行程式時產生的多個隨機數都相同,如果還不明白,可以深入看一下隨機數的產生機理,會對你有幫助!

2樓:匿名使用者

srand()提供種子,系統根據這個種子產生乙個偽隨機數的數列,注意是數列!!!難道你沒發現每次執行這段**產生的都是一樣的結果嗎。

3樓:

srand()的作用是生成乙個「種子」然後你再用rand()取隨機數的時候就用這個種子來經過計算得到乙個數字,在種子相同的情況下rand()的結果是一樣的,所以為了保證rand()的隨機性,經常用當前的時間作為種子,這樣就可以保證rand()每次的結...

為什麼每次執行rand的結果都一樣?

4樓:匿名使用者

#include

...srand(time(0));

rand();

--------------

上述**每秒變一次,如果想每1/1000000秒變一次,加分!!!!

5樓:格里程式設計辦公技巧

在使用rand前加randomize();

6樓:青鳥中關村專家

rand函式不是真正的隨機數生成器,而srand()會設定供rand()使用的隨機數種子。如果你在第一次呼叫rand()之前沒有呼叫srand(),那麼系統會為你自動呼叫srand()。而使用同種子相同的數呼叫 rand()會導致相同的隨機數序列被生成。

srand((unsigned)time(null))則使用系統定時/計數器的值作為隨機種子。每個種子對應一組根據演算法預先生成的隨機數,所以,在相同的平台環境下,不同時間產生的隨機數會是不同的,相應的,若將srand(unsigned)time(null)改為srand(tp)(tp為任一常量),則無論何時執行、執行多少次得到的「隨機數」都會是一組固定的序列,因此srand生成的隨機數是偽隨機數。

庫函式中系統提供了兩個函式用於產生隨機數:srand()和rand()。 原型為:

函式一:int rand(void);

返回乙個[0,rand_max]間的隨機整數。

函式二:void srand(unsigned seed);

引數seed是rand()的種子,用來初始化rand()的起始值。

但是,要注意的是所謂的「偽隨機數」指的並不是假的隨機數。其實絕對的隨機數只是一種理想狀態的隨機數,計算機只能生成相對的隨機數即偽隨機數。計算機生 成的偽隨機數既是隨機的又是有規律的 —— 一部份遵守一定的規律,一部份則不遵守任何規律。

比如「世上沒有兩片形狀完全相同的樹葉」,這體現到了事物的特性 —— 差異性;但是每種樹的葉子都有近似的形狀,這正是事物的共性 —— 規律性。從這個角度講,我們就可以接受這樣的事實了:計算機只能產生偽隨機數而不是絕對的隨機數。

系統在呼叫rand()之前都會自動呼叫srand(),如果使用者在rand()之前曾呼叫過srand()給引數seed指定了乙個值,那麼 rand()就會將seed的值作為產生偽隨機數的初始值;而如果使用者在rand()前沒有呼叫過srand(),那麼系統預設將1作為偽隨機數的初始 值。如果給了乙個定值,那麼每次rand()產生的隨機數序列都是一樣的

所以為了避免上述情況的發生我們通常用srand((unsigned)time(0))或者srand((unsigned)time(null))來 產生種子。如果仍然覺得時間間隔太小,可以在(unsigned)time(0)或者(unsigned)time(null)後面乘上某個合適的整數。

下面程式中srand((unsigned)time(null));/*播種子*/只呼叫了一次,對嗎?rand()函式每次的種子值一樣嗎?

7樓:風若遠去何人留

種子只需要設定一次就可以

在所有rand之前。

srand的作用是讓隨機數更隨機,一次就夠了。

srand函式和rand函式到底如何使用??

8樓:檀香透窗櫺

rand函式

函式標頭檔案:stdlib.h

函式定義:int rand(void)

函式功能:產生乙個隨機數

函式說明:

rand函式產生的隨機數嚴格意義講不是真正的隨機數,它裡面採用了線性同餘法計算出隨機數,所謂的線性同語法簡單來說就是使用了乙個公式。

該方法有個最大週期m,也就是說該方法實在一定的範圍內生成一串數字,不過這個m一般來說比較大,所以正常使用時一般看起來就是產生了隨機的數。

不過這個函式由於預設種子是1,所以每次產生的隨機數都是相同的,也就是說每次執行程式,產生的隨機數都是一樣的,失去了部分隨機的意義,所以一般會配合srand函式使用。

返回值: 返回0至rand_max之間的隨機整數值,rand_max的範圍最小在32767之間。若用unsigned int 雙位元組是65535,四位元組是4294967295的整數範圍。

且0-rand_max每個數字被選中的機率是相同的。

srand函式

函式標頭檔案:stdlib.h

函式定義:void srand(unsigned int seed)

函式功能:設定隨機數種子

函式說明:通常可以用getpid()(獲取當前程序的程序識別碼)或者time(null)(獲取當前系統的時間資訊)來充當種子,保持每次執行時種子是不一樣的。

擴充套件資料

當srand()的內容相同時,則在rand()後產生相同的隨機數列;所以當用time(null)來進行初始隨機數,根據時間來產生隨機數,這樣就能產生不同的。

呼叫方法是srand(gettickcount()),但是又不能在每次呼叫rand()的時候都用srand(gettickcount())來初始化。

因為現在計算機執行時間比較快,當連續呼叫rand()時,系統的時間還沒有更新,所以得到的隨機種子在一段時間內是完全相同的,因此一般只在進行一次大批隨機數產生之前進行一次隨機種子的初始化。

9樓:匿名使用者

就是隨機數種子,你不改變隨機數種子,用迴圈輸出隨機數,輸出來的隨機數其實是一模一樣的,你改變他,就是改變隨機數生成的規則,就會出來不一樣的隨機數,訊息來自華夏聯盟

10樓:匿名使用者

rand()函式的功能是產生乙個隨機數,不過他是需要乙個種子才能產生,每次執行程式的時候rand()

的預設種子回事1,如果部提供乙個隨機種子的話就會每次產生的隨機數值都是一樣的;srand()

函式的功能就是給rand()函式提供公隨機種子,一般在程式開始的時候用系統時間作為隨機數種子,這樣得到的隨機數就會不一樣

11樓:du瓶邪

在c語言裡面,兩個函式包含在標頭檔案裡面,c++裡面,標準庫(被包含於中).

srand函式是隨機數發生器的初始化函式。

原型:void srand(unsigned seed);

rand函式用來產生隨機數,當然是偽隨機數。

原型:int rand(void)

seed的作用:srand函式的作用是根據引數seed,設定乙個隨機起始點,而rand函式根據這個起始點,產生隨機數序列。預設的隨機種子為1。

如果隨機種子一樣,rand函式所產生的隨機序列也一樣。

因此,為使每次程式執行都能產生不同的隨機序列,每次都應產生乙個不同的種子引數。

c語言 n=rand()%5是什麼意思

12樓:殘害天地間

rand()函式會產生範圍為0至32767的隨機數,% 讓它與5求餘,變成0至4的隨機數,不過每次啟動程式產生的隨機數都相等,在用srand(unsigned int)輸入種子數後產生的才不一樣,一般都用的 srand((unsigned int)time(null)) 產生種子。(記得要包含 time.h 庫檔案)

13樓:17哥

用rand()是c語言的標準庫函式,意思是取乙個隨機數。因此,這句話的意思是:取乙個隨機數,然後用該隨機數對5取餘,最後把計算結果賦值給變數n。

14樓:匿名使用者

rand() 的意思是隨機產生乙個整數,rand()%5 指隨機產生乙個5以內的整數。

15樓:林夕沂蒙

rand()是產生隨機數的函式,%是求餘運算,所以n是rand()除5的餘數

16樓:

rand() 返回的隨機數 對於5 取模,結果儲存到n裡面

17樓:匿名使用者

rand() 用來隨機產生乙個整數

rand()%5 用來隨機產生乙個5以內的整數

18樓:匿名使用者

表示產生的數字在0~4之間

19樓:匿名使用者

你把rand()函式貼出來

20樓:偶是傳說

求隨機數的 乙個函式

為什麼種子在一定的條件下會發芽,為什麼種子會發芽?

因為活的沒有進入休眠期的種子只要有空氣。水。溫度還有一定的生長空間就會發芽呀。初一上冊人教版生物書有詳細的。因為水 氣溫都會造成一定的影響啊!種子為什麼會發芽?種子萌發是指種子從吸脹作用開始的一系列有序的生理過程和形態發生過程。種子的萌發需要適宜的溫度,一定的水分,充足的空氣。種子萌發時,首先是吸水...

草莓的種子為什麼在果肉的外邊,草莓的種子在哪裡?表面的哪些是嗎?為什麼會跑到外面去的?

這是由進化來的,草莓的種子長在表皮上,數量很多,外皮薄而脆,但是隻要皮不破,裡面的種子就不會被植物消化,利於傳播種子。播種育苗多在翌春進行,但也可在採集種子的當年7 8月進行。播種前先備好廣口泥瓦盆,填人細碎營養土,壓平,種子提前8 12小時浸泡,待膨脹後撒播在土壤表面,再用篩子均勻篩上厚度為0.2...

柳樹為什麼種子馬路邊,柳樹的種子是怎麼傳播的?

前人栽樹後人乘涼呀,只有種在馬路邊上,行人才會感到愜意 最近在接觸城市綠化方面工作,簡單講一講,一般我們說的柳樹大概 有垂柳,楓楊,金絲柳等。垂柳一般種植在河道兩側,與湖面映存,可以形成比較好的綠化效果,而垂柳分支點比較低,並且枝條垂吊,一般不會用在街道兩側作為行道樹,因為為阻擋車和行人通過。再來說...