亂數函數
初寫:2003.05.23, 更新日期:2021.07.28
 
作者:曾聖超老師
 
  • 說明

    在數學計算時,使用亂數需用查表方式來獲得
    (早期國中數學課本後都附有亂數表,如圖);
    不知道是否有同學會使用亂數表呢?

    但是,在資訊領域,亂數可是應用廣泛;
    程式設計裡,亂數一直是非常有趣的應用,
    也省去了繁瑣的查表過程,
    在網際網路上也一樣,適當的應用亂數原理,常令人有驚奇的效果。

    例如,每次點進去一個網站都有不一樣的首頁呈現,
    如:老師早年擔任資訊組時,製作的竹中首頁
    不知道亂數效果的人看到,會以為說:
    「哇!製作網頁的人,經常更換網頁,真勤奮!」
    讓人覺得時時耳目一新,這就是亂數的效果。

    此外,應用最多的就是遊戲,
    譬如:猜拳、丟骰子、撲克牌、麻將等,
    或者一些遊戲中怪物的產生、寶物獎勵的出現等等,
    都是需要應用亂數來製作。

  • rand( ) 亂數函數
    • 功能:亂數函數,產生亂數。
    • 定義檔:stdlib.h
    • 呼叫格式:int rand(void)

    C語言裡,亂數函數是定義在<stdlib.h>函式檔,
    亂數函式的原型:int rand(void);
    傳回值為一整數(int)。
    馬上來看一下,亂數函式要如何使用。

  • 練習1: 請執行三次以下程式,寫出輸出的結果。



  • 練習2:
    請執行二次,寫出結果。
    修改srand(2)中的2,改成其他數字,如:3、4,並執行兩次,寫下結果。






  • srand( ) 亂數種子
    • 功能:產生亂數函式種子seed。
    • 定義檔:stdlib.h
    • 呼叫:void srand( unsigned int )
    • 說明:需呼叫在rand()之前。

  • 練習3

    請問,上述程式執行出來的數值範圍是多少呢?
    請執行5次,分別請寫下出現結果數值。



  • 實作1:請問,如何使得上列的亂數值,收斂到(1 ~ 6)範圍內?

    有興趣的同學,可思考亂數值的控制輸出,如:
    a.亂數值在0~2
    b.亂數值在1~52
    c.亂數值在1001~1100



  • 實作2:
    請寫一個猜骰子(Dice)遊戲
    執行畫面如下:






  • 實作3:
    試寫一個猜拳遊戲.
    玩家可輸入剪刀(y)、石頭(o)、布(x),
    電腦也會亂數出:剪刀(y)、石頭(o)、布(x)
    輸出:"你贏了"、"你輸了"、"平手"的狀態結果。


參考資料: