---
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)```
可以回傳三個數字的中位數是什麼