C語言如何使用隨機數(shù)?

C語言如何使用隨機數(shù)?

功能介紹推送一些C語言方面的知識,提供C語言/C++語言資料,討論和學習C語言/C++編程知識。給學習C語言的同學們一些幫助。

隨機數(shù)的使用,是不少在學C語言過程中進行一些小功能開發(fā)的同學的一個技術問題,今天我們?yōu)榇蠹抑v解如何在C語言中使用隨機數(shù)。

通常情況下,使用最多的方法的就是使用rand函數(shù)隨機生成偽隨機數(shù)來完成隨機數(shù)的生成工作。注意這里的偽隨機數(shù)并非是假的! 只不過是計算機按自己的一套理論生成,并不是”完全理想”狀態(tài)下的隨機數(shù),所以是可以接受的。

函數(shù)原型為:int rand(void); 需要包含stdlib頭文件,它可以生成一個0 ~RAND_MAX之間的數(shù)字,其中RAND_MAX是一個宏,VC6下筆者查看為0x7fff,建議大家親自上機實驗!

這個時候你可能會遇到下面幾個問題:

Q1:為什么每次生成的數(shù)字都一樣?

A1:rand函數(shù)每次生成的數(shù)字與所謂的”種子”有關,使用rand函數(shù)前需要使用srand函數(shù)進行種種子(請見后文)。如果沒有調用,系統(tǒng)會默認給1,導致每次的隨機數(shù)都一樣。

Q2:為什么最大是0x7fff?

A2:這可能取決于編譯器環(huán)境,筆者這里是VC6,在rand的函數(shù)中看到定義的最大值為0x7fff,如下圖:


Q3:如果我想生成特定范圍內的數(shù)字,該如何寫呢?

A3:多多利用%求余運算符即可。如:

生成10以內的數(shù)字,可以參考rand()%10

生成1~10之間的數(shù)字,可以參考rand()%10+1

特定的,要生成a~b之間的數(shù)字,可以參考rand()%(b-a+1)+a

更多時候,我們希望每次運行生成的數(shù)字都不相同,這個時候需要配合srand函數(shù)來解決這一問題。關于具體原因,大家可以參考rand函數(shù)與srand函數(shù)的實現(xiàn)細節(jié)來加以理解,代碼如下:






那么srand函數(shù)如何使用呢,先看函數(shù)原型:

void srand(unsigned seed); 只需要在rand函數(shù)使用之前,調用srand函數(shù)傳入一個種子即可。但事實上傳入一個數(shù),往往產(chǎn)生的隨時仍然固定不變。那么較為聰明的寫法目前看來只有使用系統(tǒng)時間作為種子最為合適,所以這里srand的參數(shù)往往傳入time(NULL)參數(shù)作為獲取系統(tǒng)當前時間作為種子,來產(chǎn)生不同的結果!

并注意類型一致,srand((unsigned)time(NULL)); 記得添加time.h的頭文件!

測試代碼如下:



大家可以自行上機測試,如果在學習C/C++或者想要學習C/C++可以加我們的學習交流QQ群:712263501群內有相關學習資料。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容