無痛入手 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
3會員
14內容數
程式設計 & 電腦系統 & 系統軟體
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
鏟薯員的窩 的其他內容
<iostream> ​在之前的文章有提到過,<iostream> 是專門處理程式的輸入 (input) 以及輸出 (output) 的函式庫。輸入輸出的對象是以電腦作為主角: 輸入指的是「把資料給電腦」,輸出指的是「從電腦那邊取得資料」。 在這個系列的文章中,程式輸入指的都是從鍵盤輸入資料給電
電腦只做一件事情: 運算。 我們所看到的任何酷酷的應用: 不論是網頁動畫、遊戲特效、甚至是 AI 說的話,全部都 是由電腦的運算結果組合而成的。 首先我們來梳理一下各個名詞之間的關聯: 1. 運算分成兩個部分: 運算子 (運算的名稱,如: 加法) 和運算元 (運算的對象,如: 8)。運算就是對資
<iostream> ​在之前的文章有提到過,<iostream> 是專門處理程式的輸入 (input) 以及輸出 (output) 的函式庫。輸入輸出的對象是以電腦作為主角: 輸入指的是「把資料給電腦」,輸出指的是「從電腦那邊取得資料」。 在這個系列的文章中,程式輸入指的都是從鍵盤輸入資料給電
電腦只做一件事情: 運算。 我們所看到的任何酷酷的應用: 不論是網頁動畫、遊戲特效、甚至是 AI 說的話,全部都 是由電腦的運算結果組合而成的。 首先我們來梳理一下各個名詞之間的關聯: 1. 運算分成兩個部分: 運算子 (運算的名稱,如: 加法) 和運算元 (運算的對象,如: 8)。運算就是對資
你可能也想看
Google News 追蹤
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
這篇內容,將會講解什麼是函式,以及與函式相關的知識。包括函式的簡介、Runtime Function、自訂函式、Script Function 腳本函式、Method 方法。
Thumbnail
這篇內容,將會講解什麼是變數,以及與變數相關的知識。包括變數、資料型態、變數賦值、變數的命名規則、變數的作用區域、變數的可重複性、內建變數。
Thumbnail
在這一章中,我們探討了 PHP 中的函數,包括函數的基本結構、不同的函數定義方式(如函數聲明、函數表達式、箭頭函數和匿名函數)以及如何呼叫函數。我們還討論了函數的參數處理方式,包括單個參數、多個參數、預設參數值和剩餘參數。此外,我們還介紹了函數的返回值,包括返回單個值、返回物件和返回函數的情況。
Thumbnail
本章節旨在介紹 C# 中函數的基本結構,包括訪問修飾符、返回類型、方法名稱、參數列表和方法體。同時,也介紹了函數的各種呼叫方式、參數傳遞方式和返回值類型。讀者可以通過本章節,深入理解 C# 中函數的使用和應用。
Thumbnail
C#程式由一或多個檔案組成,包含命名空間、類別、結構、介面、列舉和委派等型別。Main方法是C#應用程式的進入點。在C#中,註解用於在程式碼中添加說明,有單行和多行兩種類型。變數的定義需要指定變數的類型和名稱,可以一次為多個變數賦值。
Thumbnail
C#是一種開源、跨平台、面向對象的編程語言,具有類型安全、泛型、模式匹配等特性。廣泛應用於桌面和Web應用程序、遊戲開發、移動應用、雲計算等領域。全球數十萬家公司像微軟、Unity Technologies、Stack Overflow等使用C#支持其業務。C#還提供豐富的進階學習資源和主題。
Thumbnail
文章講述了作者如何利用c++寫程式做貼圖,包括製作貼圖的構思過程、實際步驟和上傳貼圖的過程。這個故事不僅分享了作者的創作心路歷程,也提供了實際的操作步驟,讓讀者對於用c++做貼圖有更深入的瞭解。
Thumbnail
Python 提供了一個功能豐富的標準函式庫,其中 random 專門用於生成隨機數。本文將介紹 random 的基本介紹,以及函式應用。
Thumbnail
介紹C++ 語法 資料型態,架構說明 程式語言為人類與電腦溝通的工具 程式設計流程: 定義問題 -> 問題分析 -> 撰寫演算法 ->程式撰寫 -> 程式執行及維護
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
這篇內容,將會講解什麼是函式,以及與函式相關的知識。包括函式的簡介、Runtime Function、自訂函式、Script Function 腳本函式、Method 方法。
Thumbnail
這篇內容,將會講解什麼是變數,以及與變數相關的知識。包括變數、資料型態、變數賦值、變數的命名規則、變數的作用區域、變數的可重複性、內建變數。
Thumbnail
在這一章中,我們探討了 PHP 中的函數,包括函數的基本結構、不同的函數定義方式(如函數聲明、函數表達式、箭頭函數和匿名函數)以及如何呼叫函數。我們還討論了函數的參數處理方式,包括單個參數、多個參數、預設參數值和剩餘參數。此外,我們還介紹了函數的返回值,包括返回單個值、返回物件和返回函數的情況。
Thumbnail
本章節旨在介紹 C# 中函數的基本結構,包括訪問修飾符、返回類型、方法名稱、參數列表和方法體。同時,也介紹了函數的各種呼叫方式、參數傳遞方式和返回值類型。讀者可以通過本章節,深入理解 C# 中函數的使用和應用。
Thumbnail
C#程式由一或多個檔案組成,包含命名空間、類別、結構、介面、列舉和委派等型別。Main方法是C#應用程式的進入點。在C#中,註解用於在程式碼中添加說明,有單行和多行兩種類型。變數的定義需要指定變數的類型和名稱,可以一次為多個變數賦值。
Thumbnail
C#是一種開源、跨平台、面向對象的編程語言,具有類型安全、泛型、模式匹配等特性。廣泛應用於桌面和Web應用程序、遊戲開發、移動應用、雲計算等領域。全球數十萬家公司像微軟、Unity Technologies、Stack Overflow等使用C#支持其業務。C#還提供豐富的進階學習資源和主題。
Thumbnail
文章講述了作者如何利用c++寫程式做貼圖,包括製作貼圖的構思過程、實際步驟和上傳貼圖的過程。這個故事不僅分享了作者的創作心路歷程,也提供了實際的操作步驟,讓讀者對於用c++做貼圖有更深入的瞭解。
Thumbnail
Python 提供了一個功能豐富的標準函式庫,其中 random 專門用於生成隨機數。本文將介紹 random 的基本介紹,以及函式應用。
Thumbnail
介紹C++ 語法 資料型態,架構說明 程式語言為人類與電腦溝通的工具 程式設計流程: 定義問題 -> 問題分析 -> 撰寫演算法 ->程式撰寫 -> 程式執行及維護