當前位置:生活全書館 >

綜合知識

> srand函式和rand函式到底如何使用 srand函式怎麼用

srand函式和rand函式到底如何使用 srand函式怎麼用

1.srand函式和rand函式到底如何使用

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

srand函式怎麼用 srand函式和rand函式到底如何使用

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

原型:void srand(unsigned seed);

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

原型:int rand(void)

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

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

2.請舉例講講vc中srand函式怎麼用

先從隨機數的原理談起.

計算機的隨機數都是由偽隨機數,即是由小M多項式序列生成.產生每個小序列都有一個初始值,即隨機種子.

srand()產生隨機種子.

rand()產生隨機數

要保證計算機產生不相同的隨機數,應保證它們的隨機種子是不一樣的.

srand( (unsigned)time( NULL ) );

就是以時間做為隨機種子,因為每次你執行的時間總是不一樣的.

補充一點是小M多項式序列的周期是65535,即每次利用一個隨機種子生成的隨機數的週期是65535,即你取得65535個隨機數後它們又重複出現了.

int nRand;

srand( (unsigned)time( NULL ) );

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

{

nRand=rand();

if(i==1||i==65536)

printf("%drn",nRand);

}

3.C語言srand和rand函式怎麼用

rand()函式,一般根srand()函式一起用。它們在一起,作用是:產生一個隨機數。

通常格式為:

srand ( (unsigned) time (NULL) );

a=rand()%x; //a,x,均為整型變數,其中,x在之前應被賦值。

srand函式裡面的unsigned也可以換成其它的。例如:int之類的資料型別,但結果也會有相應的變化。

通過rand函式產生隨機數以後,用%x來限定它的範圍。即:0<=a<x。

其原理是:用那個隨機數,去除以x,留下所得餘數,作為最終結果。

4.srand()在C++中怎麼用

srand()

功能:初始化隨機數發生器

用法: void srand(unsigned int seed)

所在標頭檔案: stdlib.h

srand()用來設定rand()產生隨機數時的隨機數種子。引數seed必須是個整數,如果每次seed都設相同值,rand()所產生的隨機數值每次就會一樣。

計算機的隨機數都是由偽隨機數,即是由小M多項式序列生成的,其中產生每個小序列都有一個初始值,即隨機種子。(注意: 小M多項式序列的週期是65535,即每次利用一個隨機種子生成的隨機數的週期是65535,當你取得65535個隨機數後它們又重複出現了。)

我們知道rand()函式可以用來產生隨機數,但是這不是真正意義上的隨機數,是一個偽隨機數,是根據一個數(我們可以稱它為種子)為基準以某個遞推公式推算出來的一系列數,當這系列數很大的時候,就符合正態公佈,從而相當於產生了隨機數,但這不是真正的隨機數,當計算機正常開機後,這個種子的值是定了的,除非你破壞了系統。

5.C語言 srand()函式

直接用rand() 產生的一套隨機數是固定不變的。

也就是說 這次 產生了 一套 例如有 10 個數 a[0],a[1],..a[9]

下次 再跑這個程式 產生 一套 10 個數 b[0],b[1],..b[9]

得到的 b[0]==a[0]; b[1]==a[1];。.b[9]==a[9];

用 srand() 生成新種子,那麼 新的一套 和 老 的 一套 隨機數 次序就 不一樣了,數值也不完全一樣了,這樣模擬 的 偽隨機 就會 接近 真隨機。

6.srand和rand函式怎麼用,麻煩寫個簡短的c++給我看看

首先我們要對rand&srand有個總體的看法:srand初始化隨機種子,rand產生隨機數,下面將詳細說明。

rand(產生隨機數)

表頭檔案: #include

定義函式 :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每個數字被選中的機率是相同的。

範例:

/* 產生介於1 到10 間的隨機數值,此範例未設隨機數種子,完整的隨機數產生請參考

srand()*/

#include

main()

{

int i,j;

for(i=0;i

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

函式說明:

srand()用來設定rand()產生隨機數時的隨機數種子。引數seed必須是個整數,通常可以利用geypid()或time(0)的返回值來當做seed。如果每次seed都設相同值,rand()所產生的隨機數值每次就會一樣。

範例

/* 產生介於1 到10 間的隨機數值,此範例與執行結果可與rand()參照*/

#include

#include

main()

{

int i,j;

srand((int)time(0));

for(i=0;i

#include

#include

int main( void )

{

int i;

// Seed the random-number generator with current time so that

// the numbers will be different every time we run.

//

srand( (unsigned)time( NULL ) );

// Display 10 numbers.

for( i = 0; i

7.Rand函式和srand函式在keil中怎麼用,能給我舉個例子嗎

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

庫函式中系統提供了兩個函式用於產生隨機數: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)*10)

另外,關於time_t time(0):time_t被定義為長整型,它返回從1970年1月1日零時零分零秒到目前為止所經過的時間,單位為秒。

srand()、rand()用法舉例:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

#include

#include

#include

voidmain()

{

inti,j;

srand((int)time(0));

for(i=0;i{

j=1+(int)(10.0*rand()/(RAND_MAX+1.0));

printf("%d",j);

}

}

標籤: rand srand 函式
  • 文章版權屬於文章作者所有,轉載請註明 https://shqsg.com/zonghezhishi/ow528y.html