Semorphe

組合技

把「拿出來、算一下、放回去」縮成一個符號。 · ⏱ 約 15 分鐘

你會學到三件事

  1. += -= 就是第 6 課那個形狀的縮寫
  2. n++ 是「加一」,而它有兩種寫法
  3. 這些縮寫是方便,不是新東西

開始之前

第 6 課那一行:

score = score + 5;

它出現得太頻繁了——計數、累加、扣血、加分,全都是這個形狀。 所以 C++ 給了它一個縮寫。

🟢 先把編輯器打開,跟著下面一起做:跟著做

一、+=

這是同一件事的簡寫——打上這三行比較看看:

1int n = 10;2n += 5;        // 完全等於 n = n + 5;3cout << n << endl;    // 15
10變數n5變數n換行0回傳印出把加上(+=)宣告int(整數)變數n=定義函式 回傳型別int(整數)main使用命名空間std引入函式庫iostream(輸入輸出)123

念作「n 加等於 5」,做的事是「n 變成 n 加 5」。

五個都有:

🔎 這一段是試一下——打了看結果就好,不要留在程式裡。

1n += 5;2n -= 3;3n *= 2;4n /= 4;5n %= 3;
變數n5變數n3變數n2變數n4變數n3把取餘數(%=)把除以(/=)把乘以(*=)把減去(-=)把加上(+=)12345

它們沒有做任何新的事——都是「先算右邊、再放回左邊」的縮寫。 所以第 6 課那條規則還是唯一要記的規則。

二、++

加一實在太常用了,所以它又有一個更短的縮寫:

1n++;      // 完全等於 n += 1;  也等於 n = n + 1;2n--;      // 減一
變數n變數n減 1(--)後置加 1(++)後置12

你在第 11 課的 for 迴圈裡會一直看到它。

⚠️ n++ 和 ++n

兩種都是加一,差別在「這個式子本身」算出什麼:

int a = 5;
cout << a++ << endl;   // 印 5,然後 a 變成 6   ← 先給值,後加
int b = 5;
cout << ++b << endl;   // b 先變成 6,然後印 6   ← 先加,後給值

單獨寫一行的時候兩者完全一樣(n++; 和 ++n; 沒差別)。 差別只在你把它塞進別的式子裡的時候。

建議:初學階段一律單獨寫一行。 把 ++ 塞進 cout 或 if 裡是一個讀起來很累的習慣, 而它省下的字數不值得。

完成的樣子

這一課的參考做法——程式碼每一行的號碼,就印在對應的那塊積木上。

1#include <iostream>2using namespace std;3int main() {4    int n = 10;5    n += 5;6    n -= 3;7    n++;8    cout << n << endl;9    return 0;10}
10變數n5變數n3變數n變數n換行0回傳印出加 1(++)後置把減去(-=)把加上(+=)宣告int(整數)變數n=定義函式 回傳型別int(整數)main使用命名空間std引入函式庫iostream(輸入輸出)123456789

把積木打散,自己排回去:排回去:把剛才那支程式的積木排好

換你了

不用 +=、不用 ++,把上面那段改寫成第 6 課的長寫法, 確認它印出來一模一樣。

確認完再把它改回來——你要相信的是「這兩種寫法真的相同」, 不是「課本說它們相同」。

到編輯器做這一題:練習:改寫成長寫法,印出一模一樣的 13

做一個

起薪 22000,連續加薪三次,每次加現在薪水的十分之一。印出最後的薪水。

🔴 三次都要用 += 寫。⚠️ 而它是整數除法——每一次的十分之一都會把小數丟掉, 所以答案不是 22000 × 1.1³。

到編輯器做這一題:做一個:三次加薪

這一課你做了什麼

如果卡住了

你看到 多半是因為
n =+ 5 沒有報錯,結果卻很怪 順序寫反了。那被讀成 n = (+5)
a++ 印出來少一 那是 a++ 的行為(先給值後加)。單獨寫一行就沒這問題
++ 對 string 報錯 加一只有數字能用
在編輯器打開這一課 →