c 隨機數產生

2021-06-26 21:27:52 字數 1529 閱讀 5135

c/c++產生隨機數用到兩個函式rand() 和 srand()

一. 不指定範圍產生隨機數

用到函式rand(),函式原型為int rand(),無引數。此時會產生乙個介於0~rand_max間的整數。rand_max的大小可以檢視,在include資料夾(linux在usr目錄、windows在安裝目錄)的stdlib.h可以看到,linux下其值為2147483647(),其值與具體系統有關。

參考**:

#include#include

intmain()

return0;

}

二. 指定範圍產生隨機數,產生0到某個數的隨機數

沒有現成的函式,但是可以通過取餘得到

#include#include

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

通過取餘取得指定範圍的隨機數

intmain()

return0;

}

說明下:假設dis取5,

注意乙個問題:

以上兩個程式每次執行產生的結果是相同的,既是個偽隨機數。rand()產生隨機數與具體的種子有關,當不特意用srand()獲取種子時,種子的預設值為1,因此需要用srand()函式產生不同的種子,srand函式原型:void srand(unsigned seed);為了產生不同的種子值,通常用時間作為引數值。例如對於一,修改程式如下:

#include#include

#include

intmain()

return0;

}

三. 指定範圍產生隨機數

要求:指定範圍(m,n),m、n關係不定,隨機數包括m和n

想方設法,把範圍(m,n)改變到(0,x),到最後再轉移回去。三種情況

1:m=n此時不該叫隨機數,這裡返回m

2:m>n:

標記pos=n,距離差pos=m-n+1

返回 rand() % dis + pos

3:n>m:

標記pos=m,距離差=n-m+1

返回rand()%dis + pos

參考**:

#include#include

#include

int random(int m, int

n)

else

if(m >n)

else

}int

main()

return0;

}

昇華

srand((unsigned)time(null));

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

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

(a,b] (rand()%(b-a))+a+1

[a,b] (rand()%(b-a+1))+a

c 隨機數產生

我們在做能自動生成試卷的考試系統時,常常需要隨機生成一組不重複的題目,在.net framework中提供了乙個專門用來產生隨機數的類system.random。對於隨機數,大家都知道,計算機不可能產生完全隨機的數字,所謂的隨機數發生器都是通過一定的演算法對事先選定的隨機種子做複雜的運算,用產生的結...

C 隨機數產生

標準庫 被包含於中 提供兩個幫助生成偽隨機數的函式 函式一 int rand void 從srand seed 中指定的seed開始,返回乙個 seed,rand max 0x7fff 間的隨機整數。函式二 void srand unsigned seed 引數seed是rand 的種子,用來初始化...

C 產生隨機數

c 怎樣產生隨機數 這裡要用到的是 rand 函式 srand 函式 c 裡沒有自帶的random int number 函式。1 如果你只要產生隨機數而不需要設定範圍的話,你只要用rand 就可以了 rand 會返回一隨機數值,範圍在0至rand max 間。rand max值至少為32767。例...