# 第一階段回顧 ###### 04.21 鄭余玄 ---- ## 小提醒 - 下週是階段考,不能來的要先請假 - 已經公佈去年練習題 ---- ## 第一階段回顧 - 資料存取 - 變數宣告與使用、陣列 - 邏輯運算 - if-else - 流程控制 - while, for-loop, break, continue - 字串 - cstring - 函數 - 呼叫函數、撰寫函數、參數傳遞 - 遞迴 --- ## 程式進入點 - main ```clang int main() { // Do something ... return 0; } ``` --- # 資料相關 ---- ## 談談變數 - 變數,可以想像是一個有大小限制的箱子 - 可以放整數、字元等進去箱子 - 型態,則是箱子的標籤 - 可以箱子有整數、字元大小的性質 - 命名,就是如何稱呼這個箱子 ---- ## 宣告變數 ```clang int a = 2; long long int b = 2147453648; double c = 3.14; char d = 'Z'; char e[] = "Hello"; char f[7] = "Sprout"; ``` --- ## 談談 cout - cout,重點是 out,是 output 的意思 - 因為是 out,所以開口要向外,記得是 `cout <<` - 它會把放在 << 後的東西塞到 stdout 中 - 就是那個小黑框 ---- ## `std::cout` ```cpp #include <iostream> using namespace std; int main() { cout << "Hello, sprout" << endl; cout << 1 + 3 << endl; cout << "1 + 3" << endl; return 0; } ``` ---- ## `std::cout` ```cpp #include <iostream> using namespace std; int main() { int zero = 0; double pi = 3.14; char hello[] = "Hello, sprout"; cout << zero << endl; cout << pi << endl; cout << hello << endl; return 0; } ``` ---- ## using namespace std ```cpp #include <iostream> // using namespace std; int main() { int zero = 0; double pi = 3.14; char hello[] = "Hello, sprout"; std::cout << zero << std::endl; std::cout << pi << std::endl; std::cout << hello << std::endl; return 0; } ``` ---- ## using namespace std ```cpp #include <iostream> using std::cout; using std::endl; int main() { int zero = 0; double pi = 3.14; char hello[] = "Hello, sprout"; cout << zero << endl; cout << pi << endl; cout << hello << endl; return 0; } ``` --- ## 談談 cin - cin,重點是 in,是 input 的意思 - 因為是 in,所以開口要向內,記得是 `cin >>` - 它會從 stdin(鍵盤輸入)抓東西塞到 >> 後的東西 ---- ## `std::cin` ```clang int length; char name[100]; std::cin >> length >> name; ``` --- # 邏輯運算相關 ---- ## 談談判斷式 - 一個 `=` 叫做 assign,絕對不是拿來判斷的 - `==` 這個才叫等於,請認明**兩個**等號 - `!=` 這個是不等於,前面是半形驚嘆號 - ~~`10 >= b >= 0`~~ 會 GG,多可條件要用 `&&` `||` 串起來 ---- ## 比較條件 ```clang if (a >= 0 && a < 100) { // do something } else if (b != 0) { // do something } else { // do something } ``` --- # 流程控制相關 ---- ## 談談 while - while(條件式發生時) { 做事 } - do { 做事 } while(條件式發生時)**;** - 條件如果寫爛,BOOM!!無窮迴圈 - 使用 `while (1) {}` 要小心 ---- ## 使用方法 ```clang while (a > 0) { // do something } while (1) { if (a > 0) break; // do something } do { // do something } while (a > 0); ``` ---- ## 談談 for - for (初始化; 條件判斷; 迭代步驟) { 做事 } - 忘記初始化。BOOM! - 條件判斷錯誤。BOOM!! - 迭代錯誤。BOOM!!! - 要寫 for (;;) {} 一定要知道在做什麼 ---- ## 使用方法 ```clang int a[200][200], b[200][200]; int n = 100, m = 10; for (int i = 0; i < n; ++i) { for (int j = 0; j < m; ++j) { b[i][j] = a[j][i]; } } ``` ---- ## 小心變數 ```clang int a[200][200], b[200][200]; int n = 100, m = 10; for (int i = 0; i < n; ++i) { for (int j = 0; j < m; ++i) { // GG b[i][j] = a[j][i]; } } ``` ---- ## 談談 break - 跳出現在的 loop - 不只不做 break 後的東西,更是離開 loop scope - 但是一次只能跳出一層 ---- ## 談談 continue - 不做 continue 後的是,回到 loop 開頭 - 沒有離開 loop scope --- ## 談談 cstring - char str[1000]; - 寫題目的時候,大小請開好開滿... - 不要忘記字串最後由 \0 結尾 ---- ## cstring 相關函數 - 比較請用 `strcmp` - 串接請用 `strcat` - 複製請用 `strcpy` --- ## 談談函數 - 型態 函數名稱(參數) { 做事 } ```clang int sprout_v1() { return 1 + 1; } void run() { // do something } ``` ```clang int f(double); int main() { double x = 1.6; int y = f(x); } int f(double z) { int x = z / 2; if (x / 2 == 0) return x; return 3 * z + 1; } ``` --- ## 談談 OJ ![](https://i.imgur.com/YMmBWc1.png) ---- ## 談談 OJ - 注意行內空格 - 注意行尾是否換行(例如最後一筆) - 輸入結束條件 - 只通過範例輸入輸出,但你的程式可能不一定是正確 ---- ## 常見錯誤訊息 免則聲明(?:以下列出是**可能**解決方向,仍有很高可能是其他錯誤方式 - Wrong Answer:答案錯了,也可能是格式有錯 - Compile Error:編譯錯誤,可能是語法錯誤 - 回頭檢查分號、大中小括號、變數宣告等等 ---- ## 常見錯誤訊息 - Time Limit Exceeded:程式跑太久 - 進入無窮迴圈?有結束等待輸入? - 要更有效率的寫法? - Runtime Error:程式跑一跑壞了 - 陣列存取到外面?存取到不存在的物件? --- ## GLHF
{"metaMigratedAt":"2023-06-14T16:16:49.827Z","metaMigratedFrom":"YAML","title":"第一階段回顧","breaks":true,"slideOptions":"{\"theme\":\"serif\"}","contributors":"[]"}
    434 views