講師:Yeedrag
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:
??? swap(int a,int b){
return ???
}
int a = 3, b = 5;
swap(a, b);//單純交換
cout << a << ' ' << b << "\n";
可以做為變數的都可以當回傳值...
但如果沒有回傳任何東西呢?
void print_hello() {
cout << "hello\n";
}
只能做為Return Type , 不能作為變數型別
void 沒有回傳變數,連return都可以省略owo
Function結束並回傳
當Function Type不是void時,就需要return
Return的用處:
結束Function的執行
int divide(int a,int b){
if(b==0){
return -1;
}
return a/b;
}
void也可以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;)
回傳數值給呼叫者
int formula(int a,int b,int c){
//solve....
return x1,x2;
}
同時回傳兩個以上的數值?
例:一元二次方程式
不能這樣做!!!
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
其實還有很多⋯⋯
void swap(int &a,int &b){
int tmp;
tmp = a;
a = b;
b = tmp;
}
註:a,b前面要加&,至於為甚麼下堂會教
int max(int a,int b){
if(a>b){
return a;
} else {
return b;
}
}
一般作法:
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;
}
歐基里德算法(輾轉相除法):
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;
}