--- slideOptions: transition: slide --- <style> .red{color:red}; .green{color:green}; .yellow{color:yellow}; </style> # 函數宣告 ###### 2018 資訊之芽-李旺陽 --- ## review 在上週的課程利用了C++內建的函數來解決問題,本週將會帶領大家撰寫自己的函數 ```cpp int n = strlen(str1); if( strncmp(str1,str2,n) ) cout<<"Yee"; ``` --- ## 宣告 函數跟變數一樣, 使用之前需要事先宣告 <span class="red">回傳型態</span> 函數名稱 ( <span class="red">參數</span> ) ```cpp int max( int x, int y ); ``` |回傳型態|函數名稱|參數| |-|-|-| |int|max|int x,int y| ---- ## void * 如果沒有函數回傳值, 使用`void`表示 * 如果函數沒有參數, 使用`void`表示(可省略) ```cpp void print( int d ); void nothing( ); ``` |回傳型態|函數名稱|參數| |-|-|-| |void|print|int d| |void|nothing|void| ---- ## Pass Array 函數可以傳遞陣列, 但是無法直接傳遞大小 ```cpp double avg(int arr[], int N); ``` --- ## 函數內容 宣告完函數之後, 就能來撰寫函數的內容了! 在宣告的後方接一個大括號, 裡面的內容就是函數的內容 ```cpp int max(int a,int b) { // max 函數的內容! if( a > b ) ... else ... 其他code } int main() { // main 函數的內容 } ``` ---- ## 函數內容 陣列的範例 ```cpp int sum(int a[],int N) { int s = 0; for( int i=0 ; i<N ; ++i ) { s += a[i]; } ... } int main() { int data[4] = {1,2,3,4}; cout<< sum( data , 4 ) ; } ``` --- ## return 當函數完成計算之後, 使用`return`就能回傳函數的計算結果 ```cpp int max(int a,int b) { if( a > b ) return a; return b; } int main() { int x,y; cin >> x >> y; cout << max(x,y) << endl; } ``` ---- ## return 如果回傳型態是`void`, 則`return`可以省略 ```cpp void sayhi(string str) { if( str == "Nymphia" ) { cout<<"hi!hi! "<<str; return ; // 後面不用放東西 } cout<<"hi! "<<str; // 可以省略 return ; } ``` ---- ## Forward Declaring 變數的宣告與內容可以分開寫, 讓排版更整齊 ```cpp int foo(int,int); //參數名字在這裡不重要 int yee(int a,int b); //可以省略 int main() { foo(1,2); yee(1,2); } int foo(int a,int b)//這裡再給名字就好 { return yee(a+1,b+1); } int yee(int c,int d) //前面的名字沒意義, 用這裡的為準 { return c*d; } ``` --- ### 小練習 寫一個函數 ```int mid(int a,int b,int c)``` 可以回傳三個數字的中位數是什麼