Semorphe

算一算

讓變數裡的值變成新的值。 · ⏱ 約 25 分鐘

你會學到三件事

  1. 怎麼改掉一個變數裡的值
  2. 為什麼 score = score + 5 在數學上是錯的,在程式裡是對的
  3. 整數相除會把小數丟掉

開始之前

前三課的變數,值都是一開始就決定好、之後不再變。 這一課要讓它

一、換掉裡面的值

int main() {
    int score = 95;
    score = 100;
    cout << "分數是 " << score << endl;
    return 0;
}

score = 100; ——注意這一行前面沒有 int

| 有 int | 「造一個新的位子叫 score」 | | 沒 int | 「那個已經存在的 score,換成 100」 |

同一個名字只能造一次位子,但可以換無數次內容。

二、= 不是「等於」

現在把它改成:

int score = 95;
score = score + 5;

用數學的眼睛看,score = score + 5 是在說「一個數等於它自己加五」—— 那不可能成立。

而在程式裡,= 不是「等於」,是「放進去」。這一行要從右邊往左邊讀:

        score + 5      ①  先算右邊 → 95 + 5 = 100
score = ─────────      ②  再把算出來的 100 放進 score

⚠️ 順序是先右後左。 只要記住這一件事,這種寫法就不再奇怪了:

count = count + 1;   // 計數器加一
total = total + n;   // 累加

它們之後會一直出現。

三、五種運算,和一個陷阱

int a = 7, b = 2;
cout << a + b << endl;   // 9
cout << a - b << endl;   // 5
cout << a * b << endl;   // 14
cout << a / b << endl;   // 3   ← ⚠️ 不是 3.5
cout << a % b << endl;   // 1   ← 餘數

7 / 2 印出 3,不是 3.5

因為 ab 都是 int,C++ 認為「整數除以整數,結果也是整數」, 於是把小數點後面直接丟掉(不是四捨五入——7/239/2 也是 4)。

想要 3.5,其中一邊要是小數:

double c = 7.0 / 2;   // 3.5

%取餘數,只有整數能用。它比你現在想的有用得多—— 判斷奇偶(n % 2)、取個位數(n % 10)都靠它。

完成的樣子

int main() {
    int score = 95;
    score = score + 5;
    cout << "分數是 " << score << endl;
    return 0;
}

換你了

接上一課的輸入:讀進一個數字,印出它的兩倍除以 3 的餘數

輸入:14
兩倍是 28
餘數是 2

這一課你做了什麼

如果卡住了

你看到 多半是因為
score 重複宣告 第二行也寫了 int。換值不用再寫型態
除法結果少了小數 兩邊都是整數。讓其中一邊變成 7.0
% 那行報錯 double 用了 %。取餘數只有整數能用
印出的還是舊的值 那一行寫在 cout後面了。程式是由上往下跑的
在編輯器打開這一課 →