# 第一堂課
總之先把上課會用到的網站註冊一下 然後在Hackmd紀錄你的帳密
like this:
```
帳:214019@stu.hdsh.ilc.edu.tw
密:1l4xu,4ai6z83
```
可以的話用你自己的帳號就好
Hackmd連結:
[https://hackmd.io/](https://hackmd.io/)
Hydro連結:
http://120.101.182.21/d/hd112/register
設好帳密 然後開始你的程式漫遊
http://120.101.182.21/d/hd112/domain/join
---
# Hello, World!
## 競賽中的 C++ 編程習慣
在競賽編程中,我們強調 **簡潔** 和 **高效**。因此,我們經常會用一些特定技巧來加速編程,例如使用 `bits/stdc++.h` 和 `namespace std`。今天我們會學習如何用這些技術來寫出最簡單的 C++ 程序——「Hello, World」。
---
## 寫一個「Hello, World」程序
### 程序代碼
```cpp
#include <bits/stdc++.h> // 引入所有標準庫
using namespace std; // 省略 std:: 的使用
int main() {
cout << "Hello, World!" << "\n"; // 輸出 Hello, World!
return 0; // 程序正常結束
}
```
## 程序結果
當你執行這個程序時,螢幕上會顯示:
```
Hello, World!
```
### 看不懂,對吧?這就是魔法!
讓我們一起來了解每一行代碼的意思。
---
## 講解
### 什麼是 `bits/stdc++.h`?
`bits/stdc++.h` 是 C++ 中的 **標頭檔**,它包含了所有標準的 C++ 庫。在競賽編程中,為了節省時間,我們常常會使用這個標頭檔來一次性引入所有需要的函數庫,而不用一一單獨引入。
**標準引入方式 vs `bits/stdc++.h`:**
- 標準引入需要逐個包含庫,例如:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
```
- 使用 `bits/stdc++.h` 可以一次性引入所有庫:
```cpp
#include <bits/stdc++.h>
```
**注意**:這種方式通常只在競賽中使用,因為它會引入許多不必要的庫,可能會導致編譯速度變慢。在日常開發中,還是建議只引入所需的庫。
---
### `namespace std;` 是什麼?
在 C++ 中,我們經常使用標準庫中的功能,例如 `cout` 和 `cin`,但這些函數位於 `std` 命名空間中。因此每次使用時,我們都需要加上 `std::` 前綴。
### 使用 `std::` 前綴的方式
```cpp
#include <iostream>
int main() {
std::cout << "Hello, World!" << std::endl;
return 0;
}
```
這樣寫顯得有些冗長,所以我們可以使用 `using namespace std;`,將 `std` 命名空間中的所有內容直接引入,這樣就可以省去 `std::`。
### 使用 `namespace std;` 的方式
```cpp
#include <iostream>
using namespace std;
int main() {
cout << "Hello, World!" << endl;
return 0;
}
```
---
### `cout` 是什麼?
`cout` 是 C++ 的標準輸出流,來自於標準輸入輸出庫 `iostream`。它的作用是將內容輸出到螢幕上。在這裡,我們用它來顯示 `Hello, World!`。
**例子:**
```cpp
cout << "Hello, World!";
```
這行代碼會將引號內的文字顯示在螢幕上。
---
### `\n` 是什麼?
`\n` 是 **換行符**,它告訴電腦在輸出完文字後跳到下一行。你可以把它看作是按下鍵盤的「Enter」鍵。
**例子:**
```cpp
cout << "Hello, World!" << "\n";
```
這行代碼會顯示 `Hello, World!`,並且將游標移到下一行。
---
### `return 0;` 是什麼?
`return 0;` 是 C++ 中用來表示程序成功執行完畢的語句。當程序到達這一行時,它會告訴電腦:**"一切都順利完成了,程序可以結束了。"**
在 `main()` 函數中,`return 0;` 是標準的結尾。如果程序執行成功,系統會收到 0,表示沒有發生錯誤。
---
## 小知識
- **`bits/stdc++.h` 的優點**:它可以加快編程速度,不用每次都記得引入不同的庫,非常適合競賽環境。
- **`using namespace std;` 的意義**:在競賽中,為了節省時間和減少代碼長度,這是常用的做法。
---
## 課後練習
1. 修改這個程序,讓它輸出你的老師的名字而不是「Hello, World!」。
2. 輸出你的輸入 自己查
---