# Chapter 1 - Introduction to C++
> Summary
> 歡迎進入程式學習的世界!在本章節,我將帶大家了解關於程式的基本常識,以及開始撰寫你的第一個程式碼
## 關於寫程式的必備用品
- [ ] 一台電腦(廢話 :poop: )
- [ ] 整合開發環境(Integrated Development Environment,簡稱IDE )
- 像是你寫作業要寫作業本上,寫作文要寫在稿紙上,寫程式的程式碼就要寫在IDE上
- 一些常見的IDE (此處只舉C ++ 的) : Dev-C++, Code Blocks, 如果你跟我一樣是用mac電腦的話就是用 x-code
- 也有許多電神喜歡用文字編輯器(例如Sublime, vim等),如果好奇可以去跟他們交流交流
- 編者os: **Codeblocks 超難用,可是APCS實作會用到**,必須要試試看,不然會像之前某些第一次去考的同學一樣實作直接吃土,這一點一定要注意
- [ ] 一些常用的judge,平常練習使用
- [ ] Zerojudge : 最多初學者使用的judge,水題眾多,適合初學練習
- [ ] Dandanjudge : 復旦自己的judge,有歷屆小考的考古題跟一堆毒瘤題(?)
- [ ] TIOJ:建中的 OJ,很多演算法精華題,也有很多演算法講義
- [ ] 吃的,因為你會餓(X)
## 開始寫程式,你必須要知道
1. 讀書很強的人叫學霸,程式設計很強的人叫**電神**
2. 電神十之八九都會裝弱,周圍如果有一直說自己很弱的人,大概就是電神
e.g. 復旦程設班 進階三人組(X)
3. 與電神溝通的必備貼圖:
 (有電神快拜!!!)
4. 有很多特殊名詞,比如「燒雞」是指在比賽中比得很爛,只解出簡單的題目或著根本沒解出任何一題
## 如何使用本教材
1. 觀念:以條列方式說明重要語法觀念
* **粗體字**:重點,需熟記
* `程式碼框內之內容`:程式碼的用法,類似專有名詞的概念
* 附註框:以更白話的方式闡述上述觀念
2. 例題:
* *觀念例題*:取自歷屆程設班入班考題與APCS觀念考題
* *實作例題*:取自各大 online judge
3. 各章章末皆附上單元習題,分為觀念及實作部分,供加強練習
## 你的第一個程式碼
>
### [ 範例1-1 ] Hello world
```cpp=
#include<iostream>
#include<cstdlib>
using namespace std;
int main()
{
cout<<"hello world"<<endl;
return 0;
}
```
> Expected output: hello world
#### 範例1-1解說
1. `#include<iostream>` `#include<cstdlib>` 是程式碼的**標頭檔**,目的是告訴程式碼你將會在這個程式裡面用到哪一些函式庫裡面的函數,例如cout就是隸屬於iostream函式庫,如果沒有在程式的一開頭含括,就無法使用cout的功能
2. `using namespace std;`設定名稱空間為 std。由於標準函數庫所包含的函數、類別與物件均定義在 std 這個名稱空間中,所以必須指明所使用的名稱空間為 std,以便使用所提供的標準函數庫 ([資料來源](https://www.pws.stu.edu.tw/cmshih0901/Cplus2/An%20Introduction%20to%20C++.pdf))
3. `int main(){};`程式的主體
4. `cout<<"hello world"<<endl;`
* cout<< : 輸出東西到螢幕上
* “......”所包的是**字串常數**,螢幕會印出""內的內容
* endl 是 換行(end of line)的指令,亦可寫成'\n',請參見下一章跳脫字元
* 每一個程式敘述的的後面都要**加分號**!(就跟英文句子最後都要加句點一樣,很重要很重要很重要)
5. `return 0;` 給程式作結,可加可不加(如果沒加,編譯器會自動幫你加),身為一個有素養的初學者,真心建議還是要加
6. 關於大括號的打法,分成兩派,經常戰來戰去:
```cpp
//第一派
int main(){
......
}
```
```cpp
//第二派
int main()
{
......
}
```
究竟哪一派比較好,真的就見仁見智了XD
(編者私心我是第二派的)
#### 執行你的程式
你的第一個程式就這樣寫完了,是不是很簡單愜意?
欸等等,還沒執行啊!
C++所使用的是**編譯器**,也就是你寫好的程式碼要先喂到編譯器裡面,讓編譯器將其轉成電腦看得懂的二進制,然後再讓電腦執行(跟生活中的翻譯人員是不是有幾分相似呢?)
每一個軟體的編譯方法不同,如果是dev c++**,按F9代表編譯,F11是編譯且執行,F10是單純執行**
X-code 的使用者如果要將程式碼編譯需要**按command + R鍵**,此時視窗會顯示build,過一陣子過後就會成功執行囉
### Ch1 練習
1. 觀察下列程式碼,需要修改哪幾行內容,才會使程式正常編譯?
```cpp=
#include<iostream>
#include<cstdilb>
using namespace std;
int main()
{
cout<<"hello wrrrrld"<<endl
}
```
> Ans: Line 2 and Line 105
> Explaination:
> 第二行 cstdilb -> cstdlib
> 第六行忘了打分號
>注意,本題是問**使程式正常編譯**,因此就算輸出的內容不是hello world ,我們也無法把它歸類為語法錯誤(無法使程式正常編譯的錯誤),只能歸為語意錯誤
2. 請撰寫一程式,輸出下列內容
```
***** *******
* *
* * *
***** * *
* * *
* * *
* ********
```
{"metaMigratedAt":"2023-06-15T15:07:09.457Z","metaMigratedFrom":"Content","title":"Chapter 1 - Introduction to C++","breaks":true,"contributors":"[{\"id\":\"29625303-a0ab-4215-b54d-35c95f11006b\",\"add\":2750,\"del\":58},{\"id\":\"6587fbcb-5744-488e-ac7d-8d93a89a11f4\",\"add\":104,\"del\":8}]"}