---
# System prepended metadata

title: CH1 探索C++

---

# CH1 探索C++
## 程式的輪廓
``` c++=
#include <iostream>

int main() {
    std::cout << "Hello, world!"
    return 0;    //註解
}
```
第1行並不算是`C++`的程式，但是往往`C++`程式都少不了它，這一行是包含（或導入）一個標項庫文件，名為iostream。iostream是一個`C++`標準庫，它提供了`C++`與輸入/輸出設備。

第3行才是真正的程式，`int main()`是一個函式，我們寫的程式都需要他，因為這是程式的起點。

3至6行大括號{}包着的地方，稱為main的本體（body)用作放入main函式的內容

第4行使用了`C++`的輸出運算子`<<`來輸出一段文字。std::cout是一種稱為“字符輸出流”的物件，常常用來將資訊輸出到終端機。在這個例子中，我們用`<<`運算子將"Hello, world!"這個字串輸出到std::cout，即終端機。**每個`C++`語句的結尾需要用分號`;`來標記。**

第6行。在main()函數的最後，我們通常會加入return 0，這代表當main()函數運行完成後，它將向操作系統回傳一個"0"，代表程式成功無誤地執行完成。

在第6行後的`//`是程式的**註解**(comment)，用作寫給自己或別人閱讀的說明文字，編譯器遇到註解的時候會自動跳過。

## 輸出和輸入
在`C++`程式中，我們通常使用兩個主要的串流物件來處理輸出和輸入：std::cout和std::cin。"cout"代表"character output"，用於輸出文字和數據，而"cin"代表"character input"，用於讀取使用者的輸入。

### std::cout
std::cout是我們最常用的輸出工具。透過使用"插入運算子"（<<），我們可以將多種類型的資料輸出到終端機。以下是一個範例：
```c++=
#include <iostream>

int main() {
    int age = 20;
    std::cout << "Hello, world!\n";
    std::cout << "I am " << age << " years old.\n";
    return 0;
}
```
輸出
```
Hello, world!
I am 20 years old.
```

第3行程式碼定義了主函數main。在一個C++程式中，main函數是程式執行的起始點。

第4行程式碼在main函數中定義了一個名為age的變數，並給它賦值為20。

第5行程式碼用std::cout輸出了一個字串"Hello, world!"到終端機，\n會使輸出換到下一行。

第6行程式碼先輸出字串"I am "，然後輸出變數age的值（20），然後輸出字串" years old."。輸出結果將為"I am 20 years old."。

第7行程式碼表示main函數的結束，並且回傳值為0，表示程式執行成功。

### std::cin
std::cin用於從鍵盤讀取使用者的輸入。我們使用"提取運算子"（>>）將輸入的資料儲存到變數中。以下是一個範例：
```c++=
#include <iostream>

int main() {
    int age;    //宣告一個整數變數age
    std::cout << "Enter your age: ";
    std::cin >> age;    //鍵盤輸入數字
    std::cout << "You are " << age << " years old.\n";
    return 0;
}
```
輸出
```
Enter your age: 25
You are 25 years old.
```

第4行程式碼定義了一個整數變數age，但並未給它賦初值。

第5行程式碼輸出一個提示信息"Enter your age: "，要求使用者輸入他們的年齡。

第6行程式碼讀取使用者的輸入並存入變數age中。

第7行程式碼輸出"You are "，然後輸出變數age的值（使用者輸入的年齡），然後輸出" years old."。

### 名稱空間（Namespace）
名稱空間是用來封裝一系列的識別符（如變數名、函式名等）的一種機制，以防止名稱衝突。當我們在使用`std::cout`和`std::cin`時，`std::`前綴指出了我們正在使用"std"名稱空間中的cout和cin。

為了方便，我們可以使用`using namespace std;`來避免在每次引用std名稱空間中的名稱時都需要添加`std::`，例如在`cout`和`cin`前省略`std::`。以下是一個範例：
```c++=
#include <iostream>
using namespace std;

int main() {
    int age = 20;
    cout << "Hello, world!\n";
    cout << "I am " << age << " years old.\n";
    return 0;
}
```
這個程式的輸出將與先前的程式完全相同。不過，為了避免可能的名稱衝突，一般建議只在需要的地方使用using namespace std;，特別是在大型的專案中。

## 練習
1. 請你印出以下圖形
```
*
**
***
****
*****
```

2. 修改上面的 "Hello, World!" 程式，使其可以問用戶他們的名字，然後打印出 "Hello, [Name]!"。其中 [Name] 是用戶輸入的名字。提示:請用string宣告變數，加入```#include <string>```，```string name```


| input 1  | input 2 |
| -------- | ------- |
| Tom      | Mary    |


| output 1    | output 2     |
| ----------- | ------------ |
| Hello, Tom! | Hello, Mary! |

3. 請修改以下的錯誤程式
```c++=
#include <iostream>
using namespace std;

int main(){
    cout<<"Apple"<<endl
    return 0
}
```

4. C++程式中，哪種符號用於標記語句的結束?

* A. `:`
* B. `;`
* C. `,`
* D. `.`

5. 在iostram中定義的endl作用是什麼?
* A. 結束程式
* B. 空一格
* C. 換行
* D. 註解

## 解答
**1**
```
#include <iostream>
using namespace std;

int main() {
    cout << "*" << endl;
    cout << "**" << endl;
    cout << "***" << endl;
    cout << "****" << endl;
    cout << "*****" << endl;
    return 0;
}
```
**2**
```c++=
#include <iostream>
#include <string>
using namespace std;

int main() {
    string name;
    cout << "Please enter your name: ";
    cin >> name;
    cout << "Hello, " << name << "!\n";
    return 0;
}
```
**3**
```c++=
#include <iostream>
using namespace std;

int main() {
    cout << "Apple" << endl;
    return 0;
}
```
**4**

B

**5**

C