漫談C語言隨機數

2021-07-03 10:50:32 字數 1404 閱讀 7063

來說說c語言如何產生隨機數。

有人會說這不簡單?time() + srand() + rand() 3個函式不就ok了嗎?

是的,不過,我們還是來看看原理比較好,也就是隨機數是如何產生的。

這不無聊。c本來就不是一門太高階的語言。這句話並不是貶義的。

首先,我要說的是:計算機本身是不能產生隨機數的。

計算機再如何先進,終究是一部機器。它沒有邏輯思維,只會計算,卻不懂怎樣算,怎麼能產生隨機數呢?

而且計算機的「算」和人的算是不同的,人是邏輯上的算,但是計算機是物理上的算。

計算機的一切工作都是由指令觸發的,所以,要讓計算機產生隨機數,就得告訴它如何產生隨機數。

好吧,既然計算機只會計算,我就給計算機乙個公式,再給乙個數(這個數叫:種子),通過把這個數代入公式,得出的結果即為乙個「隨機數」。

為了產生不同的結果,我們就得在每次產生隨機數前告訴它不同的種子,這豈不是很不方便。

int rand(void) //乙個書上的示例,具體rand()是不是這樣也許會有差別

可以發現:1,種子數預設是1.

2,種子變數是靜態變數,這使得種子值的改變得以儲存。而不是每次都恢復為1.

這就是偽隨機數發生器。之所以叫偽隨機數,是因為每次程式執行前,最初的種子值是一樣的,都是1。程式執行產生的隨機數每次都相同。

因此,我們必須改每次程式執行前最初的種子值。呼叫函式srand() 就可選改變最初的種子值。不過,我們通常喜歡讓計算機自己決定

最初的種子值是什麼。於是引入time()函式,返回系統時間作為srand()函式的引數。因為系統時間是不斷改變的,所以引發最初的種子值不斷

改變。不如產生10個1~10之間的隨機數,一般這樣寫:

# include # include # include int main (void)

基於函式黑盒子,資料隱藏的程式設計藝術深入我心(呵呵...)我自己寫了乙個隨機數發生函式,用起來更方便。

# include # include # include int myrand(int low , int high);

int main (void)

int myrand(int low , int high) //產生low ~ high 間的隨機數

base = high-low+1; //確定計數的基數

r_num=rand() % base; //產生計數器

return low+r_num;

}

隨機數 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 中 進行隨機數序列...