亂數函數
初寫: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)
輸出:"你贏了"、"你輸了"、"平手"的狀態結果。
參考資料: