程式語言一 · 導覽投影片
→ / space 前進 ← 回 Esc 總覽 F 全螢幕把重複邏輯包起來、取名、重用(寫一次用多次,改只改一處);把大問題拆成小問題。printf、scanf 本身就是函式。
本投影片只建地圖;每站的完整程式在 PDF 與 index。
int add(int a, int b) { return a + b; }
... add(3, 4) ... // a 收到 3、b 收到 4,回傳 7
mainreturn 把結果交回呼叫處main 從原處繼續參數拿到的是引數的複本。改複本,動不到呼叫端的原變數。
void inc(int v){ v = v + 1; } // 改的是複本
int main(void){ int x = 5; inc(x); printf("%d", x); } // 仍印 5
void inc(int *v){ *v += 1; } 再 inc(&x)。指標細節在「指標與記憶體」章。main 後面時,前面要放原型,結尾有分號。int add(int a,int b);void countdown(int n){
if (n <= 0){ printf("liftoff"); return; } // ① 基底條件:停
printf("%d ", n);
countdown(n - 1); // ② 遞迴步驟:問題變小
}
兩個必備要素:① 基底條件(何時停)② 遞迴步驟(讓問題每次更靠近基底)。
「遞」一路到基底,再「歸」一路回乘。每層 frame 有自己的 n。完整圖在 PDF。
| 症狀 | 成因 |
|---|---|
| 有回傳型態卻沒值 | 忘了 return,或某條路徑沒回傳 |
| 改不到呼叫端變數 | 用了傳值(複本);要傳位址 |
| 程式崩潰 / Stack Overflow | 遞迴忘了基底條件,或步驟沒讓問題變小 |
| 編譯不認得函式 | 定義放 main 後又沒寫原型,或原型漏分號 |