Q1參數(parameter)與引數(argument)的差別?概念
定義時是參數、呼叫時傳的是引數。如 int add(int a,int b) 的 a、b 是參數;add(3,4) 的 3、4 是引數,會被複製給參數。
Q2int add(int a,int b){return a+b;},add(3,4) 回傳?預測輸出
7。a 收到 3、b 收到 4,return a+b 交回 7。
Q3void 函式可以做什麼?概念
void=做事但不回傳值。可寫 return; 提前結束,或不寫;不可 return 一個值。
Q4void inc(int v){v=v+1;},對 int x=5; 呼叫 inc(x) 後,x 是?預測輸出
5。傳值:v 是 x 的複本,v=v+1 只改複本,main 的 x 不變。
Q5要讓函式真的改到呼叫端的變數,正確做法是?概念
傳位址。函式收 int *v、用 *v += 1 透過位址改原變數,呼叫時 inc(&x)。細節在「指標與記憶體」章。
Q6函式原型(prototype)的作用與寫法?概念
原型是宣告,要分號。int add(int a,int b); 放前面,編譯器才認得放在 main 後面的定義。
Q7遞迴的兩個必備要素是?概念
基底條件+遞迴步驟。基底決定何時停,步驟讓每次問題更靠近基底。
Q8int fact(int n){ return n*fact(n-1); } 會怎樣?抓 bug
無窮遞迴、Stack Overflow。沒有 if(n<=1)return 1;,永遠呼叫自己、call stack 被撐爆。
Q9int sum(int n){if(n<=0)return 0;return n+sum(n-1);},sum(5)=?預測輸出
15。5+4+3+2+1+0=15(即 1+2+…+5)。
Q10int fib(int n){if(n<=2)return 1;return fib(n-1)+fib(n-2);},fib(6)=?(序列 1,1,2,3,5,8)預測輸出
8。fib(6)=fib(5)+fib(4)=5+3=8。