想像一下…
還記得 3.9 排序三個整數 嗎?當時我們用「比較+交換」把三個數由小到大排好:
int a, b, c;
cin >> a >> b >> c;
// 第 1 步:讓 a ≤ b(順序不對就交換 a、b)
if (a > b) {
int t = a;
a = b;
b = t;
}
// 第 2 步:讓 a ≤ c,做完後 a 就是三者中最小的
if (a > c) {
int t = a;
a = c;
c = t;
}
// 第 3 步:最後排好 b、c
if (b > c) {
int t = b;
b = c;
c = t;
}
cout << a << " " << b << " " << c << endl; // 由小到大
仔細看:同一段「用暫存變數交換」的邏輯,一字不差地寫了三次。這次只有三個數還好,哪天要處理更多數字、或想把交換的寫法改掉,就得逐一改好幾處——只要漏改或抄錯一處,程式就錯了。
如果能把「交換兩個變數」這件事定義一次、取個名字,之後每次要交換就喊一聲名字,程式會變成這樣:
#include<iostream>
using namespace std;
// 交換兩個變數的值(參數上的 & 是本單元的重點之一,7.5 會解釋)
void mySwap(int &x, int &y) {
int t = x;
x = y;
y = t;
}
int main() {
int a, b, c;
cin >> a >> b >> c;
if (a > b) mySwap(a, b); // 讓 a <= b
if (a > c) mySwap(a, c); // 讓 a <= c
if (b > c) mySwap(b, c); // 最後排好 b、c
cout << a << " " << b << " " << c << endl;
return 0;
}
三個 if 一行一句、一眼看懂;交換的邏輯只寫一次,要改只改一處。這個「定義一次、到處使用」的東西,就是本單元的主角——函式。
(mySwap 參數上那個小小的 & 先照抄就好——為什麼少了它就交換不了,是 7.5 的重頭戲。)