--- tags: 2021CRC title: C++基礎語法複習筆記 --- # C++基礎語法複習筆記 2021 / 11 / 12 我們這一節課不會教任何新的語法,這一節課是給大家好好複習之前所學與練習題目的。 如果你之前的課有一些地方沒聽懂、或是需要重新複習一次的話,你可以跟著這份複習筆記複習,而如果你自己有東西要忙的話那這節課你可以忙你的事。 ---- 講師聯絡方式: 謝承恩 * Line:謝承恩 * Discord:chengenhsieh#7644 曾煥軒(火龍果) * Line:曾煥軒 * Discord:ocean#3749 鄧育翔 * Discord:Tony0410^2#6202 --- 這邊有目錄、你可以點自己需要的地方去看 [TOC] --- ## C++基礎、變數與運算 重要概念 : 變數、C++程式基本框架、資料型態、輸入輸出 - C++程式基本框架 ```cpp= #include<iostream> using namespace std; int main() { //裡面塞你要寫的東西 return 0; } ``` - 可以利用 std::cin 和 std::cout 搭配變數來達成輸入輸出 ```cpp= int a; //宣告一個整數變數 a cin >> a; //輸入一個整數,讓 a 存你輸入的值 cout << a << endl; //把a輸出,當然你也可以輸出別的。endl是換行的意思 ``` 資料型態整理: | 大的資料型態分類 | 資料型態的名字 | 介紹 | | ---------------- | -------------- | ---- | | 整數 | int | 就是整數,資料範圍在 $-2^{31}$ ~ $2^{31}-1$ (約+-$2 * 10^9$) | | | long long | 比int還要大的整數,資料範圍可以到 $-2^{63}$ ~ $2^{63}-1$ (約+-$9 * 10^{18}$) | | 浮點數 | float | 精準度沒那麼大的浮點數 | | | double | 精準度比較高的浮點數,建議使用 | | 字元 | char | 只能儲存一個字元的資料型態,如'a' , '1' , '\n' , ' ' 等等 | | 字串 | std::string | 可以存多字元的資料型態(一串句子)(當然也可以只存一個字元或不存字元,稱為空字串) | | 布林值 | bool | 代表一個條件是成立(True)或是不成立(False)的值,在條件判斷中會大量使用 | --- ## C++條件判斷 - if / else / else if ```cpp= #include<iostream> using namespace std; int main() { int a = 10; if(a > 2) cout << 'A'; else cout << 'B'; if(a > 3) cout << 'C'; if(a > 5) cout << 'D'; if(a > 3) cout << 'E'; else if(a > 5) cout << "F"; else cout << 'G'; if(a % 3 == 2) cout << 'H'; else cout << 'I'; // ACDEI } ``` ---- - **&&** ~and~ **||** ~and~ **!** - 巢狀條件判斷 ```cpp= #include<iostream> using namespace std; int main() { int a = 10; int b = 5 ; int c = 0 ; if(a > b) cout << 'A'; if(b > c && b > a) cout << 'B'; if(b > c || b > a) cout << 'C'; if(!(b > c && b > a)) cout << 'D'; // ACD if(b > c) { if(b > a) cout << 'B'; } // 效力等同第 11 行 if(1 > 2) { if(4 > 3) cout << 'A'; else cout << 'B'; } else { if(4 > 3) cout << 'C'; else cout << 'D'; } // only C //常見錯誤: //1. if(a > b > c) cout << "FALSE"; //ans. if(a>b && b>c) cout << "TRUE"; //2. if(a = 1) cout << "FALSE"; //ans. if(a == 1) cout << "TRUE"; //3.(若a < 5 ,輸出"a is 數字a" ,不然不輸出) /* 3. if(a > 5) cout << "a is "; cout << a; ans. if(a < 5){ cout << "a is "; cout << a; } */ } ``` --- ## 迴圈 - for vs while ```cpp= #include<iostream> using namespace std; int main() { for(int i=0 ; i < 10 ; i++) cout << i << " "; // 0 1 2 3 4 5 6 7 8 9 // cout << i; (此時會編譯錯誤) int i=0; while(i < 10) { cout << i << " "; i++; } //跟上面功能相同 } ``` ---- - 巢狀迴圈(99乘法表) ```cpp= #include<iostream> using namespace std; int main() { for(int i=1 ; i<=9 ; i++) { for(int j=1 ; j<=9 ; j++) { cout << i << "*" << j << "=" << i * j << "\t"; } cout << "\n"; } } ``` ---- - 連續輸入 for ```cpp= #include<iostream> using namespace std; int main() { int n , ans = 0; cin >> n; for(int i=0 ; i<n ; i++) { int k; cin >> k; ans += k; } cout << ans; // 輸入: 5 1 2 3 4 5 // 輸出: 15 } ``` - while(cin) ```cpp= #include<iostream> using namespace std; int main() { int k , ans = 0; while(cin >> k) ans += k; // 輸入 1 2 3 4 5 (end) // 輸出 15 } // 當不能cin // (cin>>n) 會 fail -> 結束迴圈 ``` --- ## 陣列 ```cpp= #include<iostream> using namespace std; int main() { int a[10] ; int b[10] = {}; // {0,0,0,0,0,0,0,0,0,0} for(int i=0 ; i<10 ; i++) { a[i] = i+1; // {1,2,3,4,5,6,7,8,9,10} } } ``` --- ## 練習題 [HackerRank](https://www.hackerrank.com/) : 推薦給英文好的同學,他的程式寫起來比較直觀,而且也有很好的引導。 :::spoiler Greenjudge 1. [a009 : 團購力量大](http://www.tcgs.tc.edu.tw:1218/ShowProblem?problemid=a009) 3. [a014 : 貨比三家](http://www.tcgs.tc.edu.tw:1218/ShowProblem?problemid=a014) 4. [a024 所有位數和](http://www.tcgs.tc.edu.tw:1218/ShowProblem?problemid=a024) 5. [a025 數字倒轉](http://www.tcgs.tc.edu.tw:1218/ShowProblem?problemid=a025) 6. [b039 公平的戰役(EOF版)](http://www.tcgs.tc.edu.tw:1218/ShowProblem?problemid=a039) 7. [b002 找最大值](http://www.tcgs.tc.edu.tw:1218/ShowProblem?problemid=b002) ::: :::spoiler ZeroJudge 1. [a005 Eva的回家作業](https://zerojudge.tw/ShowProblem?problemid=a005) 2. [a015 矩陣的翻轉](https://zerojudge.tw/ShowProblem?problemid=a015) 3. [d487: Order's computation process](https://zerojudge.tw/ShowProblem?problemid=d487) 4. [e357: 遞迴函數練習](https://zerojudge.tw/ShowProblem?problemid=e357) ::: <br><br> [火龍果筆記](https://hackmd.io/@nn1oeoPyToqO5ohGOU5ppQ/B1_yWncvY#/) --- ### 小叮嚀: 上課時間實在沒有足夠的時間給你們自己練習, 我們只能帶過觀念,講一些題目,讓你們有解題的能力, 光上社課不寫程式的話,很難有進步, 如果有問題的話,實在歡迎你們找講師提問。 不知道怎麼起步的話,強烈建議先寫完 Greenjudge 基礎題庫(a 題庫) 而 ZeroJudge 的基礎題庫因為沒有照著難度分類,也沒有依照使用的語法分類, 導致每一題的難度不能依照他們的題號來判斷。 所以建議已經弄懂我們教的內容,並且也解了幾題 GreenJudge 的題目鍊手過後再去挑戰喔 ----