程式設計 C語言入門 生成隨機數(並非固定的隨機數)

2021-10-22 02:58:53 字數 1730 閱讀 5836

在實際程式設計中,我們經常需要生成隨機數。

在c語言中,我們一般使用 標頭檔案中的 rand() 函式來生成隨機數,它的用法為:

int rand (void);

rand() 會隨機生成乙個位於 0 ~ rand_max 之間的整數。

rand_max 是 標頭檔案中的乙個巨集,它用來指明 rand() 所能返回的隨機數的最大值。c語言標準並沒有規定 rand_max 的具體數值,只是規定它的值至少為 32767。在實際程式設計中,我們也不需要知道 rand_max 的具體值,把它當做乙個很大的數來對待即可。

再執行幾次,會發現每次產生的隨機數都一樣

實際上,rand() 函式產生的隨機數是偽隨機數,是根據乙個數值按照某個公式推算出來的,這個數值我們稱之為「種子」。種子和隨機數之間的關係是一種正態分佈。

種子在每次啟動計算機時是隨機的,但是一旦計算機啟動以後它就不再變化了;也就是說,每次啟動計算機以後,種子就是定值了,所以根據公式推算出來的結果(也就是生成的隨機數)就是固定的。

srand()函式用於給rand()函式設定種子。srand() 的用法為:

void srand (unsigned int seed);

它需要乙個 unsigned int 型別的引數。在實際開發中,我們可以用時間作為引數,只要每次播種的時間不同,那麼生成的種子就不同,最終的隨機數也就不同。

使用 標頭檔案中的 time() 函式即可得到當前的時間(精確到秒),就像下面這樣:

srand((unsigned)time(null));

對上面的**進行修改,生成隨機數之前先進行播種:

多次執行程式,會發現每次生成的隨機數都不一樣了。但是,這些隨機數會有逐漸增大或者逐漸減小的趨勢,這是因為我們以時間為種子,時間是逐漸增大的,結合上面的正態分佈圖,很容易推斷出隨機數也會逐漸增大或者減小。

在實際開發中,我們往往需要一定範圍內的隨機數,過大或者過小都不符合要求,那麼,如何產生一定範圍的隨機數呢?我們可以利用取模的方法:

int a = rand() % 10; //產生0~9的隨機數,注意10會被整除

如果要規定上下限:

int a = rand() % 51 + 13; //產生13~63的隨機數

分析:取模即取餘,rand()%51+13我們可以看成兩部分:rand()%51是產生 0~50 的隨機數,後面+13保證 a 最小只能是 13,最大就是 50+13=63。

最後給出產生 13~63 範圍內隨機數的完整**:

#include

#include

#include

intmain()

更多解釋見

C語言生成隨機數

1 關於c語言中有rand 函式來產生隨機數,但是初始seed為1,這樣做有乙個問題,即會產生固定序列的數,比如單獨呼叫rand 時會產生 1804289383 846930886 1681692777 1714636915 1957747793 424238335 719885386 164976...

C語言隨機數的生成

在程式設計中,我們經常需要生成隨機數,例如,貪吃蛇遊戲中在隨機的位置出現食物,撲克牌遊戲中隨機發牌等。在c語言中,我們一般使用 標頭檔案中的 rand 函式來生成隨機數,它的用法為 int rand void void 表示不需要傳遞引數。c語言中還有乙個 random 函式可以獲取隨機數,但是 r...

C 程式設計基礎 C 生成隨機數

1.如何生成隨機數 1 c 中生成隨機數的函式是rand 在標頭檔案 include中,返回0 rand max 32767 的整數,不需要引數,它是根據種子生成的,根據不同的種子產生不同的隨機序列。include include rand 和srand 包含在這個庫中 using namespac...