算一算
讓變數裡的值變成新的值。 · ⏱ 約 25 分鐘
你會學到三件事
- 怎麼改掉一個變數裡的值
- 為什麼
score = score + 5 在數學上是錯的,在程式裡是對的
- 整數相除會把小數丟掉
開始之前
前三課的變數,值都是一開始就決定好、之後不再變。
這一課要讓它變。
一、換掉裡面的值
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 = score + 5
↑ ↓
└─────────┘
② 再放回去 ① 先算這一邊:95 + 5 = 100
⚠️ 順序是先右後左。 只要記住這一件事,這種寫法就不再奇怪了:
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。
因為 a 和 b 都是 int,C++ 認為「整數除以整數,結果也是整數」,
於是把小數點後面直接丟掉(不是四捨五入——7/2 是 3,9/2 也是 4)。
想要 3.5,其中一邊要是小數:
double c = 7.0 / 2; // 3.5
% 是取餘數,只有整數能用。它比你現在想的有用得多——
判斷奇偶(n % 2)、取個位數(n % 10)都靠它。
四、開根號與次方
五種運算裡沒有「次方」,也沒有「開根號」——^ 在 C++ 裡不是次方
(它是另一件事,這一課用不到)。這兩個要另外叫:
#include <cmath>
cout << pow(2, 10) << endl; // 1024 ← 2 的 10 次方
cout << sqrt(16) << endl; // 4 ← 16 開根號
積木盤上它們在「運算」裡:一顆寫著「… 的 … 次方」,
另一顆是一個下拉,選 sqrt(平方根)。
⚠️ 它們回傳的是小數(double),不是整數。所以:
cout << sqrt(16) << endl; // 4 ← 剛好整除,看起來像整數
cout << sqrt(2) << endl; // 1.41421
🔴 而 sqrt(16) 印出 4 而不是 4.0,是因為 cout 會把沒有小數的那些省略
——那是印出來的樣子,不是它裡面裝的東西。
⚠️ 要用它們,程式最上面要有 #include <cmath>。
🟢 而在積木這一邊你不用管:拖出那顆積木,上面那一行會自己出現。
完成的樣子
這一課的參考做法——程式碼每一行的號碼,就印在對應的那塊積木上。
1#include <iostream>2using namespace std;3int main() {4 int score = 95;5 score = score + 5;6 cout << "分數是 " << score << endl;7 return 0;8}
換你了
接第 4 課的輸入:讀進一個數字,印出它的兩倍和除以 3 的餘數。
輸入:14
兩倍是 28
餘數是 2
到編輯器做這一題:練習:兩倍與餘數
做一個
讀進一個金額,印出要給幾張 500、100、50、10、5、1(六行,由大到小)。
提示:/ 拿張數,% 拿剩下的。⚠️ 裁判用的是 1688。
🔴 做完想一件事:如果硬幣只有 3 元和 5 元,要湊 11 元,
從大的開始拿會發生什麼?(先拿 5、5,剩 1,湊不出來——而 3+3+5 明明可以。)
「每次都拿最大的」這個做法在台幣上剛好對,而它不是永遠對的。
到編輯器做這一題:做一個:找零錢
這一課你做了什麼
- 你用不帶型態的
score = ... 換掉了變數的值
- 你知道
= 要從右邊讀到左邊,不是數學的等號
- 你知道
7 / 2 是 3,而 % 拿得到那個被丟掉的餘數
如果卡住了
| 你看到 |
多半是因為 |
說 score 重複宣告 |
第二行也寫了 int。換值不用再寫型態 |
| 除法結果少了小數 |
兩邊都是整數。讓其中一邊變成 7.0 |
% 那行報錯 |
對 double 用了 %。取餘數只有整數能用 |
| 印出的還是舊的值 |
那一行寫在 cout 的後面了。程式是由上往下跑的 |
在編輯器打開這一課 →