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