C 語言隨機數生成教學:範圍設定、實數與應用範例完整指南

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

使用此公式即可生成 minmax 之間的整數隨機數。

範例程式碼:生成指定範圍隨機數

#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() 的基本用法,到指定範圍與生成實數隨機數的技巧,並示範了多個應用範例。隨機數生成技術在遊戲開發、模擬運算等領域都有廣泛應用。

希望您能在未來的專案中,靈活運用本文的內容。

侍エンジニア塾