6 使用者函數 6.1 函數定義 6-2 6.1.1 宣告函數 6-3 6.1.2 呼叫函數 6-4 6.1.3 呼叫多個函數 6-6 6 使用者函數 6.1 函數定義 6-2 6.1.1 宣告函數 6-3 6.1.2 呼叫函數 6-4 6.1.3 呼叫多個函數 6-6 6.1.4 多重呼叫函數 6-8 6.1.5 宣告函數原型 6-10 6.2 傳遞參數 6-12 6.2.1 傳遞單一參數 6-12 6.2.2 傳遞多個參數 6-14 6.2.3 傳遞常數符號 6-16 6.2.4 傳遞變數數值 6-18 6.2.5 傳遞變數位址 6-20 6.2.6 傳遞預設參數 6-22 6.3 函數傳回值 6-23 6.3.1 return敘述 6-24 6.3.2 傳回數值 6-26 6.3.3 傳回布林值 6-27 6.4 變數範圍 6-28 6.4.1 區域變數auto 6-28 6.4.2 公用變數 6-30 6.4.3 外部變數extern 6-32 6.4.4 暫存器變數register 6-35 6.4.5 靜態變數static 6-36 6.5 函數特殊用途 6-38 6.5.1 遞迴函數 6-38 6.5.2 exit函數 6-40 6.5.3 定義函數巨集 #define 6-41
6.1 函數定義 函數呼叫與返回
6.1.1 宣告函數 傳回型態 函數名稱 (參數列) { //函數本體 return 傳回值; } 範例 6.1.1 宣告函數 傳回型態 函數名稱 (參數列) { //函數本體 return 傳回值; } 範例 void womain(void) //使用者函數 { cout << "How are you doing main, from womain."; cout << endl; }
6.1.2 呼叫函數 函數名稱 (參數0, 參數1, 參數2, …); 範例 womain(); //呼叫使用者函數womain
6.1.2 呼叫函數 (續) 呼叫函數方塊圖
6.1.3 呼叫多個函數 呼叫多個函數方塊圖
6.1.3 呼叫多個函數 (續) 範例
6.1.4 多重呼叫函數 多重呼叫函數方塊圖
6.1.4 多重呼叫函數 (續) 範例
6.1.5 宣告函數原型 傳回型態 函數名稱 (參數型態0, 參數型態1, 參數型態2, …); 範例 6.1.5 宣告函數原型 傳回型態 函數名稱 (參數型態0, 參數型態1, 參數型態2, …); 範例 void womain(void); //宣告使用者函數原型 void main(void) //main 函數 { cout << "Hi womain, This is main." << endl; womain(); //呼叫使用者函數womain cout << "Fine, thank you!" << endl; } void womain(void) //使用者函數 cout << "How are you doing main, from womain."; cout << endl;
6.2 傳遞參數 傳遞參數流程
6.2.1 傳遞單一參數 範例 void number(int); //宣告函數原型
6.2.2 傳遞多個參數 void sum(int, int, int); //宣告函數原型
6.2.3 傳遞常數符號 void area(float, float); //宣告函數原型
6.2.4 傳遞變數數值 void calculate(int, int, int); //宣告函數原型
6.2.5 傳遞變數位址 void swap(int &, int &); //宣告函數原型
6.2.6 傳遞預設參數 範例 void weight(float lb = 1.0); //指定參數預設值 6.2.6 傳遞預設參數 範例 void weight(float lb = 1.0); //指定參數預設值 void weight(float lb) //重量轉換函數 { cout << lb << "磅 = " << lb/2.20462 << "公斤"; //顯示函數傳回值 cout << endl; }
6.3 函數傳回值 函數傳回值
6.3.1 return敘述 return 傳回值; 範例一 int main() //傳回整數資料給OS { //敘述區 } 範例二 void main() //不須傳回任何資料給OS //不須要return敘述 } //main函數結束點
6.3.1 return敘述 (續)
6.3.2 傳回數值
6.3.3 傳回布林值
6.4 變數範圍 變數範圍是指變數可使用的範圍,包括區域變數、公用變數、外部變數、靜態變數、與暫存器變數。例如在main函數區塊內宣告的變數只有main函數區塊內的敘述可以使用,其他函數則不能直接存取main函數內的變數。 同理,任何函數內的區域變數只有該函數內的敘述可以使用。而公用變數則可提供同一程式中所有函數的敘述使用。
6.4.1 區域變數auto auto 資料型態 變數名稱 = 初值; 範例一 void main() //沒有傳回值 { auto int ft; //宣告main區域變數 . } //不需要return敘述 double long(int ft) auto double m; //宣告long區域變數 }
6.4.1 區域變數auto (續) 範例二 void main() { //沒有傳回值 for (int count=0; count<10; count++) //main區域變數count . } //不需要return敘述 double length(int ft) { for (int count=1; count<=5; count++) //length區域變數count }
6.4.2 公用變數 資料型態 變數名稱 = 初值; 範例 double m; //宣告公用變數 double ft; //宣告公用變數 6.4.2 公用變數 資料型態 變數名稱 = 初值; 範例 double m; //宣告公用變數 double ft; //宣告公用變數 void main() { . m = 10; //10存入公用變數m length(); //呼叫函數 cout << m << '\t' << ft; //顯示公用變數值 } void length() { //重量轉換函數 ft = 3.20808 * m; //運算值存入公用變數ft
6.4.3 外部變數extern extern 資料型態 變數名稱 = 初值; 範例 double degree(void) { //溫度轉換函數 extern double c; //宣告外部變數 double f; //宣告區域變數 f = ((9 * c ) / 5) + 32; //攝氏轉成華氏 } double c; //宣告公用變數 void main(void) { //main函數 for (c = 36; c <= 40; c++) //攝氏溫度=計數
6.4.4 暫存器變數register register 資料型態 變數名稱 = 初值; 範例 int main(void) //main函數 { register double f; //宣告暫存器變數 . } double degree(double fahr) //溫度轉換函數 register double c; //宣告暫存器變數
6.4.5 靜態變數static static 資料型態 變數名稱 = 初值; 範例 void main(void) { for (count = 1; count <= 100; count += 2) //呼叫函數迴圈 oddsum = total(count); //oddsum=函數傳回值 } int total(int n) { static int sum; //宣告靜態變數 sum += n; //sum(n+1)=sum(n)+n
6.5.1 遞迴函數 遞迴函數呼叫(Recursive Function Calls)就是函數中包含一個呼叫自己的敘述。 範例 6.5.1 遞迴函數 遞迴函數呼叫(Recursive Function Calls)就是函數中包含一個呼叫自己的敘述。 範例 int total(int n) //計算總和函數 { if (n > 1) //若 n > 1 return n + total(n-1); //呼叫函數自身 else //若n<=1 return 1; //結束遞回呼叫,並傳回1 }
6.5.1 遞迴函數 (續)
6.5.2 exit函數 #include <cstdlib> void exit(int 傳回值) 範例 void main(void) { if(!display_mode()) exit(1); play(); }
6.5.3 定義函數巨集 #define #define 巨集名稱 數值 #define 巨集名稱 字串 #define 巨集名稱 函數 範例一 #define PI 3.14159 //定義符號 pi 範例二 #define BEGIN { //定義起始符號 #define END } //定義結束符號 #define TAB '\t' //定義定位符號
6.5.3 定義函數巨集 #define (續) 範例三 #define ABS(n) (n<0 ? –n : n) //定義取絕對值函數巨集 #define EVEN(n) (n%2==0 ? "偶數" : "奇數") //定義判斷奇偶數函數巨集