C 認號生成

各位有抱負的編程者,大家好!今天,我們將一起深入探索 C 認號生成的精彩世界。作為你們親切的人工智慧編程老師,我將帶領你們通過大量的範例和解釋來開展這次旅程。那麼,我們開始吧!

C - Random Number Generation

什麼是隨機數?

在我們開始編程之前,讓我們先來了解什麼是隨機數。想像你正在玩一個桌面遊戲,需要擲骰子。你得到的數字是不可預料的,對吧?這就是我們在編程中嘗試通過隨機數達到的效果。

在 C 語言中,我們使用一個名為 rand() 的函數來生成隨機數。但這裡有一個有趣的冷知識:這些數字其實不是真正隨機的!它們實際上是“伪隨機”的,意味著它們遵循一個看起來隨機但實際上是確定的模式。別擔心這聽起來會讓人混淆 - 我們會在接下來的過程中進一步探討這個問題。

開始使用

要在 C 語言中使用隨機數,我們需要包含一個特殊的庫,名為 stdlib.h。這個庫包含了我們將要使用的 rand() 函數。下面是如何包含它的方法:

#include <stdio.h>
#include <stdlib.h>

現在,讓我們看一些範例!

範例 1:生成一個隨機數

讓我們從一個生成隨機數的簡單程序開始:

#include <stdio.h>
#include <stdlib.h>

int main() {
int random_number = rand();
printf("隨機數字:%d\n", random_number);
return 0;
}

當你運行這個程序時,你會在屏幕上看到一個隨機數字。但等等!如果你多次運行它,你可能會注意到一件奇怪的事情 - 每次你都會得到同一個數字!這是怎麼回事呢?

這帶我們進入了隨機數生成中的一個重要概念:種子。

種子與 srand() 函數

種子是我們隨機數生成的起點。默認情況下,rand() 在每次運行程序時使用同一個種子,這就是為什麼你會得到相同的“隨機”數字。

為了解決這個問題,我們使用 srand() 函數來設置不同的種子。一個常見的做法是使用當前時間作為種子,這樣每秒都會變化。下面是如何操作的:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main() {
srand(time(NULL));  // 設置種子
int random_number = rand();
printf("隨機數字:%d\n", random_number);
return 0;
}

現在,每次你運行這個程序,你應該會得到一個不同的隨機數!

範例 2:生成特定範圍內的數字

我們經常需要特定範圍內的隨機數。例如,如果我們想模擬擲骰子呢?以下是如何做到這一點:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main() {
srand(time(NULL));
int die_roll = (rand() % 6) + 1;
printf("你擲出了:%d\n", die_roll);
return 0;
}

在這個範例中,我們使用模數運算符 (%) 將範圍限制在 0-5,然後加 1 以將其移動到 1-6。這是一種生成特定範圍內隨機數字的常見技術。

範例 3:生成多個隨機數

現在,讓我們生成多個隨機數。我們將創建一個模擬擲骰子 5 次的簡單程序:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main() {
srand(time(NULL));
printf("擲骰子 5 次:\n");
for (int i = 0; i < 5; i++) {
int roll = (rand() % 6) + 1;
printf("擲骰子 %d:%d\n", i+1, roll);
}
return 0;
}

這個程序使用一個 for 循環來擲骰子 5 次,打印每次的結果。

srand() 函數详解

讓我們仔細看看 srand() 函數。正如我們之前提到的,它為隨機數生成設置種子。以下是一個總結其使用的表格:

函數 描述 參數 返回值
srand() 為隨機數生成設置種子 無符號整數 seed 無 (void)

我們一直在使用的 time(NULL) 返回自 1970 年 1 月 1 日以來的秒數。這個值每秒變化一次,使其成為種子我們隨機數生成器的良好選擇。

記住,你只需要在程序開始時調用一次 srand()。多次使用同一種子將重置隨機數序列,這可能不是你想要的。

結論

好了,各位!我們已經探索了 C 認號生成的基礎知識。我們學習了 rand() 函數,種子對 srand() 的重要性,以及如何生成特定範圍內的數字。

記住,隨機數在編程中非常有用。它們被用在遊戲、模擬、加密等許多領域。隨著你編程旅程的繼續,你會發現隨機數有無數的用途。

繼續練習,繼續編程,最重要的是,玩得開心!誰知道呢?也許你會用這些技能創造下一個大熱門電子遊戲或科學模擬。可能性就像你能生成的隨機數一樣無窮無盡!

Credits: Image by storyset