C語言 10 隨機數

2021-09-19 11:50:30 字數 1206 閱讀 4551

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

int rand (void);

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

#include

#include

intmain()

多次執行上面的**,你會發現每次產生的隨機數都一樣,這是怎麼回事呢?為什麼隨機數並不隨機呢?

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

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

我們可以通過 srand() 函式來重新「播種」,這樣種子就會發生改變。srand() 的用法為:

void srand (unsigned int seed);

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

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

srand((unsigned)time(null));

#include

#include

#include

intmain()

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

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。

隨機數 C語言

怎樣獲得某一範圍的隨機整數?直接使用這種方法 rand n 試圖返回從0到n 1的整數 不好,因為許多隨機數生成器的低位並不隨機。乙個較好的方法是 int double rand double rand max 1 n 兩種方法都需要知道rand max,而且假設n要遠遠小於rand max。如果n...

C語言隨機數

在c語言函式庫中包含了乙個產生隨機數的函式 int rand void 函式返回的是乙個界於0 32767之間的偽隨機數,包括0和32767。注意,這裡產生的是偽隨機數,不是真正意義上的隨機數,看下面的程式 include stdlib.h include stdio.h void main 執行結...

c語言隨機數

隨機值函式rand 首先需要包含標頭檔案 include 計算機的優點是準確,並不擅長隨機和模擬,所以使用的rand 函式並不是真正意義上的隨機,而是一種偽隨機數使用rand 生成隨機數之前需要用隨機發生器的初始化函式srand unsigned seed 也位於stdlib.h 中 進行隨機數序列...