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的用處:
- 結束Function的執行
- 回傳數值給呼叫者
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實作旋轉翻轉!
Function(大社)
By yeedrag
Function(大社)
- 446