1. 前言
C 語言是一種廣泛應用於低階系統程式設計與遊戲開發的程式語言。其中,「隨機數生成」在許多情境中都有重要用途,例如遊戲中的隨機元素建立、模擬運算、加密、測試資料生成等,應用範圍非常廣泛。
本文將透過具體範例,說明如何在 C 語言中生成指定範圍的隨機數,幫助讀者理解隨機數生成的原理,並能應用於實際程式開發中。
2. C 語言中的隨機數生成基礎
在 C 語言中,生成隨機數需使用標準函式庫 <stdlib.h>
。rand()
函式可生成 0 到 RAND_MAX
(約 2147483647)之間的整數隨機數,但如果使用相同的種子值(seed),每次執行都會得到相同的結果。
偽隨機數生成與種子值設定
在隨機數生成中,「種子值」是非常重要的概念。種子值決定隨機數序列的起點,如果不設定種子,每次產生的隨機數都會相同。為避免這種情況,可以使用 srand()
設定種子,一般會用 time()
函式取得當前時間作為種子。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
srand((unsigned int)time(NULL));
printf("%dn", rand());
return 0;
}
如此,每次執行程式時都會生成不同的隨機數。
3. 生成指定範圍隨機數的方法
若需要在特定範圍內生成隨機數,可對 rand()
的結果進行數學運算。基本公式如下:
rand() % (max - min + 1) + min
使用此公式即可生成 min
到 max
之間的整數隨機數。
範例程式碼:生成指定範圍隨機數
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
int min = 1;
int max = 100;
srand((unsigned int)time(NULL));
int random_number = rand() % (max - min + 1) + min;
printf("Random number between %d and %d: %dn", min, max, random_number);
return 0;
}
此程式會生成 1 到 100 之間的隨機數並輸出。
4. 實數範圍隨機數生成
在生成實數型隨機數時,可以利用 rand()
與 RAND_MAX
進行縮放。若要生成 0.0 到 1.0 的隨機數,可使用以下程式碼:
實數範圍隨機數範例:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
srand((unsigned int)time(NULL));
double random_number = (double)rand() / RAND_MAX;
printf("Random number between 0.0 and 1.0: %fn", random_number);
return 0;
}
此程式會生成 0 到 1 之間的隨機數。若想生成 0.0 到 5.0 之間的隨機數,只需將結果乘以 5 即可。

5. 隨機數的應用範例
骰子模擬
在遊戲開發等情境中,常會以骰子模擬作為隨機數應用的例子。以下程式碼會生成 1 到 6 的隨機數,模擬擲骰子的結果。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
srand((unsigned int)time(NULL));
int dice_roll = rand() % 6 + 1;
printf("Dice roll: %dn", dice_roll);
return 0;
}
蒙地卡羅法近似圓周率
蒙地卡羅法是一種利用隨機數近似計算難以解析的問題的方法。以下程式碼示範如何用隨機數近似計算 π。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
int n_trials = 1000000;
int n_inside = 0;
double x, y, pi;
srand((unsigned int)time(NULL));
for (int i = 0; i < n_trials; i++) {
x = (double)rand() / RAND_MAX;
y = (double)rand() / RAND_MAX;
if (x * x + y * y <= 1) {
n_inside++;
}
}
pi = 4.0 * n_inside / n_trials;
printf("Approximated π: %fn", pi);
return 0;
}
這是一個利用蒙地卡羅法生成隨機數,並根據結果計算圓周率的例子。此方法常用於物理模擬等領域。
6. 總結
本文介紹了在 C 語言中生成指定範圍隨機數的方法,從 rand()
與 srand()
的基本用法,到指定範圍與生成實數隨機數的技巧,並示範了多個應用範例。隨機數生成技術在遊戲開發、模擬運算等領域都有廣泛應用。
希望您能在未來的專案中,靈活運用本文的內容。