--- title: CPP基礎.Lesson 1 description: tags: 1th,講義 --- # CPP基礎.Lesson 1 ## 建立開發環境 ### 常用的IDE (整合開發環境) - Code::Blocks [下載連結](https://www.codeblocks.org/downloads/binaries/) 推薦下載 -setup.exe 的那個版本比較不用設定一些東西 - dev cpp (已停止更新) 但是他有中文版,使用起來也很簡單,適合初學者使用。 ## 基本程式架構&`cout` 下面是一個最簡單的C++程式範例 ```cpp= #include <iostream> using namespace std; int main() { cout << "Hello! World!"; } ``` 猜的出他在做什麼嗎? 他可以在螢幕上印出```Hello! World!``` 讓我們一行一行看看他在做什麼吧! ### `#include <iostream> ` `#include`顧名思義就是引入某個東西的意思 以這行來說,他引入了`<iostream>`這個函式庫 這個函式庫包含了可以把輸入輸出程式碼變成組合語言的文件。 > 組合語言是一種機器看的懂的程式碼 > p.s. 有興趣可以參考 https://godbolt.org/ :::info 語法教室 :mega: 其他常見的標頭檔 ```cpp //懶人專用 一次引入所有常用的(g++專用,clang會編譯不過) <bits/stdc++.h> //STL 函式 <algorithm> //資料結構 <list> <map> <queue> <set> <stack> <vector> //輸入輸出 <iostream> <cstdio> //數學 <cmath> ``` ::: ### `using namespace std;` 使用`std`這個命名空間 > 命名空間是避免大家使用同樣的名稱為類別、物件(簡單來說就是程式裡的變數那些的,以後會學?)命名的一種機制 > > 我們可做這樣的比喻:在現實生活中,我們可能會在同一班就遇到同名同姓的人, 但 C++ 程式 (同一班) 卻不允許有同名同姓的情況發生,因為當有同名同姓的人出現時,電腦會無法判斷到底現在是在叫哪個人而產生程式的錯誤。 ### `int main() { ... }` 程式的進入點,在`{ }`裡面放你的程式碼 ### `cout << "Hello! World!";` cout中的c是字元(character)的意思 [(如果你想知道更多)](https://www.stroustrup.com/bs_faq2.html#cout) cout就是"character output" 可以在螢幕上印出`Hello! World!` `<<`用來對cout這個"輸出流"重載 關於資料流可以花一整堂課解釋 這裡就先知道cout的用法就行 :::info 語法教室 :mega: ```cpp //example 1 cout << "在雙引號裡打你想要的字"; //example 2 int a = 1; //int 是整數的意思,這個之後會說到 cout << a; //印出變數a的內容 //換行方法1 cout << "在雙引號裡打你想要的字\n"; //加入 \n 來換行 cout << a << "\n"; //換行方法2 cout << "在雙引號裡打你想要的字" << endl; //加入 endl 來換行 cout << a << endl; ``` 還有其他很多輸出語法等著你去發掘喔! 關於endl操縱符可以參考一下 [這篇](/8EDkg4_8TwOylvPek8fwRw) ::: ## 變數 用來儲存一個會變的數值(可以是整數,小數,文字....) ### 常見的變數型態 | 型態 | 中文 | 英文 | 可儲存的資料 | | -------- |:-------------------- |:------------------------------- |:------------------------------ | | `int` | 整數 | Integer | -2,147,483,648 至2,147,483,647 | | `long long` | 長整數 | Long long integer | $-2^{63}$ 至 $2^{63}-1$ | | `float` | 浮點數(小數)(單精度) | floating point | $10^{-38}$ ~ $10^{38}$ | | `double` | 浮點數(小數)(雙精度) | Double-precision floating-point | $10^{-308}$~$10^{308}$ | | `char` | 字元 | Character | 各種字母和符號 | | `string` | 字串 | String | 各種句子 | | `bool` | 布林(是非) | boolean | `true`,`false` | ### 定義一個變數 :::info 語法教室 :mega: ```cpp int a; //定義一個整數變數名字叫 a int a = 0; //可以直接給他值 char b = 'a'; //給值的時候字元要使用單引號 string c = "hi, how are you?"; //字串用雙引號 ``` 除此之外還有各種修飾子,以後會說。有興趣的人可以先去研究! ::: ## `cin` ### 範例 ```cpp= #include <iostream> using namespace std; int main() { int a = 0; cin >> a; //輸入a cout << a; //印出a } ``` :::info 語法教室 :mega: `cin >>` + `變數名` + `;` ```cpp int a; cin >> a; ``` ::: ## Coding Style **Overall Goal** - 易讀 - 易改 - 一致 - 看起來舒服 寫程式的風格~~ 除了讓自己看的懂,也要讓別人看的懂才是好的程式! :::danger 永遠不要相信未來的自己會懂你 ::: ### 變數命名方式 - 小駝峰 (lower camel case) 第一個單字的首字母小寫,其餘單字首字母大寫 > camelCase - 大駝峰 (upper camel case,Pascal Case) 首字母也大寫 > PascalCase - snake case 用 _ 來分隔單字 > snake_case - [匈牙利命名法(Hungarian notation)](https://zh.wikipedia.org/wiki/匈牙利命名法) ### 縮排的重要 除非你立志參加[C語言混亂代碼大賽](http://www.ioccc.org/)否則縮排很重要! - 沒縮排 ```cpp= #include <iostream> using namespace std; int main() { for(int i = 0; i < 10; i++) { for(int j = 0; j < 10; j++) { cout << "Hello! World!"; } } } ``` - 有縮排 ```cpp= #include <iostream> using namespace std; int main() { for(int i = 0; i < 10; i++) { for(int j = 0; j < 10; j++) { cout << "Hello! World!"; } } } ``` > 別問這程式的意義是什麼 他沒有意義 ### 換行 恩恩恩 對就是適當時機要記得換行 ### 寫註解 給別人或給自己看 - 適時加上註解有助於理解 - 避免非ASCII的文字 > 注意程式檔案的編碼,最好存utf-8比較不會出錯 > 如果下次打開程式發現是亂碼可以嘗試以big-5編碼開啟 ### 有名的Coding Style們 - [Google C++ Style Guide](https://google.github.io/styleguide/cppguide.html) - [Google C++ Style Guide 中文](http://www.slmt.tw/google-cpp-style-guide-zh-tw/index.html#%E9%80%A3%E7%B5%90) - [C++ Core Guideline](http://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#main) - [C/C++ Programming Style Guidelines](http://squall.cs.ntou.edu.tw/cpp/102spring/C%20&%20C%2B%2B%20Programming%20Style%20Guidlines.pdf)