RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

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

C語言編程學(xué)習(xí)基地 ? 來源:未知 ? 作者:胡薇 ? 2018-11-09 16:46 ? 次閱讀

隨機數(shù)的使用,是不少在學(xué)C語言過程中進行一些小功能開發(fā)的同學(xué)的一個技術(shù)問題,今天我們?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ù)字與所謂的”種子”有關(guān),使用rand函數(shù)前需要使用srand函數(shù)進行種種子(請見后文)。如果沒有調(diào)用,系統(tǒng)會默認給1,導(dǎo)致每次的隨機數(shù)都一樣。

Q2:為什么最大是0x7fff?

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

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

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

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

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

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

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

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

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

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

測試代碼如下:

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • C語言
    +關(guān)注

    關(guān)注

    180

    文章

    7604

    瀏覽量

    136688
  • 隨機數(shù)
    +關(guān)注

    關(guān)注

    0

    文章

    18

    瀏覽量

    12016

原文標題:C語言如何使用隨機數(shù)?

文章出處:【微信號:cyuyanxuexi,微信公眾號:C語言編程學(xué)習(xí)基地】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    請問Ti的哪個庫可以調(diào)用C語言隨機數(shù)產(chǎn)生函數(shù)?

    Ti的哪個庫可以調(diào)用C語言隨機數(shù)產(chǎn)生函數(shù)啊,就是怎么在CCS里產(chǎn)生隨機數(shù)
    發(fā)表于 07-31 07:03

    單片機C語言如何產(chǎn)生隨機數(shù)

    來實現(xiàn)隨機數(shù)的產(chǎn)生。 C語言中有三個通用的隨機數(shù)發(fā)生器,分別為 rand函數(shù)、random函數(shù)、randomize 函數(shù),但是rand函數(shù)產(chǎn)生的并不是真意正義上的
    發(fā)表于 05-14 15:14

    產(chǎn)生隨機數(shù)的方法有哪些

    寫好一個隨機數(shù)表,然后進行取數(shù)據(jù)。也是可以的。KEIL里面產(chǎn)生隨機數(shù)的函數(shù)確實是rand(),但頭文件是stdlib.h,不是time.h。C語言提供了一些庫函數(shù)來實現(xiàn)
    發(fā)表于 07-15 09:08

    什么是隨機數(shù)

    做開發(fā)的工程師們應(yīng)該或多或少都接觸過隨機數(shù),可能認為它就是一個隨機生成的數(shù)字嘛,使用時也很簡單,只要調(diào)用開發(fā)語言提供的函數(shù)即可。但實際上隨機數(shù)后面還是有著比較復(fù)雜但也有趣的知識點的。根
    發(fā)表于 07-22 09:42

    C語言中隨機數(shù)的產(chǎn)生及性能檢驗

    系統(tǒng)仿真或加密算法中常需要產(chǎn)生滿足一定分布函數(shù)的 偽隨機數(shù) ,高級程序設(shè)計語言中的庫函數(shù)采用線性同余法產(chǎn)生一個在[0,32767] 服從均勻分布的偽隨機數(shù),但每次程序運行的結(jié)果都
    發(fā)表于 07-07 16:35 ?70次下載

    C語言random函數(shù)偽隨機數(shù)產(chǎn)生

    C語言的stalib.h庫里面的random函數(shù)可以得到一個0-0x7FFFh的隨機數(shù),當(dāng)然,調(diào)用隨機數(shù)函數(shù)之前,是要進行種子的篩選的,以當(dāng)前的時間參數(shù)作為種子,可以使得偽
    發(fā)表于 08-25 17:56 ?1.3w次閱讀

    C#教程之偽隨機數(shù)加密

    C#教程之偽隨機數(shù)加密,很好的C#資料,快來學(xué)習(xí)吧。
    發(fā)表于 04-21 09:52 ?5次下載

    C語言教程之循環(huán)顯示隨機數(shù)問題

    C語言教程之循環(huán)顯示隨機數(shù)問題,很好的C語言資料,快來學(xué)習(xí)吧。
    發(fā)表于 04-25 15:03 ?0次下載

    產(chǎn)生隨機數(shù)

    一個自己寫的產(chǎn)生隨機數(shù)的工程
    發(fā)表于 12-01 15:45 ?13次下載

    C語言中隨機數(shù)的生成代碼

    C語言中隨機數(shù)的生成完整代碼:
    的頭像 發(fā)表于 02-20 09:21 ?1w次閱讀

    單片機產(chǎn)生隨機數(shù)的兩種方法

    寫好一個隨機數(shù)表,然后進行取數(shù)據(jù)。也是可以的。KEIL里面產(chǎn)生隨機數(shù)的函數(shù)確實是rand(),但頭文件是stdlib.h,不是time.h。C語言提供了一些庫函數(shù)來實現(xiàn)
    發(fā)表于 03-01 11:04 ?2272次閱讀

    DApp的隨機數(shù)為什么會被黑客破解

    隨機數(shù)可以分為真隨機數(shù)和偽隨機數(shù)。真隨機數(shù)需要同時滿足隨機性、不可預(yù)測性、不可重現(xiàn)性,而偽隨機數(shù)
    發(fā)表于 10-18 10:59 ?2469次閱讀

    單片機C語言如何產(chǎn)生隨機數(shù)

    C語言中有三個通用的隨機數(shù)發(fā)生器,分別為 rand函數(shù)、random函數(shù)、randomize 函數(shù),但是rand函數(shù)產(chǎn)生的并不是真意正義上的隨機數(shù),是一個偽
    的頭像 發(fā)表于 11-26 14:25 ?7559次閱讀

    單片機C語言如何產(chǎn)生隨機數(shù)

    隨機數(shù)在單片機的應(yīng)用中也是很多的,當(dāng)然產(chǎn)生隨機數(shù)的方法有很多,當(dāng)中有一個就是利用單片機定時器,取出未知的定時器THX和TLX的值,再加以運算得到一個規(guī)定范圍內(nèi)的隨機數(shù)值。這做法也是可行的?;蛘哳A(yù)先寫好一個
    發(fā)表于 02-08 17:12 ?11次下載
    單片機<b class='flag-5'>C</b><b class='flag-5'>語言</b>如何產(chǎn)生<b class='flag-5'>隨機數(shù)</b>

    何在FPGA中實現(xiàn)隨機數(shù)發(fā)生器

    分享如何在Xilinx Breadboardable Spartan-7 FPGA, CMOD S7中實現(xiàn)4位偽隨機數(shù)發(fā)生器(PRNGs)。
    的頭像 發(fā)表于 08-06 11:20 ?662次閱讀
    如<b class='flag-5'>何在</b>FPGA中實現(xiàn)<b class='flag-5'>隨機數(shù)</b>發(fā)生器
    RM新时代网站-首页