精品伊人久久大香线蕉,开心久久婷婷综合中文字幕,杏田冲梨,人妻无码aⅴ不卡中文字幕

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
【知識】C語言隨機數(shù)生成,C語言rand和srand用法詳解

 

在實際編程中,我們經(jīng)常需要生成隨機數(shù)。例如,貪吃蛇游戲中在隨機的位置出現(xiàn)食物,撲克牌游戲中隨機發(fā)牌。

在C語言中,我們一般使用 <stdlib.h> 頭文件中的 rand() 函數(shù)來生成隨機數(shù),它的用法為:

int rand (void);

void 表示不需要傳遞參數(shù)。

C語言中還有一個 random() 函數(shù)可以獲取隨機數(shù),但是 random() 不是標準函數(shù),不能在 VC/VS 等編譯器通過,所以比較少用。

rand() 會隨機生成一個位于 0 ~ RAND_MAX 之間的整數(shù)。

RAND_MAX 是 <stdlib.h> 頭文件中的一個宏,它用來指明 rand() 所能返回的隨機數(shù)的最大值。C語言標準并沒有規(guī)定 RAND_MAX 的具體數(shù)值,只是規(guī)定它的值至少為 32767。在實際編程中,我們也不需要知道 RAND_MAX 的具體值,把它當做一個很大的數(shù)來對待即可。

下面是一個隨機數(shù)生成的實例:

#include <stdio.h>

#include <stdlib.h>

int main(){

    int a = rand();

    printf("%d\n",a);

    return 0;

}

運行結(jié)果:

193

隨機數(shù)的本質(zhì)

多次運行上面的代碼,你會發(fā)現(xiàn)每次產(chǎn)生的隨機數(shù)都一樣,這是怎么回事呢?為什么隨機數(shù)并不隨機呢?

實際上,rand() 函數(shù)產(chǎn)生的隨機數(shù)是偽隨機數(shù),是根據(jù)一個數(shù)值按照某個公式推算出來的,這個數(shù)值我們稱之為“種子”。種子和隨機數(shù)之間的關(guān)系是一種正態(tài)分布。


 

種子在每次啟動計算機時是隨機的,但是一旦計算機啟動以后它就不再變化了;也就是說,每次啟動計算機以后,種子就是定值了,所以根據(jù)公式推算出來的結(jié)果(也就是生成的隨機數(shù))就是固定的。

重新播種

我們可以通過 srand() 函數(shù)來重新“播種”,這樣種子就會發(fā)生改變。srand() 的用法為:

void srand (unsigned int seed);

它需要一個 unsigned int 類型的參數(shù)。在實際開發(fā)中,我們可以用時間作為參數(shù),只要每次播種的時間不同,那么生成的種子就不同,最終的隨機數(shù)也就不同。

使用 <time.h> 頭文件中的 time() 函數(shù)即可得到當前的時間(精確到秒),就像下面這樣:

srand((unsigned)time(NULL));

對上面的代碼進行修改,生成隨機數(shù)之前先進行播種:

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

int main() {

    int a;

    srand((unsigned)time(NULL));

    a = rand();

    printf("%d\n", a);

    return 0;

}

多次運行程序,會發(fā)現(xiàn)每次生成的隨機數(shù)都不一樣了。但是,這些隨機數(shù)會有逐漸增大或者逐漸減小的趨勢,這是因為我們以時間為種子,時間是逐漸增大的,結(jié)合上面的正態(tài)分布圖,很容易推斷出隨機數(shù)也會逐漸增大或者減小。

如果你也想成為程序員,想要快速掌握編程,趕緊關(guān)注小編加入學習企鵝圈子吧!

里面有資深專業(yè)軟件開發(fā)工程師,在線解答你的所有疑惑~編程語言入門“so easy”

資料包含:編程入門、游戲編程、課程設計等。

免費學習書籍:


 

免費學習資料:


 

生成一定范圍內(nèi)的隨機數(shù)

在實際開發(fā)中,我們往往需要一定范圍內(nèi)的隨機數(shù),過大或者過小都不符合要求,那么,如何產(chǎn)生一定范圍的隨機數(shù)呢?我們可以利用取模的方法:

int a = rand() % 10;    //產(chǎn)生0~9的隨機數(shù),注意10會被整除

如果要規(guī)定上下限:

int a = rand() % 51 + 13;    //產(chǎn)生13~63的隨機數(shù)

分析:取模即取余,rand()%51+13我們可以看成兩部分:rand()%51是產(chǎn)生 0~50 的隨機數(shù),后面+13保證 a 最小只能是 13,最大就是 50+13=63。

最后給出產(chǎn)生 13~63 范圍內(nèi)隨機數(shù)的完整代碼:

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

int main(){

    int a;

    srand((unsigned)time(NULL));

    a = rand() % 51 + 13;

    printf("%d\n",a);

    return 0;

}

本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
用c語言產(chǎn)生隨機數(shù) - meizhe143的日志 - 網(wǎng)易博客
C語言中獲得隨機數(shù)的方法(讀書筆記:->)
C++ rand,srand用法
C語言/C++中怎樣產(chǎn)生隨機數(shù)
【C語言筆記】關(guān)于隨機數(shù)的總結(jié)
隨機數(shù)產(chǎn)生srand和rand 的使用
更多類似文章 >>
生活服務
分享 收藏 導長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服

主站蜘蛛池模板: 页游| 特克斯县| 大英县| 三台县| 珲春市| 舞钢市| 平利县| 兴山县| 博湖县| 双牌县| 锡林浩特市| 庆元县| 庆城县| 巴彦淖尔市| 黄平县| 沧州市| 武威市| 南溪县| 贵南县| 连南| 宝坻区| 东辽县| 海阳市| 赣州市| 涟源市| 兴文县| 来凤县| 桃源县| 恩平市| 庆元县| 台东县| 精河县| 武穴市| 扎赉特旗| 怀来县| 中江县| 健康| 湛江市| 武邑县| 南召县| 清苑县|