Function

講師:Yeedrag

數學的函數?

\(f(x) = 2x+3\)

給定一個\(x\),函數輸出對應的\(y\)

\(f(1) = 5\)

\(f(2) = 7\)

\(f(3) = 9\)

程式呢?

Function!

type function_name(parameters) {
  /* do something */
  return variable;
}

type: function會回傳甚麼型別的變數

function_name: function的名字

parameters: function的參數

return: function結束並回傳變數

BTW要使用前宣告!

以剛剛的函數為例:

#include<iostream>
using namespace std;
int f(int x){
	return 2*x+3;
}
int main(){
	cout<<f(1)<<endl;
	cout<<f(3)<<endl;
	cout<<f(2000000)<<endl;
}

Output:

用函式的好處?

  • 扣可以更精簡

  • 不會有重複寫類似東西的困擾

  • 像是python的函式一樣方便

Title Text

Return Type

Subtitle

??? swap(int a,int b){
	return ???
}
int a = 3, b = 5;
swap(a, b);//單純交換
cout << a << ' ' << b << "\n";

可以做為變數的都可以當回傳值...

但如果沒有回傳任何東西呢?

Return Type

Subtitle

void print_hello() {
  cout << "hello\n";
}

只能做為Return Type , 不能作為變數型別

void 沒有回傳變數,連return都可以省略owo

Return

Function結束並回傳

當Function Type不是void時,就需要return

Return的用處:

  1. 結束Function的執行
  2. 回傳數值給呼叫者

Return

結束Function的執行

 

int divide(int a,int b){
    if(b==0){
        return -1;
    }
    return a/b;
}

void也可以return喔!

(只是沒有return值,直接 return;)

Return

回傳數值給呼叫者

int add(int a,int b){
    return a+b;
}
int num = add(1,2);
cout<<num<<endl;
//num = 3

void也可以return喔!

(只是沒有return值,直接 return;)

Return

回傳數值給呼叫者

int formula(int a,int b,int c){
    //solve....
    return x1,x2;
}

同時回傳兩個以上的數值?

例:一元二次方程式

不能這樣做!!!

我想要回傳多個值怎麼辦?

 

小社STL簡報

std::pair

std::tuple

struct

一些內建函式們:

很多要引用對應的標頭檔喔!

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的數值
gcd(a,b) 回傳a,b的最大公因數

max(a,b) 回傳a,b中較大的

Swap

void swap(int &a,int &b){
	int tmp;
	tmp = a;
	a = b;
	b = tmp;
}

註:a,b前面要加&,至於為甚麼下堂會教

Max

int max(int a,int b){
	if(a>b){
		return a;
	} else {
		return b;
	}
}

gcd

一般作法:

 

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

歐基里德算法(輾轉相除法):

 

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;
}

\(\gcd(a,b) = \gcd(b,b\bmod a)\)

實作題:

APCS - 矩陣轉換

用function實作旋轉翻轉!

Made with Slides.com