---
# System prepended metadata

title: 第二堂課
tags: [C++講義]

---

# 2-變數的宣告

## 變數宣告

變數是用來儲存資料的容器，裡面可以放各種不同類型的數據，如數字、字母或字串。在 C++ 中，我們要先「宣告」變數，然後才能使用它們。

```cpp
int a = 1;  // 儲存整數
long long b = 2;  // 儲存更大的整數
char c = 'a';  // 儲存單個字元
double d = 2.564;  // 儲存帶小數點的數字
string e = "ABC";  // 儲存一串文字（字串）
```
## 常見的變數型態與範例


---

### 1. **int**
- **用途**：存放整數，用於沒有小數的數值。
- **範例**：
```cpp
int age = 15;  // 表示年齡(age)是15(歲)
```
- **結果**：`age` 會存放整數 `15`。
- **容易混淆的點**：不可用來存放小數，若有小數部分，會自動截掉。例如，`int number = 3.14;` 結果是 `number` 變成 `3`。

### 1.long long 
- **用途**：當 `int` 的範圍不夠大(數字太大)時，使用 `long long` 存放更大的整數。
- **範例**：
```cpp
 long long bigNumber = 123456789012345;  // 超過 int 範圍(±2^31-1)的大數
```
- **結果**：`bigNumber` 會存放數值 `123456789012345`。
- **容易混淆的點**：與 `int` 類似，但可以處理更大的數字。`int` 存儲限制較大，而 `long long` 可以處理更大的正負數(處理上也會較`int`型別更慢)。
- **碎碎念** : 比賽中大部分的情況`int`型別就夠用了，不必要的使用`long long`可能導致運算超時，但是仍然要注意是否可能出現資料在計算過程越界(超出儲存範圍)的情況。

### 3. **char**  

- **用途**：存放單一字符，例如字母、符號。
    - **範例**：
    - ```cpp
      char grade = 'A';  // 存放成績等級
      ```
- **結果**：`grade` 會存放字符 `A`。
- **容易混淆的點**：與 `string` 不同，`char` 只能存放一個字符，而且必須用單引號 `' '`，而 `string` 則可以存放多個字符並用雙引號 `" "`。
- **碎碎念** : 與Python不同，單引號與雙引號分別代表 `char` 與 `string` 的資料型別，兩者不可混用，其中`string` 其實是儲存複數`char`的陣列。

### 4. **double**  
- **用途**：存放帶小數的數值，用於精確的計算，例如溫度、金額等。
    - **範例**：
      ```cpp
      double pi = 3.14159;  // 存放圓周率
      ```
    - **結果**：`pi` 會存放小數 `3.14159`。
    - **容易混淆的點**：與 `int` 不同，`double` 可以存放小數部分(浮點數)，但也會佔用更多記憶體。
    - **碎碎念** : `float` `double` 都可以儲存浮點數，兩者都會在計算上出現**嚴重**誤差(可以Google "0.1 + 0.2 爲何不等於0.3")，但`double` 誤差更小，因此此處不提及`float` 型別。

### 5. **string**  
- **用途**：存放一串文元（字串），用於姓名、訊息等。
    - **範例**：
      ```cpp
      string name = "Alice";  // 存放名字
      ```
- **結果**：`name` 會存放字串 `"Alice"`。
- **容易混淆的點**：與 `char` 不同，`string` 是一串字符，而 `char` 只能存放單一字符。`string` 需要用雙引號 `" "`，`char` 則用單引號 `' '`。

### 6. **bool**  
- **用途**：存放布林值，表示「是」或「否」的狀態，用於邏輯判斷。
    - **範例**：
      ```cpp
      bool isStudent = true;  // 判斷是否為學生
      ```
- **結果**：`isStudent` 會存放布林值 `true`。
- **容易混淆的點**：與數字不同，布林值只有兩種狀態 `true` 或 `false`，分別對應數值 `1` 和 `0`。不要誤將布林值與整數混淆。

這些變數型態各有不同的用途，選擇正確的型態能幫助我們更好地處理數據並節省記憶體。


| **變數型態**  | **用途**             | **容易混淆的點**                                          |
| ------------- | -------------------- | --------------------------------------------------------- |
| **int**       | 存放整數             | 不可存放小數，小數部分會被截掉                            |
| **long long** | 存放超大整數         | 與 `int` 類似，但範圍更大                                 |
| **char**      | 存放單一字符         | 與 `string` 不同，`char` 只能存放一個字符，用單引號  `' '` |
| **double**    | 存放帶小數的數字     | 與 `int` 不同，`double` 可以存放小數，佔用更多記憶體      |
| **string**    | 存放文字字串         | 與 `char` 不同，`string` 存放多個字符，用雙引號 `" "`     |
| **bool**      | 存放布林值（真或假） | 與數字不同，布林值只有 `true` 和 `false`                  |

---

# 輸入與輸出 (C++)

在 C++ 程式中，我們經常需要從使用者那裡**讀入資料**，並且把結果**輸出**到螢幕上。這裡我們來介紹如何使用 `cin` 和 `cout` 進行輸入與輸出操作，並提供簡單的範例來幫助理解。

---


## 基本輸入 (`cin`)

我們使用 `cin` 來從鍵盤讀取資料，並把這些資料存到變數中。語法很簡單：`cin >> 變數名;`

### 範例：
```cpp
int a;
cin >> a;  // 讀入一個整數
```

---


## 基本輸出 (`cout`)

我們使用 `cout` 來將變數的內容顯示在螢幕上。語法：`cout << 變數名;`

### 範例：
```cpp
int a = 5;
cout << a;  // 輸出變數 a 的值 (5)
```

---

## 常用格式符號

我們可以通過一些格式控制符來改變輸出內容的顯示方式，例如使用空格或換行。

| 控制符號 | 作用                           |
| -------- | ------------------------------ |
| `' '`    | 在輸出的變數之間加入空格       |
| `'\n'`   | 換行符號，讓後續輸出顯示在新行 |

---

## 輸入與輸出範例

### 1. 同時讀取多個變數

```cpp
int a;
char b;
double c;
cin >> a >> b >> c;  // 依次讀入整數、字元、小數
```

### 2. 輸出多個變數並用空格分隔

```cpp
int a = 5;
char b = 'x';
double c = 3.14;
cout << a << ' ' << b << ' ' << c << '\n';  // 輸出時有空格與換行
```

### 3. 輸出到多行

```cpp
cout << a << '\n' << b << '\n' << c << '\n';
```
輸出結果：
```
5
x
3.14
```

---

## 小結

- 使用 `cin` 讀取資料，`cout` 輸出資料。
- 使用 `' '` 加空格，`'\n'` 換行來調整輸出的格式。



### 例題 1：多變數輸入與輸出[http://120.101.182.21/d/hd112/p/P5]

### 例題 2：換行與空格 [http://120.101.182.21/d/hd112/p/P6]



---
