---
# System prepended metadata

title: 函式
tags: [中和高中]

---

# 函式

## 介紹:
由[判斷質數](https://chiscoj.com/problem/b011)這題舉例:

你可能會寫成這樣:
```cpp
#include<stdio.h>

int main(){
    int n;
    while(scanf("%d",&n)!=EOF){
        int flag=1;
        for(int i=2;i*i<=n;i++){
            if(n%i==0){
                printf("No\n");
                flag=0;
                break;
            }
        }
        if(flag){
            printf("Yes\n");
        }
    }
}
```
但其實你也可以寫成這樣:
```cpp
#include<stdio.h>

bool check(int n){
    for(int i=2;i*i<=n;i++){
        if(n%i==0){
            return 0;
        }
    }
    return 1;
}

int main(){
    int n;
    while(scanf("%d",&n)!=EOF){
        if(check(n)){
            printf("Yes\n");
        }else{
            printf("No\n");
        }
    }
}
```

而下面這個部分就是我們自定義的函式
```cpp
bool check(int n){
    for(int i=2;i*i<=n;i++){
        if(n%i==0){
            return 0;
        }
    }
    return 1;
}
```

函示的功用就是讓你的程式碼變得淺顯易懂


---

## 宣告

利用資料型態宣告。



| 資料型態 |      回傳      |
| -------- |:--------------:|
| void     |   不需要回傳參數   |
| int      |  需要回傳整數  |
| folat    | 需要回傳浮點數 |
| double   | 需要回傳浮點數 |
| char     | 需要回傳浮點數 |

舉例:
```cpp
void function1(){
    return;
}

int function2(){
    return 整數
}


float funtion3(){
    return 浮點數
}
.
.
.
.
```

---

我們宣告的時候可以傳我們想要的變數進去。

```c
#include<stdio.h>

void f(int n){
	printf("%d",n);
}

int main(){
	int n=10;
	f(n);
}
```

輸出

```
10
```
---

我們也可以傳兩個變數進去。
```c
#include<stdio.h>

void f(int n,int n2){
	printf("%d &d",n,n2);
}

int main(){
	int n=10,n2=20;
	f(n);
}
```

輸出
```
10 11
```

---

## 宣告位置
有兩種

第一種
```c=
#include<stdio.h>

void f(int n){
    printf("%d",n);
}

int main(){
    int n;
    scanf("%d",&n);
    f(n);
}
```

第二種
```c=
#include<stdio.h>

void f(int n);

int main(){
    int n;
    scanf("%d",&n);
    f(n);
}

void f(int n){
    printf("%d",n);

}
```
因為編譯器是由上往下開始編譯
所以這樣會報錯
```c=
#include<stdio.h>

int main(){
    int n;
    scanf("%d",&n);
    f(n);
}

void f(int n){
    printf("%d",n);
}

```






###### tags: `中和高中`