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

打開APP
userphoto
未登錄

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

開通VIP
[049]?仿骰子程序-隨機數的產生 -- 一步一腳印 -- 編程愛好者博客

出自:《C程序設計》(夏寶嵐) P76


6.8 編寫一個仿骰子程序,將六面體骰子擲6000次,統計出各面出現的次數。每次投擲骰子出現哪一面,由隨機數發生器提供的函數經過處理而確定。

#include <stdio.h>
#include <stdlib.h> /* rand()函數用 */
int main()
{
    int face;
    int f[6] = {0};
    int i;

 

    for(i = 1; i <= 6000; i++)
        f[rand() % 6]++ ;       /* 數組元素下標為0到5 */

    printf("Face  Frequency\n");
    for(face = 0; face < 6; face++)
        printf("%2d %10d\n", face + 1, f[face]);
    return 0;
}

運行結果(僅供參考):
===============================
Face  Frequency
 1       1003
 2       1017
 3        983
 4        994
 5       1004
 6        999
===============================

其中rand()為庫函數,函數原型在stdlib.h中定義,其功能是產生0到32767之間的整數,而且每個整數的出現概率是相等的。由于模擬投擲骰子的程序只需要1到6之間的隨機整數,故用rand()%6作為數組下標,使數組元素下標為0到5,分別對應1到6各個面。

想既然是隨機產生的數,那么每次Run時的結果應該是不一樣,但事實上并非如此,我在VC++6.0中得到的上述結果,但每次都是這些值,根本沒變。又試著在WIN-TC及TC運行,雖然數據各不相同,但在同一編譯器下的結果卻總是一樣的。
    查了一下(查看出處),原來問題在這個rand()函數上。函數原型 int rand(void) 返回一個隨機數值,范圍在0到RAND_MAX之間,RAND_MAX定義在stdlib.h。看了一下VC++6.0里include目錄下的stdlib.h頭文件,里面有個"#define RAND_MAX 0x7fff"是十六進制的,也就是十進制的32767。也有稱之為偽隨機。
    在調用這個函數前必須先利用srand()設置好隨機數種子。如果未設隨機數種子,rand()在調用時會自動設隨機數種子為1。是一個不變的值,這樣每次運行產生的隨機數就是一樣的。那如何才能讓其為真正的"隨機"呢?就要用srand()函數設置rand()函數產生隨機數時的隨機數種子,其原型為 void srand (unsigned int seed); 其中seed必須為整數,一般可以用geypid()或time(0)的返回值做為seed。如果每次seed都設相同值,rand()所產生的隨機數值每次就會一樣。改寫如下:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>   /* time()函數用 */
int main()
{
    int face;
    int f[6] = {0};
    int i;
   
    srand(time(0));  /* 設置種子 */

    for(i = 1; i <= 6000; i++)
        f[rand() % 6]++; 

    printf("Face  Frequency\n");
    for(face = 0; face < 6; face++)
        printf("%2d %10d\n", face + 1, f[face]);
    return 0;
}

運行結果(隨機):
==============================
Face  Frequency
 1       1062
 2        940
 3       1024
 4        974
 5       1029
 6        971
==============================

再運行(隨機):
==============================
Face  Frequency
 1        978
 2        990
 3        991
 4       1015
 5       1047
 6        979
==============================

經過如上改動再測試,每次產生的隨機數就不一樣了。上面是隨機選的兩組結果。

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

聯系客服

主站蜘蛛池模板: 潼关县| 河津市| 蒙城县| 贵定县| 清水河县| 巴彦淖尔市| 双流县| 昆明市| 清丰县| 滨州市| 新绛县| 淄博市| 凉山| 青铜峡市| 徐闻县| 泰来县| 喜德县| 郓城县| 墨竹工卡县| 天水市| 耒阳市| 垦利县| 遵义市| 育儿| 客服| 安顺市| 临朐县| 汝阳县| 通渭县| 乌审旗| 泰州市| 莒南县| 南江县| 木里| 大港区| 达拉特旗| 阿巴嘎旗| 孟连| 张家川| 庄浪县| 天水市|