Try   HackMD

C++基礎語法複習筆記

2021 / 11 / 12
我們這一節課不會教任何新的語法,這一節課是給大家好好複習之前所學與練習題目的。
如果你之前的課有一些地方沒聽懂、或是需要重新複習一次的話,你可以跟著這份複習筆記複習,而如果你自己有東西要忙的話那這節課你可以忙你的事。


講師聯絡方式:

謝承恩

  • Line:謝承恩
  • Discord:chengenhsieh#7644

曾煥軒(火龍果)

  • Line:曾煥軒
  • Discord:ocean#3749

鄧育翔

  • Discord:Tony0410^2#6202

這邊有目錄、你可以點自己需要的地方去看


C++基礎、變數與運算

重要概念 : 變數、C++程式基本框架、資料型態、輸入輸出

  • C++程式基本框架

    ​​ #include<iostream> ​​ using namespace std; ​​ int main() ​​ { ​​ //裡面塞你要寫的東西 ​​ return 0; ​​ }
  • 可以利用 std::cin 和 std::cout 搭配變數來達成輸入輸出

int a; //宣告一個整數變數 a cin >> a; //輸入一個整數,讓 a 存你輸入的值 cout << a << endl; //把a輸出,當然你也可以輸出別的。endl是換行的意思

資料型態整理:

大的資料型態分類 資料型態的名字 介紹
整數 int 就是整數,資料範圍在
231
~
2311
(約±
2109
long long 比int還要大的整數,資料範圍可以到
263
~
2631
(約±
91018
浮點數 float 精準度沒那麼大的浮點數
double 精準度比較高的浮點數,建議使用
字元 char 只能儲存一個字元的資料型態,如'a' , '1' , '\n' , ' ' 等等
字串 std::string 可以存多字元的資料型態(一串句子)(當然也可以只存一個字元或不存字元,稱為空字串)
布林值 bool 代表一個條件是成立(True)或是不成立(False)的值,在條件判斷中會大量使用

C++條件判斷

  • if / else / else if
#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 !
  • 巢狀條件判斷
#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
#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乘法表)
#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
#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)
#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 -> 結束迴圈

陣列

#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 : 推薦給英文好的同學,他的程式寫起來比較直觀,而且也有很好的引導。

Greenjudge
  1. a009 : 團購力量大
  2. a014 : 貨比三家
  3. a024 所有位數和
  4. a025 數字倒轉
  5. b039 公平的戰役(EOF版)
  6. b002 找最大值
ZeroJudge
  1. a005 Eva的回家作業
  2. a015 矩陣的翻轉
  3. d487: Order's computation process
  4. e357: 遞迴函數練習




火龍果筆記


小叮嚀:

上課時間實在沒有足夠的時間給你們自己練習,
我們只能帶過觀念,講一些題目,讓你們有解題的能力,
光上社課不寫程式的話,很難有進步,
如果有問題的話,實在歡迎你們找講師提問。

不知道怎麼起步的話,強烈建議先寫完 Greenjudge 基礎題庫(a 題庫)

而 ZeroJudge 的基礎題庫因為沒有照著難度分類,也沒有依照使用的語法分類,
導致每一題的難度不能依照他們的題號來判斷。
所以建議已經弄懂我們教的內容,並且也解了幾題 GreenJudge 的題目鍊手過後再去挑戰喔