Function

講師:張餅ya、立ya(代替確診派對仔上課)

建電大赦課[6]

國中學過的數學函數?

y = f(x)=2x + 1

f(1) = 3
f(2) = 5
f(3) = 7

丟一個x進去,跑出對應的y

程式咧?

type 自定義函數名(參數) {
  /* 你想做的事 */
  return 回傳變數;
}

要使用前宣告!

用剛剛的數學例子

#include <iostream>
using namespace std;

int f(int x){
	return 2*x+1;
}
int main(){
    cout << f(1) << endl;
    cout << f(5) << endl;
    cout << f(10000) << endl;
}

輸出:

為啥要用函數

  • 更精簡的code
  • 跟python函式一樣方便(順便推一下python小社)
  • 不用寫一堆重複的東西
  • 遞迴,下次會教!

Return

大部分都會需要return

(void例外)

Return

當函數類型不是void時,就需要return

促使Function結束並回傳

Return 的用處?

  • 結束執行中的函數
  • 回傳值給呼叫者

結束執行中的function

回傳數值

int minus(int a,int b){
    return a-b;
}
int num = minus(1,2);
cout<<num<<endl;
//num = -1
int divide(int a,int b){
    if(b==0){
        return -1;
    }
    return a/b;
}

然後其實void也可以return喔~
只是不是return值,是直接return

回傳多個數值

int ???(int a,int b,int c){
    //你要做的事
    return x1,x2;
}

不能這麼做!

想要回傳多個值怎麼辦

參加下周演算法小社!

std::pair

struct

Void

只能做為函數類型 , 不能作為變數型別

void im_lemonilemon_status() {
  cout << "lemon tested positive\n";
}

void沒有回傳變數,可以不用return

一些內建很好用的函式

不過很多都要引用對應標頭檔喔~

gcd(a,b):回傳a和b的最大公因數

lcm(a,b):回傳a和b的最小公倍數

swap(a,b):交換a和b

max(a,b):回傳a或b較大的那個

min(a,b):回傳a或b較小的那個

abs(n):回傳絕對值n

換你們實作幾個

swap(a, b)交換a, b的值
min(a, b)回傳比較小的那個
gcd(a, b)回傳最大公因數

zj a024

Min

int min(int a, int b){
    if(a<b){
    	return a;
    }else{
    	return b;
    }
}

gcd(1)

int gcd(int a, int b){
    if(a>b) swap(a, b);
    while(a!=b){
        if(a > b){
            a -= b;
    	} else{
            b -= a;
    	}
    }
    return a;
}

gcd(2)

int gcd(int a, int b){
    if(a<b) swap(a,b);
    int tmp = 1;
    while(tmp != 0){
        tmp=a%b;
        a=b;
        b=tmp;
    }
    return a;
}

Swap

void swap(int &a, int &b){ 
    //&是參考,之後會學到
    int temp;
    temp = a;
    a = b;
    b = temp;
}

那麼來試著實作剩下幾個吧🥳

lcm(a,b):回傳a和b的最小公倍數

min(a,b):回傳a或b較小的那個

abs(n):回傳絕對值n

桿蟹各位今日的參與

祝我們不會被\(imlemonilemon\)傳染