Semorphe

型別

存東西之前,要先說那是哪一種東西。 · ⏱ 約 25 分鐘

你會學到三件事

  1. 一個值存起來之前,要先說它是哪一種(型別)
  2. 四種基本型別,以及選錯會發生什麼
  3. 名字和文字長得像,意思完全不同

開始之前

上一課你會印出一句寫死的話了:

cout << "Hello!" << endl;

問題是——那句話寫死在程式裡。想印別的,只能回去改程式。 這一課要讓程式記住東西,之後想用就叫它的名字。

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

一、宣告:型別 + 名字

照著打上這一段:

1int main() {2    int age = 16;3    cout << age << endl;4    return 0;5}
16變數age換行印出宣告int(整數)變數age=23

這一行叫做一次宣告,而被宣告出來的那個東西有一個名字: 它叫變數(variable)。下一課整整一課在講它,這一課先看型別那一格。

int age = 16; 這一行做了三件事:

這一段 意思
int 「接下來這個名字,裝的是整數」
age 變數的名字,你自己取的(怎麼取,下一課講)
= 16 一開始裝 16

然後 cout << age << endl; ——注意 age 沒有引號。 所以電腦不是印「age」這三個字母,而是去找那個叫 age 的東西, 把它裡面的 16 印出來。

上一課那條規則現在派上用場了: "age" 是一段文字,age 是一個名字。

試試看把 16 改成 17,執行——印出來的跟著變。 程式沒改,只有資料改了。

二、四種基本型別

int 只裝得下整數。身高 1.72 塞進 int 會被砍成 1,不是四捨五入, 是把小數點後面那些數字直接丟掉。

型別是一個承諾:「我只會裝這一種東西。」

而電腦拿這個承諾去做兩件事:先知道要留多大的位子,再知道 + 這種符號 碰到它的時候該怎麼算。所以宣告的時候要先說清楚是哪一種。照著下面打上這四行:

1int    age    = 16;      // 這一行後面的字是寫給人看的2double height = 1.72;3char   grade  = 'A';4bool   passed = true;
161.72字元 'A'true宣告bool(是/否)變數passed=宣告char(字元)變數grade=宣告double(精確小數)變數height=宣告int(整數)變數age=1234

第一行後面那個 // 叫做註解。電腦跑到它就跳過那一行剩下的部分,所以你可以 在程式裡寫給自己看的話,寫什麼都不影響程式怎麼跑。積木盤上那顆叫「備註」, 有些地方也把它叫做「註解」,是同一件事。

型別 裝什麼 例子
int 整數 16、-3、0
double 有小數點的數 1.72、3.14
char 一個字元 'A'、'7'、' '
bool 真或假 true、false

⚠️ char 用單引號 'A',不是雙引號。 單引號裝的是一個字元,雙引號裝的是 一段文字(碰巧只有一個字)。它們在 C++ 裡是兩種不同的東西,之後會一直遇到。

三、四個一起印

把四個都印出來——在剛才那四行後面,一行一行加上 cout:

1int main() {2    int age = 16;3    double height = 1.72;4    char grade = 'A';5    bool passed = true;6    cout << age << endl;7    cout << height << endl;8    cout << grade << endl;9    cout << passed << endl;10    return 0;11}
161.72字元 'A'true變數age換行變數height換行變數grade換行變數passed換行印出印出印出印出宣告bool(是/否)變數passed=宣告char(字元)變數grade=宣告double(精確小數)變數height=宣告int(整數)變數age=23456789

執行:

16
1.72
A
1

🔴 最後那個 1 就是 true——它不會印出 true 這四個字母。

切到積木那邊看一眼——四個「宣告」積木疊在一起, 每一塊的下拉選單裡就是 int / double / char / bool。 型別不是你背下來的規矩,它是積木上一個看得見的格子。

完成的樣子

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

1#include <iostream>2using namespace std;3int main() {4    int age = 16;5    double height = 1.72;6    char grade = 'A';7    bool passed = true;8    cout << age << endl;9    cout << height << endl;10    cout << grade << endl;11    cout << passed << endl;12    return 0;13}
161.72字元 'A'true變數age換行變數height換行變數grade換行變數passed換行印出印出印出印出宣告bool(是/否)變數passed=宣告char(字元)變數grade=宣告double(精確小數)變數height=宣告int(整數)變數age=4567891011

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

換你了

把 height 那一行的型別從 double 換成 int——⚠️ 名字不要動, height 還是叫 height,變的是它前面那一格:

double height = 1.72;     ← 把這一格
  int  height = 1.72;     ← 換成這個,名字不動

🔴 先猜再跑:1.72 裝進 int 之後印出來是 2 還是 1? 跟旁邊的人各說一個,再按執行——猜錯比猜對值錢。

到編輯器做這一題:練習:把 height 的型別換成 int

做一個

把同一個數字 3.9 用三種型別各存一次,三個都印出來:

int    →  ?
double →  ?
char   →  這一格不要放 3.9,放一個你喜歡的字母

⚠️ 這一題是三行,剛才那支是四行——畫布上還留著上一題的程式, 而它有 int/double/char/bool 四個。所以動手之前先把 bool 那一組拿掉:那顆宣告,和印它的那一行,兩顆都要。

不拿掉的話,裁判會說「你多印了 1 行」——它數的是行數, 而第四行是上一題留下來的,不是你這一題要的。

🔴 先猜再跑:int 那一格會印出什麼?是 4 還是 3? 猜完再執行——猜錯比猜對值錢,那是你發現自己想錯的地方。

到編輯器做這一題:做一個:同一個數字,三種型別

這一課你做了什麼

如果卡住了

你看到 多半是因為
印出來是 age 三個字 加到引號了。變數名字不要引號
身高印出 1 型別寫成 int 了。小數要用 double
'A' 那行報錯 用了雙引號。單一字元要用單引號 '
說某個名字沒宣告過 名字打錯字了——Age 和 age 是兩個不同的名字
在編輯器打開這一課 →