C++ 程式設計 函數 (下)
一、全域及局部變數
(一)說明
全域變數:就是大家共用的變數
//學校的大門,全校的人一起使用
局部變數:部分的人使用的變數
//教室的門,班上同學老師使用
(二)範例
1、【全域變數】
#include <iostream>
using namespaec std;
double a;
double fun(){
return ((a-32)*5/9);
}
int main(){
a = 99;
return 0;
}
```
#### 2、【全域變數與局部變數】
```cpp=
#include <iostream>
using namespaec std;
double a;
double fun(){
return ((a-32)*5/9);
}
int main(){
a = 99;
cout << "全域的a=" << a <<endl;
double a;
a = 88;
cout << "局部的a=" << a <<endl;
return 0;
}
```
## 二、行內(inline)
### (一)說明:
加快執行速度但不改視讀性
### 圖示:
```cpp=
#include <iostream>
using namespaec std;
double a;
inline double fun(){
return ((a-32)*5/9);
}
int main(){
cout << fun <<endl;
return 0;
}
#include <iostream>
using namespaec std;
double a;
int main(){
cout << ((a-32)*5/9) <<endl;
return 0;
}
三、定義聚集函式(#define)
(一)說明
可藉由定義來增加程式的可讀性
例如:3次方
#define cube(x) (x)*(x)*(x)
在撰寫程式時則將原本: x=x*x*x; 簡寫成 cube(x); 增加可讀性。
(二)範例
#include <iostream>
using namespaec std;
#define cube(x) (x)*(x)*(x)
---主程式 ---
int main(){
int x = 2;
cout << cube(x) <<endl;
return 0;
}
```
### 四、函式庫
#### (一)說明
許多聚集函式集結而成的字典
以程式視角 :讓程式可以讀懂使用者的用意
以使用者視角:讓使用者可以更有效率撰寫程式
#### (二)常使用函式庫
若要使用函式庫
程式開頭 indule <cmath>
數學資料函式庫<cmath>
exp(),log(),sin(),...
時間函式庫<ctime>
clock_t stime = clock ();
clock_t etime = clock ();
cout << (double)(etime - stime)/(1000) << "秒"
### 五、overloading
#### (一)說明
一樣的函式,但可以透過不同的參數型態執行不同功能。
#### (二)舉例
```cpp=
#include <iostream>
using namespace std;
#define PI 3.14
void fun(double i){
cout << "圓形面積" << r*r*PI; << endl;
}
void fun (double a,double b){
cout << "矩形面積" << a*b << endl;
}
void fun (char i){
cout << "顯示字元" << i << endl;
}
int main(){
fun(2.0);
fun(2,3);
fun('a');
return 0;
}
矩形面積 6
顯示字元 a
```
#### (四)圖示
![](https:
### 六、Recursive (遞迴)
#### (一)說明
自己呼叫自己,但必須要有終止條件
#### (二)舉例
##### 1、階層運算
```cpp=
#include <iostream>
using namespace std;
int sum = 1;
int fun(int n){
while (n > 0) {
sum = sum * n;
n -= 1;
}
return sum;
}
int main() {
int n;
cout << "請輸入:" ;
cin >> n;
if (n == 1)
cout << 1;
else
cout << (n *fun(n - 1));
}
```
##### 2、圖示
![](https:
## 二、練習
### (一)題目一:
請設計一多載函式,函式有兩個參數:
A. 當兩個參數都是字元時,則顯示該字元。
B. 當參數為字元和整數x時,則顯示該字元x次。
C. 當兩個參數都是整數時,則顯示兩個數相乘的結果。
fun('a','b') -->ab, fun('c','d') --> cd
fun(3, 'a') -->aaa, fun(5, 'a') -->aaaaa
fun('b', 4) -->bbbb, fun('b', 6) -->bbbbbb
fun(3, 8) --> 24, fun(4, 9) --> 36
#### 1、程式碼(答案不唯一):
```cpp=
#include<iostream>
using namespace std;
void fun(int a, int b) {
a = a * b;
cout<<"輸出結果:"<<i<<endl;
}
void fun(char x, char y) {
cout<<"輸出結果:"<<x<<y<<endl;
}
void fun(int a, char y) {
cout<<"輸出結果:";
while (a> 0) {
cout<<y ;
a -= 1;
}
}
void fun(char x, int b) {
cout<<"輸出結果:";
while (b> 0) {
cout<<x;
b -= 1;
}
}
int main() {
int a, b,c,d;
char x, y;
cout<<"請設定預想輸入1之資料型態 1.整數 2.字元:";
cin>>c;
cout<<"請設定預想輸入2之資料型態 1.整數 2.字元:";
cin>>d;
if (c > 1 && d > 1) {
cout<<"請設定輸入1:";
cin>>x;
cout<<"請設定輸入2:";
cin>>y;
fun (x,y);
}
else if (c == 1 && d == 1) {
cout<<"請設定輸入1:";
cin>>a;
cout<<"請設定輸入2:";
cin>>b;
fun(a, b);
}
else if (c == 1 && d > 1) {
cout<<"請設定輸入1:";
cin>>a;
cout<<"請設定輸入2:";
cin>>y;
fun(a, y);
}
else {
cout<<"請設定輸入1:";
cin>>x;
cout<<"請設定輸入2:";
cin>>b;
fun(x, b);
}
return 0;
}
```
#### 2、圖示:
![](https:
![](https:
![](https:
![](https:
### (二)題目二:
請撰寫一個模擬power()行為的函式,以「遞迴」方式計算任意數的任意整數次方。
(不能用<cmath>)並利用標準函式庫的clcok()檢查程式計算時間。
例如:power(2,10) --> 1024, try power(2,10000)時間比較長,不會0秒
#### 1、程式碼(答案不唯一):
```cpp=
#include<iostream>
#include<ctime>
using namespace std;
int i = 1;
void pow(int a, int b) {
while (b > 0) {
i = i * a;
b -= 1;
}
cout << "計算結果:" << i << endl;
}
int main() {
int a, b;
cout << "請輸入底數:";
cin >> a;
cout << "請輸入次方:";
cin >> b;
clock_t stime = clock();
pow(a, b);
clock_t etime = clock();
cout << "使用時間" << (double)(etime - stime) / 3200000000 << "秒";
return 0;
}
2、圖示: