rand()函數
生成隨機數使用rand()函數
函數原型:
int rand (void); 頭文件<stdlib.h>
初步使用
目前該“隨機數”貌似成功生成
生成0到99的隨機數
再次運行
發現問題
大家有木有發現其實這三次的運行結果生成的隨機數其實是一樣的,沒錯,我說的就是三次,
第一次是41 18467 6334 26500 19169 15724 11478 29358 26962 24464,將這些數對100求余
不就是 41 67 34 0 69 24 78 58 62 64了嗎?
這些看似偶然的結果并不是精巧設計的,而是rand()函數需要一顆種子才能正確的生成我們所需要的隨機數,沒有該種子那么使用rand()永遠都是一樣的結果
查看rand()函數的官方文檔
RAND_MAX的值是0x7fff,十進制即?32767?,可見rand()函數只會產生0到32767之間的偽隨機整數
這個數字是由一個算法生成的,該算法在每次調用時返回一系列明顯無關的數字。該算法使用種子來生成序列,通過函數srand將序列初始化為特定的值。
官方指明了使用srand函數來生成一個種子
srand()函數
srand的官方介紹
發現srand函數原型是void srand(unsigned int seed)
,其中seed即種子的意思,所謂的種子無非就是一個無符號整型。
頭文件<stdlib.h>
初步使用srand()
這次生成的隨機數與前面的確實不一樣
再次運行
發現結果并沒有改變,這是咋回事呢?
發現問題
其實沒有使用srand之前,rand函數本身就有默認的種子,而srand只是將其默認的種子改成了100而已,下次運行該代碼種子還是100,只要種子不變,那么生成的隨機數永遠都是與該種子對應的,因此你要想每次運行都可以得到不同的隨機數,那就只能保證每次運行的種子不一樣,這樣問題就來了,種子也是要隨機的,這不就套娃了嗎?還好每次運行的時間是不一樣的,因此只需要將生成的種子與時間掛鉤就能保證每次運行的種子不一樣,因為時間包含了年月日時分秒,就保證了每一刻的時間是絕對不會相同的
解決問題:time函數
頭文件<time.h>
文檔中的核心內容就是給time傳個空指針NULL進去,它就將當前的時間以time_t類型進行返回,其中time_t其實就是int,只不過被用typedef進行了類型重命名了而已,
小伙伴是否會有疑問一個時間怎么以整型進行表示呢?這里就涉及到了時間戳的概念
時間戳
時間戳: 當前時間與計算機起始時間的差值,單位是秒。
計算機的起始時間:1970-01-01 08:00:00(北京時間)
以上所述是小編給大家介紹的C語言使用rand函數生成隨機數,希望對大家有所幫助。在此也非常感謝大家對服務器之家網站的支持!
原文鏈接:https://blog.csdn.net/qq_42591783/article/details/121376788