# Function by: hush --- ## 函式(function)是什麼? ---- 不是韓式炸雞腿 ---- 把一段程式碼包裝以便重複使用的工具 ---- - 優點: 1. 使同樣的程式碼容易被**重複使用** 2. 使整體程式的**可讀性提升** 3. 拿來遞迴~~這才是主因~~ - 缺點: 1. ~~寫函式好麻煩~~ --- ## 語法 --- ### 宣告的語法 ```cpp= <函式回傳值的型別> <函式的名字>(<參數們>) { //內容,然後函式裡請縮排 return <回傳的東西>; //遇到return函式就結束了 } ``` ---- 參數可以不用給,也可以給好幾個,語法: ```cpp= (<參數型別1> <參數名字1>, <參數型別2> <參數名字2>, ...) ``` ---- 範例: ```cpp= int add(int a,int b) //兩數相加的函式 { int c=a+b; return c; } ``` ```cpp= string idk() //idk { string a="sidekick"; a.erase(0,1); a.erase(a.find('e'),1); a.erase(3); return a; } ``` ---- main也是一個函式 執行程式時由系統去呼叫 ```cpp=3 int main() { cout << "hello world\n"; return 0; } ``` --- ### 呼叫的語法 ```cpp=10 //在程式的某處(某個函式內) <要呼叫的函式名稱>(引數們); //參數有幾個,引數就要丟幾個! ``` ---- 用函式之前 ```cpp= #include<iostream> using namespace std; int main() { int n=3,m=5; int ans=n+m; cout << ans; //8 } ``` ---- 用add取代ans ```cpp= #include<iostream> using namespace std; int add(int a,int b) //兩數相加的函式 { int c=a+b; return c; } int main() { int n=3,m=5; cout << add(n,m); //8 } ``` ---- 要注意的點: 1. 呼叫函式時,函式會**複製**引數到參數裡面,所以在函式裡亂動參數不會影響到引數 2. 在程式中呼叫的函式可以想像成一個**變數**,可以拿來輸出或是運算之類的 --- ## void ---- 如何寫不需要回傳東西的函式? - 舉例: 你叫方先生把$a$跟$b$加起來 但不問他答案,叫他寫在紙上 等你需要知道答案時再去看紙 ---- 將回傳值的型別設為"void" ```cpp= void <函數的名字>(<參數們>) { //內容 return; //return後面放分號就好 } ``` ---- 範例: ```cpp= #include<iostream> using namespace std; int paper; //通常需要宣告在最外面,讓兩個函式都看的到paper void multiply(int a,int b) //兩數相加的函式 { paper=a*b; return; } int main() { int n=3,m=5; multiply(n,m); //等於寫c=m*n; cout << paper; //15 } ``` ---- void函式(**只有它**)可以不寫return 函式執行到最底下會自動return --- ## 變數作用域 ---- - 全域變數: - 在最外面(不在任何函式裡)宣告的變數 - 在它底下(物理上的)的函式都可以使用它 - 因為大家都可能動到它所以較容易有bug - 在寫題目陣列開全域比較不會爆! ---- - 區域變數: - 在一個區域(可以是函式或是迴圈之類的)內宣告的變數,只會在該區域有作用。 - 當離開該區域,區域變數則消失。 - 當區域變數與全域變數同名,則此名字會呼叫出區域變數(APCS會考) ---- ```cpp= #include <iostream> using namespace std; char c='c'; void f(char c) { c='b'; } void g() { c='b'; } int main() { char a='a'; f(a); cout << a << ' ' << c << '\n'; //a c g(); cout << c << '\n'; //b } ``` --- ## 練習時間 ---- 題目: - 寫一個函式,給它長寬高它算出體積,並且在main函式自行測式它 - 寫一個除法的函式,叫我測試 - 手刻變數交換函式(看你能寫多好) - 自行揮發創意 --- # 謝謝大家
{"title":"Function","description":"type: slide","contributors":"[{\"id\":\"b49547c8-0e7f-46d0-99b2-8a45dfee8e90\",\"add\":2919,\"del\":535}]"}
    96 views