當前位置:首頁 » 編程語言 » c語言隨機數種子用來幹嘛
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言隨機數種子用來幹嘛

發布時間: 2023-02-18 16:44:29

A. c語言中的srand的用法,什麼是種子

高級語言中帶的隨機數產生函數是偽隨機數,偽隨機數的意思是並不是真正意義上的隨機數,而是通過某種運算或者在某種程度上產生隨機的效果。 由於計算機是一種圖靈機,相同的輸入必定產生相同的輸出。所以,我們必須在C語言隨機數的基礎上加上某種比較隨機的條件,簡稱種子。這樣產生的隨機數才會看起來比較隨機,而不會每次運行程序的時候是一樣的了。 比如光用rand,產生5個隨機數,每次運行程序可能結果都是一樣的 可能都是4 9 3 8 7 但是使用了當前系統時間為種子的話,每次運行結果就可能不一樣了 假設第一次運行是5 1 0 3 9 第二次運行可能就是8 7 1 3 4

B. C中,rand()是什麼意思,有什麼作用

rand()是表示產生隨機數的一種函數,多應用於循環語句當中進行判斷。

比如說n=rand();

switch(n)

{case1.......

case2......}

這些都是都可能被執行的,因為數字是隨機的。

(2)c語言隨機數種子用來幹嘛擴展閱讀:

注意

rand()函數可以用來產生隨機數,但是這不是真真意義上的隨機數,是一個偽隨機數,是根據一個數,我們可以稱它為種了,為基準以某個遞推公式推算出來的一系數,

當這系列數很大的時候,就符合正態公布,從而相當於產生了隨機數,但這不是真正的隨機數,當計算機正常開機後,這個種子的值是定了的,除非你破壞了系統,為了改變這個種子的值,C提供了 srand()函數,它的原形是void srand( int a) ,

功能是初始化隨機產生器既rand()函數的初始值,即使把種子的值改成a; 從這你可以看到通過sand()函數,可以產生可以預見的隨機序列。

參考資料來源:rand函數-網路

C. C語言中產生隨機數利用到時間種子,什麼原理謝謝啦。

在C語言中取隨機數所需要的函數是:

int rand(void);
void srand (unsigned int n);
rand()函數和srand()函數被聲明在頭文件stdlib.h中,所以要使用這兩個函數必須包含該頭文件:

#include <stdlib.h>

rand()函數返回0到RAND_MAX之間的偽隨機數(pseudorandom)。RAND_MAX常量被定義在stdlib.h頭文件中。其值等於32767,或者更大。

srand()函數使用自變數n作為種子,用來初始化隨機數產生器。只要把相同的種子傳入srand(),然後調用rand()時,就會產生相同的隨機數序列。因此,我們可以把時間作為srand()函數的種子,就可以避免重復的發生。如果,調用rand()之前沒有先調用srand(),就和事先調用srand(1)所產生的結果一樣。

D. C語言里的「種子植」是啥意思呀。

是【種子值】吧?

這個一般是針對函數來說的,假設你寫了一個函數,會根據某個值(可以假設為變數a)的不同而返回不同的結果或執行不同的動作,那麼該值就是這個函數的種子值。

舉個例子吧,srand函數和rand函數。

rand函數返回一個在零到RAND_MAX之間的偽隨機整數,假設我們不給這個函數的種子值,那你會發現每次執行這個函數的返回結果都是一樣的。但是如果我們給種子值,srand( time(NULL) );你會發現每次執行這個函數的結果都不同了,因為每次都給了不同的種子值。

下面的代碼你可以試著多運行幾次,你會發現每次的結果都不同,然後把srand( time(NULL) );這行去掉,你會發現每次結果都相同,因為沒有給rand函數設種子值

srand(time(NULL));
for(i=0;i<10;i++)
printf("Randomnumber#%d:%d ",i,rand());

E. C語言編程中生成隨機數的初級教程

幾個概念

隨機數:數學上產生的都是偽隨機數,真正的隨機數使用物理方法產生的。

隨機數種子:隨機數的產生是由算術規則產生的,srand(seed)的隨機數種子不同,rand()的隨機數值就不同,倘若每次的隨機數種子一樣,則rand()的值就一樣。所以要產生隨機數,則srand(seed)的隨機數種子必須也要隨機的。

用srand()產生隨機數種子

原型:void srand ( unsigned int seed );

作用是設置好隨機數種子,為了讓隨機數種子是隨機的,通常用time(NULL)的值來當seed。

time()用於隨機數種子

函數原型:time_t time ( time_t * timer );

time()函數表示返回1970-1-1 00:00:00 到當前時間的秒數。

用的時候這樣:srand(unsigned(time(NULL)));例如產生1~10之間的隨機整數

#include#includeint main(){ srand(time(NULL)); for(int i=0;i < 10;i++) { int randValue=rand()%10; }}

上面的程序中要注意srand是在for循環外面的,如果把srand放到for循環裡面,則每次產生的隨機數都相同。

用rand()產生隨機數

原型:int rand ( void );

作用是產生一個隨機數,當然隨機數是有范圍的,為0~RAND_MAX之間,隨機數與隨機數種子有關。具體來說是,在產生隨機數 rand()被調用的時候,它會這樣執行:

如果用戶之前調用過 srand(seed)的話,他會重新調用一遍 srand(seed)以產生隨機數種子;

如果發現沒有調用過 srand(seed)的話,會自動調用 srand(1)一次。

如果調用srand(seed)產生的隨機數種子是一樣的.話(即seed的值相同),rand()產生的隨機數也相同。

所以,如果希望rand()每次調用產生的值都不一樣,就需要每次調用srand(seed)一次,而且seed不能相同。這里就是經常採用time(NULL)產生隨機數種子的原因。

C語言中可以使用rand()函數來生成一個從0到RAND_MAX的uniform分布。基於這個函數,我們可以構造出一些特定的隨機數生成器來滿足我們的需求。

(一)0到1的uniform分布:

//generate a random number in the range of [0,1]double uniform_zero_to_one(){ return (double)rand()/RAND_MAX;}

(二)任意實數區間的uniform分布:

//generate a random real number in [start,end]double uniform_real(double start,double end){ double rate=(double)rand()/RAND_MAX; return start+(end-start)*rate;}

(三)任意整數區間的uniform分布:

//generate a random integer number in [start,end)int uniform_integer(int start,int end){ int base=rand(); if(base==RAND_MAX) return uniform_integer(start,end); int range=end-start; int remainder=RAND_MAX%range; int bucket=RAND_MAX/range; if(base<RAND_MAX-remainder) return start+base/bucket; else return uniform_integer(start,end);}

這個函數要特別說明一下,平常時候我們都是用rand()%n來生成0到n-1的隨機數,但是按這種方法生成的分布並不是uniform的,另外由於RAND_MAX只有32767,因此要生成比這個數更大的隨機數需要另外想辦法,理論上可以直接用0到1的uniform分布直接放縮,但實際效果不好。這里給出一種移位方式的實現。

(四)32bits的隨機數

//generate a random 32 bits integer number int rand32(){ return ((rand()<<16)+(rand()<<1)+rand()%2);}

有了32bits的隨機數生成方法,就可以構造32bits范圍內的隨機整數區間了,方法和之前16bits的情況一樣。

(五)32bits范圍內的隨機整數區間

//generate a random 32bits integer number in [start,end) int uniform_integer_32(int start,int end){ int base=rand32(); if(base==RAND32_MAX) return uniform_integer_32(start,end); int range=end-start; int remainder=RAND32_MAX%range; int bucket=RAND32_MAX/range; if(base<RAND32_MAX-remainder) return start+base/bucket; else return uniform_integer_32(start,end);}

這里RAND32_MAX定義為0x7fffffff。

除此之外,利用rand()函數構造任意分布的隨機數也是個值得探討的問題。

理論上可以通過(0,1)的uniform分布,加上標准采樣方法(sampling)獲得。

F. c語言隨機數代碼中srand是干什麼用的

srand要獲取一個隨機種子,最好是用一個時刻在變的量當他的種子,一句話,獲取隨機數要用rand()這個函數,而光用rand()所獲取的隨機數事實上並不隨機,因為隨機種子默認不變的,srand這個函數就是能提供這個隨機種子的初始化函數,記住用法就行:srand(seek);rand();這兩個一直伴著走就行,別分開,

G. c語言中的隨機數種子

首先告訴你隨機數種子是什麼東東.
電腦不是人,不能隨便就憑空想像一個數字出來。所謂的隨機數,不過是通過一個函數經過計算出來的數字而已。 因此,隨機數不過是函數計算出來的值,而一個函數要得到這個值Y,肯定需要一個輸入X,所以X就是那個種子。
簡單點說 Y = function(x);
隨機數=Y,隨機數種子=X。
第二,rand()%Y+1是什麼意思。 首先你要弄懂%是什麼意思,是取余運算。
舉個例子 10 % 3 = 1 10 % 5 = 0;就是得到余數。
余數的范圍永遠是從 0到被除數-1 不可能等於被除數。
所以rand()%Y的意思就是 得到一個隨機數,這個隨機數的范圍是從0到Y-1
再加1當然就是把這個隨機數的范圍確定在0到Y之間了
一般rand()%某數 都是用來指定取某個范圍內的隨機數的

這個for循環不過就是取列印10個0-99之間的隨機數而已..

如果還不明白hi我

H. c語言!!!隨機數種子

原型:void srand(unsigned int seed)。種子是無符號整型。
使用(unsigned)time(NULL)作為種子可以使每次運行的種子都不同,產生的隨機序列也不同。自己指定一個數作為種子,除非通過某種方法使每次程序運行時該數的值都不同,否則將始終產生相同的隨機序列。

I. 誰能幫我解釋一下Random(long seed)裡面的seed是干什麼用的, 怎麼用

seed 是隨機的種子

如果不用的話,直接用Random()這樣的話,每次生成的隨機數就會

在一個范圍內近似相等,所以隨機效果不好

如果用個種子的話,每次隨機的數據就會大不相同

打個比方說吧

在生物學中

一個純合子,就是一個純種子,如果它老是和自己產的種子授粉

這樣它N代都是純合子

現在如果我給它一個其它的種子的粉呢?

它們N代後是不是純的呢?

呵呵,現在應該明白了吧

當然用法嘛

就和Random()用法一樣,只不過是兩種不同的構造函數

J. C語言中的隨機數種子幹嘛用的

防止每次隨機的數與之前的相同。