無痛入手 C++:函式庫教學 - 如何產生亂數

更新於 發佈於 閱讀時間約 4 分鐘

C 語言的函式庫定義了許多好用的函式,在寫 C++ 的時候可以拿來用。這是因為 C++ 當初在設計的時候,就有刻意把 C 涵蓋進來。

基本用法

首先要導入 C 語言的標準函式庫:

#include <cstdlib>

以 c 作為開頭表示它是 C 語言的函式庫,只是被我們拿來 C++ 的程式做使用。

負責產生亂數的函式叫做: rand(),它會隨機產生一個介於 0 到某個很大的數值之間的整數。下面的程式會隨機產生 10 個亂數:

#include <iostream>
#include <cstdlib>
using namespace std;

int main() {
for (int i = 0; i < 10; ++i)
cout << rand() << '\n';
return 0;
}

把上述的程式反覆多執行幾遍,應該會發現每次執行所印出來的數字都是一樣的。

這是因為亂數的產生是仰賴某個"種子"(random seed),如果希望得到不同的結果,就需要在每次執行的時候,設定不一樣的種子。

我們可以利用 srand() 這個函式來設定亂數種子。呼叫這個函式的時候要傳入一個數值當作亂數種子,如下:

srand(777);
for (int i = 0; i < 10; ++i)
cout << rand() << '\n';

亂數種子要設成什麼值都無所謂,只要每次執行程式的時候,設定成不一樣種子就可以了。但我們要如何做到這點呢?

我們可以利用 time() 這個函式來做到這點,它會回傳從 1970 年 1 月 1 號到程式呼叫函式的時候經過了多少秒。要使用這個函式的話要導入另一個函式庫:

#include <ctime>

只要將亂數種子設定成 time() 回傳的值,就可以在每次程式執行的時候設定不一樣的亂數種子了。如下:

srand(time(0));
for (int i = 0; i < 10; ++i)
cout << rand() << '\n';

只有在我們想儲存一些其他相關資訊的時候,才需要留意 time() 的參數,以目前的使用情境傳入 0 就可以了。


設定亂數的範圍

有時候我們希望產生的亂數介於某個區間內,比如說,隨機產生一個介於 0 到 10 的整數。可以利用 % 運算子來達到這樣的目的:

srand(time(0));
for (int i = 0; i < 10; ++i)
cout << rand() % 11 << '\n';

注意: 因為 % 是取餘數的意思,所以如果希望隨機產生的數中有可能包含 10,那就要對 11 取餘數,而不是 10。

如果希望產生一個 1 ~ 10的整數的話,則是:

cout << rand() % 10 + 1 << '\n';

透過把餘數加 1,可以讓亂數的最小值從 1 開始。而為了讓最大值是 10,我們需要對 10 取餘數,因為 rand() % 10 的最大值為 9,加上 1 就剛好是 10。

透過上面的例子可以知道,我們可以利用取餘數的對象 (m)要把結果再加多少 (n) 這兩個數字來設定亂數的範圍:

rand() % m + n;

因為 % m 可能的結果為 0 ~ m-1,所以亂數範圍的"長度"為 m,也就是說,假設我們希望隨機產生介於 p ~ q 的亂數的話,m 要等於 (q - p + 1)。而 n 則等於 (p - 0),因為取餘數可能得到的最小值為 0。

利用這個公式,就可以輕鬆設定我們想要的亂數範圍。

範例: 隨機產生介於 -5 ~ 12 的整數

cout << rand() % 18 - 5 << '\n';








留言
avatar-img
留言分享你的想法!
avatar-img
鏟薯員的窩
5會員
14內容數
程式設計 & 電腦系統 & 系統軟體
你可能也想看
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
全球科技產業的焦點,AKA 全村的希望 NVIDIA,於五月底正式發布了他們在今年 2025 第一季的財報 (輝達內部財務年度為 2026 Q1,實際日曆期間為今年二到四月),交出了打敗了市場預期的成績單。然而,在銷售持續高速成長的同時,川普政府加大對於中國的晶片管制......
Thumbnail
全球科技產業的焦點,AKA 全村的希望 NVIDIA,於五月底正式發布了他們在今年 2025 第一季的財報 (輝達內部財務年度為 2026 Q1,實際日曆期間為今年二到四月),交出了打敗了市場預期的成績單。然而,在銷售持續高速成長的同時,川普政府加大對於中國的晶片管制......
Thumbnail
重點摘要: 6 月繼續維持基準利率不變,強調維持高利率主因為關稅 點陣圖表現略為鷹派,收斂 2026、2027 年降息預期 SEP 連續 2 季下修 GDP、上修通膨預測值 --- 1.繼續維持利率不變,強調需要維持高利率是因為關稅: 聯準會 (Fed) 召開 6 月利率會議
Thumbnail
重點摘要: 6 月繼續維持基準利率不變,強調維持高利率主因為關稅 點陣圖表現略為鷹派,收斂 2026、2027 年降息預期 SEP 連續 2 季下修 GDP、上修通膨預測值 --- 1.繼續維持利率不變,強調需要維持高利率是因為關稅: 聯準會 (Fed) 召開 6 月利率會議
Thumbnail
這篇內容,將會講解什麼是函式,以及與函式相關的知識。包括函式的簡介、Runtime Function、自訂函式、Script Function 腳本函式、Method 方法。
Thumbnail
這篇內容,將會講解什麼是函式,以及與函式相關的知識。包括函式的簡介、Runtime Function、自訂函式、Script Function 腳本函式、Method 方法。
Thumbnail
本章節旨在介紹 C# 中函數的基本結構,包括訪問修飾符、返回類型、方法名稱、參數列表和方法體。同時,也介紹了函數的各種呼叫方式、參數傳遞方式和返回值類型。讀者可以通過本章節,深入理解 C# 中函數的使用和應用。
Thumbnail
本章節旨在介紹 C# 中函數的基本結構,包括訪問修飾符、返回類型、方法名稱、參數列表和方法體。同時,也介紹了函數的各種呼叫方式、參數傳遞方式和返回值類型。讀者可以通過本章節,深入理解 C# 中函數的使用和應用。
Thumbnail
C#程式由一或多個檔案組成,包含命名空間、類別、結構、介面、列舉和委派等型別。Main方法是C#應用程式的進入點。在C#中,註解用於在程式碼中添加說明,有單行和多行兩種類型。變數的定義需要指定變數的類型和名稱,可以一次為多個變數賦值。
Thumbnail
C#程式由一或多個檔案組成,包含命名空間、類別、結構、介面、列舉和委派等型別。Main方法是C#應用程式的進入點。在C#中,註解用於在程式碼中添加說明,有單行和多行兩種類型。變數的定義需要指定變數的類型和名稱,可以一次為多個變數賦值。
Thumbnail
C#是一種開源、跨平台、面向對象的編程語言,具有類型安全、泛型、模式匹配等特性。廣泛應用於桌面和Web應用程序、遊戲開發、移動應用、雲計算等領域。全球數十萬家公司像微軟、Unity Technologies、Stack Overflow等使用C#支持其業務。C#還提供豐富的進階學習資源和主題。
Thumbnail
C#是一種開源、跨平台、面向對象的編程語言,具有類型安全、泛型、模式匹配等特性。廣泛應用於桌面和Web應用程序、遊戲開發、移動應用、雲計算等領域。全球數十萬家公司像微軟、Unity Technologies、Stack Overflow等使用C#支持其業務。C#還提供豐富的進階學習資源和主題。
Thumbnail
這個系列是專門寫給 0 程式設計經驗的初學者的 C++ 教學, 無需架設環境,直接開始無痛入手 C++ ~
Thumbnail
這個系列是專門寫給 0 程式設計經驗的初學者的 C++ 教學, 無需架設環境,直接開始無痛入手 C++ ~
Thumbnail
文章講述了作者如何利用c++寫程式做貼圖,包括製作貼圖的構思過程、實際步驟和上傳貼圖的過程。這個故事不僅分享了作者的創作心路歷程,也提供了實際的操作步驟,讓讀者對於用c++做貼圖有更深入的瞭解。
Thumbnail
文章講述了作者如何利用c++寫程式做貼圖,包括製作貼圖的構思過程、實際步驟和上傳貼圖的過程。這個故事不僅分享了作者的創作心路歷程,也提供了實際的操作步驟,讓讀者對於用c++做貼圖有更深入的瞭解。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News