c語言中取隨機數的函式,C語言中取隨機數的函式

時間 2021-09-04 13:43:34

1樓:韌勁

1. 基本函式

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

int rand(void); void srand (unsigned int n);

rand()函式和srand()函式被宣告在標頭檔案stdlib.h中,所以要使用這兩個函式必須包含該標頭檔案:

#include

2. 使用方法

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

srand()函式使用自變數n作為種子,用來初始化隨機數產生器。只要把相同的種子傳入srand(),然後呼叫rand()時,就會產生相同的隨機數序列。因此,我們可以把時間作為srand()函式的種子,就可以避免重複的發生。

如果,呼叫rand()之前沒有先呼叫srand(),就和事先呼叫srand(1)所產生的結果一樣。

舉個例子,假設我們要取得0~10之間的隨機整數(不含10本身):

/* 例1:不指定種子的值 */

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

每次執行都將輸出:1 7 4 0 9 4 8 8 2 4

/* 例2:指定種子的值為1 */

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

每次執行都將輸出:1 7 4 0 9 4 8 8 2 4

例2的輸出結果與例1是完全一樣的。

/* 例3:指定種子的值為8 */ srand(8); for (int i=0; i<10; i++)

每次執行都將輸出:4 0 1 3 5 3 7 7 1 5

該程式取得的隨機值也是在[0,10)之間,與srand(1)所取得的值不同,但是每次執行程式的結果都相同。

/* 例4:指定種子值為現在的時間 */ srand((unsigned)time(null)); for (int i=0; i<10; i++)

該程式每次執行結果都不一樣,因為每次啟動程式的時間都不同。另外需要注意的是,使用time()函式前必須包含標頭檔案time.h。

3. 注意事項

求一定範圍內的隨機數。

如要取[0,10)之間的隨機整數,需將rand()的返回值與10求模。

randnumber = rand() % 10;

那麼,如果取的值不是從0開始呢?你只需要記住一個通用的公式。

要取[a,b)之間的隨機整數(包括a,但不包括b),使用:

(rand() % (b - a)) + a

偽隨機浮點數。

要取得0~1之間的浮點數,可以用:

rand() / (double)(rand_max)

如果想取更大範圍的隨機浮點數,比如0~100,可以採用如下方法:

rand() /((double)(rand_max)/100) 其他情況,以此類推,這裡不作詳細說明。

2樓:匿名使用者

您好,您應該匯入,使用rand()函式產生一個0~1的隨機數(前閉後開)

所以您的程式應該這樣寫:

#include

#include

float getrand(float a,float b)一樓沒有按照要求編寫一個函式,而且用時間直接取隨機數並不規範。

3樓:技術變現探索者

rand函式返回值的範圍是: [0,1)

int value =(b-a)*rand();

例如:50到100之間的數

(100-50) * rand()

4樓:匿名使用者

#include

#include

#include

void main()

printf("%f\n",c);}

c語言中獲得隨機數的方法

5樓:匿名使用者

c語言/c++怎樣產生隨機數:這裡要用到的是rand()函式, srand()函式,c語言/c++裡沒有自帶的random(int number)函式。

(1) 如果你只要產生隨機數而不需要設定範圍的話,你只要用rand()就可以了:rand()會返回一隨機數值, 範圍在0至rand_max 間。rand_max定義在stdlib.

h, 其值為2147483647。

例如:#include

#include

void main()

(2) 如果你要隨機生成一個在一定範圍的數,你可以在巨集定義中定義一個random(int number)函式,然後在main()裡面直接呼叫random()函式:例如:隨機生成10個0~100的數:

#include

#include

#define random(x) (rand()%x)

void main()

(3)但是上面兩個例子所生成的隨機數都只能是一次性的,如果你第二次執行的時候輸出結果仍和第一次一樣。這與srand()函式有關。srand()用來設定rand()產生隨機數時的隨機數種子。

在呼叫rand()函式產生隨機數前,必須先利用srand()設好隨機數種子(seed), 如果未設隨機數種子, rand()在呼叫時會自動設隨機數種子為1。上面的兩個例子就是因為沒有設定隨機數種子,每次隨機數種子都自動設成相同值1 ,進而導致rand()所產生的隨機數值都一樣。srand()函式定義 :

void srand (unsigned int seed);

通常可以利用geypid()或time(0)的返回值來當做seed

如果你用time(0)的話,要加入標頭檔案#include例如:

#include

#include

#include

#define random(x) (rand()%x)

void main()

這樣兩次執行的結果就會不一樣了!!

6樓:

問題1: 怎樣獲得一個真正的隨機數?要知道,rand()是不能產生真正的隨機數的!即使不能產生真正的隨機數,也要大概接近呀!而rand()好象每次的隨機都一樣。

專家解答:

之所以rand()每次的隨機數都一樣是因為rand()函式使用不正確。各種程式語言返回的隨機數(確切地說是偽隨機數)實際上都是根據遞推公式計算的一組數值,當序列足夠長,這組數值近似滿足均勻分佈。如果計算偽隨機序列的初始數值(稱為種子)相同,則計算出來的偽隨機序列就是完全相同的。

這個特性被有的軟體利用於加密和解密。加密時,可以用某個種子數生成一個偽隨機序列並對資料進行處理;解密時,再利用種子數生成一個偽隨機序列並對加密資料進行還原。這樣,對於不知道種子數的人要想解密就需要多費些事了。

當然,這種完全相同的序列對於你來說是非常糟糕的。要解決這個問題,需要在每次產生隨機序列前,先指定不同的種子,這樣計算出來的隨機序列就不會完全相同了。你可以在呼叫rand()函式之前呼叫srand( (unsigned)time( null ) ),這樣以time函式值(即當前時間)作為種子數,因為兩次呼叫rand函式的時間通常是不同的,這樣就可以保證隨機性了。

你也可以使用srand函式來人為指定種子數。windows 9x/nt的遊戲freecell就允許使用者指定種子數,這樣使用者如果一次遊戲沒有成功,下次還可以以同樣的發牌結果再玩一次。

問題2: 我按照上述方法並不能產生隨機數,僅產生公差為3或4的等差數列:

#include

#include

#include

#include

void main() }

專家解答:

你的程式是有問題的,你每產生一個隨機數之前,都呼叫一次srand,而由於計算機執行很快,所以你每次用time得到的時間都是一樣的(time的時間精度較低,只有55ms)。這樣相當於使用同一個種子產生隨機序列,所以產生的隨機數總是相同的。你應該把srand放在迴圈外:

srand( (unsigned)time( null ) );

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

7樓:風若遠去何人留

可以使用庫函式rand()。

rand宣告於stdlib.h,其原型為

int rand(void);

功能為返回一個隨機整型值。在c語言中,該值是一個正數值。

在需要限定獲取到的隨機數範圍時,如範圍要求為[m,n] m

rand()%(n-m+1)+m

的形式進行獲取。原理為:

%為取餘計算,當%k時,結果是[0,k-1]之間的數值;

於是rand()%(n-m+1) ∈ [0, n-m];

所以rand()%(n-m+1)+m ∈ [0+m, n-m+m]=[m,n]。

8樓:匿名使用者

用隨機數函式要區分程式設計環境。tc和vc(vc代表win32編譯器)是不同的。tc下用以下兩個函式初始化隨機數產生器void randomize(void)產生隨機數(max表示 產生從0~max-1的隨機數)

int random(int max)例子:int main()vc下也有兩個函式 srand(unsigned long seed) 用於初始化隨機數,引數為隨機數種子,一般使用當前時間作為隨機數種子。 unsigned long rand(void)返回一個隨機數,範圍可用取餘運算控制。

例子:#include int main()

9樓:匿名使用者

在vc中設計到隨機數有兩個函式

srand() and rand()

srand() 的作用是是一個種子,提供每次獲得隨機數的基數而已,rand()根據種子而產生隨機數

注意1:srand() 裡的值必須是動態變化的,否則得到的隨機數就是一個固定數

2:其實可以不用寫srand() ,只用rand()就可以了,省事,簡單,例子如下

如果我們想得到一個 0-60的隨機數那麼可以寫成int i;

i=rand()%60;

就可以了。

當然最好有個統一的標註如下:

int i;

srand((unsigned)time( null ));

i=rand()%60;

這樣就ok了。

10樓:仙桖珍

c語言生成隨機數需要用到兩個函式,一個是srand(),一個是rand(),首先給srand()提供一個種子,unsigned int型別,其取值範圍從0~65535,srand()根據這個種子會由一個特定的公式生成一個隨機數序列;然後呼叫rand(),它會依次從這個序列中返回一個數(在0到32767之間),而在不指定srand()種子的情況下,它每次都使用預設的種子,因此生成的序列是同一個,你每次執行,當然就取到相同的數字了。

你可以在程式裡新增標頭檔案time.h,用當前時間作為srand的種子,這樣就能保證每次執行時都能取到不同的隨機數序列。如下:

time_t t;

srand((unsigned) time(&t));

然後就可以用rand()取隨機數了。

C語言中產生隨機數的函式是什麼

c語言中產生隨機數的相關函式主要包括srand和rand函式,兩者配合生成隨機資料,測試 如下,include include include void main srand time null for i 0 i 5 i for j 0 j 5 j p i j rand 100 1 產生1 100...

C語言中產生隨機數,C語言怎樣產生一定範圍的隨機數?

巧金蘭嵇嫣 樓上這樣得出的隨機值不準確,不信你執行幾次試試,都是同一個數。正確應該這樣。首先加標頭檔案 include include 然後在主函式裡面寫 inti srand time 0 i rand 100 1 printf d i 隨機數主要有兩個函式 一個種子產生函式 void srand...

c語言中的strlen函式,C語言中的strlen函式

冰 vs 霰 strlen是測量字串長度的 char d 和char a china char b 是等價的 是陣列的表示形式 而char c 卻是字元陣列所以並不能得到結果 strlen函式測量字串中字元個數,不包括結尾的 0 字元,你的 char c沒有結尾的 0 不是合法的字串,所以結果不對 ...