6 使用者函數 6.1 函數定義 宣告函數 呼叫函數 呼叫多個函數 6-6

Slides:



Advertisements
Similar presentations
Divide-and-Conquer. 什麼是 divide-and-conquer ? Divide 就是把問題分割 Conquer 則是把答案結合起來.
Advertisements

6-1 指標簡介 6-2 指標與陣列 6-3 動態配置記憶體 6-4 本章綜合練習
布林代數的應用--- 全及項(最小項)和全或項(最大項)展開式
Introduction to Java Programming Lecture 13 Classes I OO Programming.
學習C++的基本語法 認識關鍵字與識別字的不同 學習程式碼偵錯的流程 學習如何提高程式的可讀性
: A-Sequence 星級 : ★★☆☆☆ 題組: Online-judge.uva.es PROBLEM SET Volume CIX 題號: Problem D : A-Sequence 解題者:薛祖淵 解題日期: 2006 年 2 月 21 日 題意:一開始先輸入一個.
:Word Morphing ★★☆☆☆ 題組: Problem Set Archive with Online Judge 題號: 10508:word morphing 解題者:楊家豪 解題日期: 2006 年 5 月 21 日 題意: 第一行給你兩個正整數, 第一個代表下面會出現幾個字串,
如何將數字變成可用之資訊 現代化資料處理與應用概念. 如何將數字變成可用之資訊 人最容易接受的訊息是圖像化資訊。 在一堆數字中,要進行比較分析,一般會使用表格形 式計算與分析。 所以一般我們會將數字依關聯性, 轉換成表格計算與分析。 此表格一般稱試算表或稱表格。 再將結果轉換為圖表,進行比較與分析。
1 Web of Science 利用指引 單元二 瀏覽與處理查詢結果. 2 瀏覽檢索結果 查出的結果,預設以時間排列, 使用者可改變結果的排列方式: 還可以依被引用次數、相關度、 第一作者、刊名、出版年等排序 回到前先查的結果畫面 點選想看資料的完整書目 本館訂購範圍的期刊 全文,便可直接連結.
: Boxes ★★★☆☆ 題組: Problem Set Archive with Online Judge 題號: 11003: Boxes 解題者:蔡欣燁 解題日期: 2007 年 3 月 19 日.
:New Land ★★★★☆ 題組: Problem Set Archive with Online Judge 題號: 11871: New Land 解題者:施博修 解題日期: 2011 年 6 月 8 日 題意:國王有一個懶兒子,為了勞動兒子,他想了一個 辦法,令他在某天早上開始走路,直到太陽下山前,靠.
: OPENING DOORS ? 題組: Problem Set Archive with Online Judge 題號: 10606: OPENING DOORS 解題者:侯沛彣 解題日期: 2006 年 6 月 11 日 題意: - 某間學校有 N 個學生,每個學生都有自己的衣物櫃.
第一章 變數、常數及資料型態. 變數 C 程式語言的變數名稱 第一個字必須是英文字母或底線 (_) 之後可以是數字, 英文字母或底線 (_) 不可以是保留字 例: Num (Ο) _score (Ο) C&C (X) 8num (X)
JAVA 程式設計與資料結構 第二章 JAVA 程式基本概念及操作. 第一個程式 /* * 這是第一個程式 (FirstP.java) */ class FirstP{ public static void main(String args[]){ System.out.println("Whatever.
STAT0_sampling Random Sampling  母體: Finite population & Infinity population  由一大小為 N 的有限母體中抽出一樣本數為 n 的樣 本,若每一樣本被抽出的機率是一樣的,這樣本稱 為隨機樣本 (random sample)
1. 假設以下的敘述為一未提供 “ 捷徑計算 ” 能力的程式段,試用程 式設計的技巧,使此敘述經此改 寫的動作後,具有與 “ 捷徑計算 ” 之 處理方法相同之處理模式。 if and then E1 else E2 endif.
第 18 章 名稱空間與例外處理 18-1 名稱空間 18-1 名稱空間 18-2 例外處理 18-2 例外處理.
第三章 變數與繫結 陳維魁 博士 儒林圖書公司. 2 大綱  變數的定義  變數元件  儲存區配置問題  參考的透明性  完全計算  捷徑計算  繫結 (binding)  繫結時間  精選習題.
程式註解說明. 2 程式註解格式 塊狀註解 對檔案、 class 、 method 、資料結構、一段程式 …. 等程式區塊 做說明。 第一行的開頭必需為 “/*” 且沒有其他文字,最後一行的開頭 必需以 “*/” 做為結束,在中間每一行的開頭都必需是一個 “*” 。 單行註解 佔據一整行的說明。 以.
McGraw-Hill/Irwin © 2003 The McGraw-Hill Companies, Inc.,All Rights Reserved. 肆 資料分析與表達.
第 7 章 程序與函數 7-1 模組化程式設計 7-1 模組化程式設計 7-2 VB.NET 的程序與函數 7-2 VB.NET 的程序與函數 7-3 程序與函數的變數範圍 7-3 程序與函數的變數範圍 7-4 VB.NET 常用的內建函數 7-4 VB.NET 常用的內建函數 7-5 遞迴函數 7-5.
第 1 章 PC 的基本構造. 本章提要 PC 系統簡介 80x86 系列 CPU 及其暫存器群 記憶體: Memory 80x86 的分節式記憶體管理 80x86 的 I/O 結構 學習組合語言的基本工具.
第五章 函數與儲存類別. 函數 函數為完成某一次特定任務或工作的小程式 函數的類型 庫存函數 (library functions) 如: scanf() 、 printf() 函數 … 等 此函數為系統所提供可以直接呼叫使用之 自定函數 (user-define functions) 此函數是使用者自行定義之函數.
Introduction to Java Programming Lecture 17 Abstract Classes & Interfaces.
第 5 章 深入 Response 物件 製作. 網頁的轉向與強制輸出 - 讓網頁轉彎的 Redirect 敘述 運用 Response 物件的 Redirect 方法,將瀏覽器顯 示的網頁,導向至其他網頁,語法如下: Response.Redirect 網頁路徑與名稱 此網頁路徑與名稱  若是導向到同一台.
最新計算機概論 第 5 章 系統程式. 5-1 系統程式的類型 作業系統 (OS) : 介於電腦硬體與 應用軟體之間的 程式,除了提供 執行應用軟體的 環境,還負責分 配系統資源。
3-3 使用幾何繪圖工具 Flash 的幾何繪圖工具包括線段工具 (Line Tool) 、橢圓形工具 (Oval Tool) 、多邊星形 工具 (Rectangle Tool) 3 種。這些工具畫出 來的幾何圖形包括了筆畫線條和填色區域, 將它們適當地組合加上有技巧地變形與配 色, 不但比鉛筆工具簡單,
7 陣列與搜尋 7.1 陣列 一般資料變數 宣告一維陣列 起始一維陣列 7-4
: Happy Number ★ ? 題組: Problem Set Archive with Online Judge 題號: 10591: Happy Number 解題者:陳瀅文 解題日期: 2006 年 6 月 6 日 題意:判斷一個正整數 N 是否為 Happy Number.
: Fast and Easy Data Compressor ★★☆☆☆ 題組: Problem Set Archive with Online Judge 題號: 10043: Fast and Easy Data Compressor 解題者:葉貫中 解題日期: 2007 年 3.
資料庫程式設計與系統管理 SQL Server 2005 Express 第六章 進階資料庫設計.
: Ahoy, Pirates! ★★★★☆ 題組: Contest Archive with Online Judge 題號: 11402: Ahoy, Pirates! 解題者:李重儀 解題日期: 2008 年 8 月 26 日 題意:有一個海盜島有 N 個海盜,他們的編號 (id)
: Multisets and Sequences ★★★★☆ 題組: Problem Set Archive with Online Judge 題號: 11023: Multisets and Sequences 解題者:葉貫中 解題日期: 2007 年 4 月 24 日 題意:在這個題目中,我們要定義.
:Nuts for nuts..Nuts for nuts.. ★★★★☆ 題組: Problem Set Archive with Online Judge 題號: 10944:Nuts for nuts.. 解題者:楊家豪 解題日期: 2006 年 2 月 題意: 給定兩個正整數 x,y.
1. 假設以下的敘述為一未提供 “ 捷徑計算 ” 能力的程式段,試用程 式設計的技巧,使此敘述經此改 寫的動作後,具有與 “ 捷徑計算 ” 之 處理方法相同之處理模式。 if and then E1 else E2 endif.
資料結構實習-一 參數傳遞.
1 Introduction to Java Programming Lecture 2: Basics of Java Programming Spring 2008.
: Problem G e-Coins ★★★☆☆ 題組: Problem Set Archive with Online Judge 題號: 10306: Problem G e-Coins 解題者:陳瀅文 解題日期: 2006 年 5 月 2 日 題意:給定一個正整數 S (0
: Beautiful Numbers ★★★★☆ 題組: Problem Set Archive with Online Judge 題號: 11472: Beautiful Numbers 解題者:邱經達 解題日期: 2011 年 5 月 5 日 題意: 若一個 N 進位的數用到該.
第 9 章 TSR 程式基本教練. 本章提要 TSR 程式 以熱鍵 (Hot key) 叫用 TSR 程式 Clock 中斷 int 08h 、 int 1ch DOS reentrant 的問題 有用的 TSR 程式.
Section 4.2 Probability Models 機率模式. 由實驗看機率 實驗前先列出所有可能的實驗結果。 – 擲銅板:正面或反面。 – 擲骰子: 1~6 點。 – 擲骰子兩顆: (1,1),(1,2),(1,3),… 等 36 種。 決定每一個可能的實驗結果發生機率。 – 實驗後所有的實驗結果整理得到。
函式 Function Part.2 東海大學物理系‧資訊教育 施奇廷. 遞迴( Recursion ) 函式可以「呼叫自己」,這種動作稱為 「遞迴」 此程式的執行結果相當於陷入無窮迴圈, 無法停止(只能按 Ctrl-C ) 這給我們一個暗示:函式的遞迴呼叫可以 達到部分迴圈的效果.
Image Interpolation Use SSE 指導教授 : 楊士萱 學 生 : 楊宗峰 日 期 :
資料結構實習-二.
演算法 8-1 最大數及最小數找法 8-2 排序 8-3 二元搜尋法.
845: Gas Station Numbers ★★★ 題組: Problem Set Archive with Online Judge 題號: 845: Gas Station Numbers. 解題者:張維珊 解題日期: 2006 年 2 月 題意: 將輸入的數字,經過重新排列組合或旋轉數字,得到比原先的數字大,
Chapter 2. Recurrence Relations (遞迴關係)
第 17 章 樣板 17-1 樣板的基礎 17-1 樣板的基礎 17-2 樣板函數 17-2 樣板函數 17-3 樣板類別 17-3 樣板類別 17-4 非型態參數的樣板類別 17-4 非型態參數的樣板類別 17-5 樣板類別的繼承 17-5 樣板類別的繼承 17-6 特化樣板與靜態成員 17-6 特化樣板與靜態成員.
Chapter 10 m-way 搜尋樹與B-Tree
: Function Overloading ★★★☆☆ 題組: Problem Set Archive with Online Judge 題號: 11032:Function Overloading 解題者:許智祺 解題日期: 2007 年 5 月 8 日 題意:判對輸入之數字是否為.
1 Introduction to Java Programming Lecture 2: Basics of Java Programming Spring 2009.
5 重複迴圈 5.1 增減運算符號 增量運算符號 減量運算符號
2 C++ 程式概論 2.1 C++ 程式結構 程式註解 // 插入標題檔 #include 2-3
INTRODUCTION TO MATLAB SHAWNNTOU. What Is MATLAB? MATLAB® is a high-performance language for technical computing. MATLAB® is a high-performance language.
3 數學運算 3.1 鍵盤輸入 鍵盤輸入 輸入函數 cin 輸入函數 cin 多重輸入 cin 多重輸入 cin 輸出格式化 輸出格式化 設定輸出長度 setw.
第 6 章 迴圈結構 6-1 計數迴圈 6-1 計數迴圈 6-2 條件迴圈 6-2 條件迴圈 6-3 巢狀迴圈 6-3 巢狀迴圈 6-4 While/End While 迴圈 6-4 While/End While 迴圈 6-5 跳出迴圈 6-5 跳出迴圈 6-6 VB.NET 的錯誤處理 6-6 VB.NET.
:Commandos ★★★☆☆ 題組: Contest Archive with Online Judge 題號: 11463: Commandos 解題者:李重儀 解題日期: 2008 年 8 月 11 日 題意: 題目會給你一個敵營區內總共的建築物數,以及建築物 之間可以互通的路有哪些,並給你起點的建築物和終點.
函式 Function 東海大學物理系‧資訊教育 施奇廷. 函式簡介 當程式越來越大、越複雜時,程式的維護、 除錯會變得更困難,此時必須引入函式來 簡化程式或將程式分段,將程式重複的部 分改寫為函式,將程式「模組化」 這種作法有下列優點:節省程式發展的時 間、邏輯容易瞭解、程式容易除錯、可分 工合作完成程式.
指導教授 : 林啟芳 教授 組員 : 邱秉良 林育賢. 何謂 GPS  GPS 即全球定位系統,是一個中距離圓 型軌道衛星導航系統。它可以為地球表面 絕大部分地區( 98% )提供準確的定位、 測速和高精度的時間標準。
Visual C++重點複習.
1 Introduction to Java Programming Lecture 3 Mathematical Operators Spring 2008.
1 Introduction to Java Programming Lecture 2: Basics of Java Programming Spring 2010.
C 語言練習題 2010/12/2. C 程式的格式 一、 C 程式的格式 (1). /* …. */ 是 C 程式的 ______ main() 的內容是由敘述構成的 (2). 敘述要以 __ 為結束符號 (3). 變數、函數都要做 ____ 的宣告 (4). ‘=’ 是 ____ 用的算符 (5).
7.4 程式範例 在螢幕上寫出“Hello” 的程式 (參考 code/pep-p200.odc).
數字系統與資料表示法 教師: 陳炯勳 數系轉換 r進制數字 稱為 base r或 radix r 有r個計數符號,計數順序逢r歸零(進位) A n A n - 1 ‥‥A 2 A 1 A 0 ﹒A -1 A -2 ‥‥A -m 其中A n 及A.
Introduction to Java Programming Lecture 16 Super and Sub Classes.
: Finding Paths in Grid ★★★★☆ 題組: Contest Archive with Online Judge 題號: 11486: Finding Paths in Grid 解題者:李重儀 解題日期: 2008 年 10 月 14 日 題意:給一個 7 個 column.
1 Introduction to Java Programming Lecture 3 Mathematical Operators Spring 2009.
第 1 章 PC 的基本構造. 本章提要 PC 系統簡介 80x86 系列 CPU 及其暫存器群 記憶體: Memory 80x86 的分節式記憶體管理 80x86 的 I/O 結構 學習組合語言的基本工具.
第 8 章 記憶體指標. 8.0 變數、數值、位址 8.1 指標與變數 對 C++ 語言而言,指標( pointers )是存放 變數或陣列的位址,因此也可以藉由指標 間接取得變數或陣列中的值。 對 C++ 語言而言,指標( pointers )是存放 變數或陣列的位址,因此也可以藉由指標 間接取得變數或陣列中的值。
Presentation transcript:

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.0 計算1加到100的和 #include <iostream.h> void main() { int sum = 0; 6.0 計算1加到100的和 #include <iostream.h> void main() { int sum = 0; for(int i=1; i<=100; i++) sum += i; cout << "1+...+100 = " << sum << endl; cout << endl; }

如果題目改成 計算1加到100的和 計算1加到200的和 計算1加到300的和 . . . 複製→貼上?

#include <iostream.h> void main() { int sum = 0; for(int i=1; i<=100; i++) sum += i; cout << "1+...+100 = " << sum << endl; cout << endl; for(int i=1; i<=200; i++) cout << "1+...+200 = " << sum << endl; for(int i=1; i<=300; i++) cout << "1+...+300 = " << sum << endl; }

#include <iostream.h> void main() { int sum = 0; for(int i=1; i<=100; i++) sum += i; cout << "1+...+100 = " << sum << endl; cout << endl; for(i=1; i<=200; i++) cout << "1+...+200 = " << sum << endl; for(i=1; i<=300; i++) cout << "1+...+300 = " << sum << endl; }

#include <iostream.h> void main() { int sum = 0; for(int i=1; i<=100; i++) sum += i; cout << "1+...+100 = " << sum << endl; cout << endl; sum = 0; for(i=1; i<=200; i++) cout << "1+...+200 = " << sum << endl; for(i=1; i<=300; i++) cout << "1+...+300 = " << sum << endl; }

6.0 可以改用函數的方式 #include <iostream.h> void main() { int sum = 0; 6.0 可以改用函數的方式 #include <iostream.h> void main() { int sum = 0; for(int i=1; i<=100; i++) sum += i; cout << "1+...+100 = " << sum << endl; cout << endl; } #include <iostream.h> void total(int n) { int sum = 0; for(int i=1; i<=n; i++) sum += i; cout << "1+...+" << n << " = " << sum << endl; cout << endl; }

6.0 改用函數的程式 #include <iostream.h> void total(int n) { 6.0 改用函數的程式 #include <iostream.h> void total(int n) { int sum = 0; for(int i=1; i<=n; i++) sum += i; cout << "1+...+" << n << " = " << sum << endl; cout << endl; } void main() total(100); total(200); total(300);

執行結果

6.0 只須計算和的寫法 #include <iostream.h> int total(int n) { 6.0 只須計算和的寫法 #include <iostream.h> int total(int n) { int sum = 0; for(int i=1; i<=n; i++) sum += i; return sum; } void main() cout << "1+...+100 = " << total(100) << endl << endl; cout << "1+2+...+100 = " << total(200) << endl << endl; cout << "1+2+3+...+100 = " << total(300) << endl;

執行結果

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 呼叫函數 函數名稱 (參數0, 參數1, 參數2, …); 範例 womain(); //呼叫使用者函數womain 程式6-01

6.1.2 呼叫函數 (續) 呼叫函數方塊圖

6.1.3 呼叫多個函數 呼叫多個函數方塊圖

6.1.3 呼叫多個函數 (續) 範例 2 程式6-02

6.1.4 多重呼叫函數 多重呼叫函數方塊圖

6.1.4 多重呼叫函數 (續) 範例 程式6-03

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-04

Ex 10 寫一個C++程式計算圓面積 定義一個cArea( r )函數,接收到半徑的參數後,會印出當半徑是多少時,圓面積的值是多少。 在main函數中,分別以5, 6, 7, 8, 9, 10的半徑值,呼叫cArea去計算並印出圓面積的值。

6.2 傳遞參數 傳遞參數流程

6.2.1 傳遞單一參數 範例 void number(int); //宣告函數原型 程式6-05

6.2.2 傳遞多個參數 void sum(int, int, int); //宣告函數原型 程式6-06

6.2.3 傳遞常數符號 void area(float, float); //宣告函數原型 程式6-07

6.2.4 傳遞變數數值 void calculate(int, int, int); //宣告函數原型 程式6-08

6.2.5 傳遞變數位址 void swap(int &, int &); //宣告函數原型 程式6-09

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-10

6.3 函數傳回值 函數傳回值

6.3.1 return敘述 return 傳回值; 範例一 int main() //傳回整數資料給OS { //敘述區 } 範例二 void main() //不須傳回任何資料給OS //不須要return敘述 } //main函數結束點

6.3.1 return敘述 (續) 程式6-11

6.3.2 傳回數值 程式6-12

6.3.3 傳回布林值 程式6-13

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 }

範例 #include <iostream.h> int total(int n) { count++; int sum = 0; for(int i=1; i<=n; i++) sum += i; return sum; } void main() int count = 0; cout << "1+...+100 = " << total(100) << endl << endl; cout << "1+2+...+100 = " << total(200) << endl << endl; cout << "1+2+3+...+100 = " << total(300) << endl; cout << "count = " << count << endl;

範例 #include <iostream.h> int total(int n) { int count = 0; int sum = 0; for(int i=1; i<=n; i++) sum += i; return sum; } void main() cout << "1+...+100 = " << total(100) << endl << endl; cout << "1+2+...+100 = " << total(200) << endl << endl; cout << "1+2+3+...+100 = " << total(300) << endl; cout << "count = " << count << endl;

範例 #include <iostream.h> int total(int n) { int sum = 0; for(int i=1; i<=n; i++) sum += i; n++; return sum; } void main() int n = 5; cout << "1+...+100 = " << total(100) << endl << endl; cout << "1+2+...+100 = " << total(200) << endl << endl; cout << "1+2+3+...+100 = " << total(300) << endl; total(n); cout << "n = " << n << endl;

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

範例 #include <iostream.h> int count = 10; int total(int n) { int sum = 0; for(int i=1; i<=n; i++) sum += i; return sum; } void main() cout << "1+...+100 = " << total(100) << endl << endl; cout << "1+2+...+100 = " << total(200) << endl << endl; cout << "1+2+3+...+100 = " << total(300) << endl; cout << "count = " << count << endl;

Ex 11 寫一個C++程式計算球面積與體積 定義一個sArea( r )函數,接收到半徑r的參數,傳回球面積給呼叫敘述。 定義一個sVolume( r )函數,接收到半徑r的參數,傳回球體積給呼叫敘述。 在main函數中,分別以5, 6, 7, 8, 9, 10 (用迴圈)的半徑值,去呼叫sArea與sVolume函數,收到球面積和球體積的值,顯示在螢幕上。

Homework 4 寫一個函數 寫一個主程式 傳入參數是西元年 傳出值是該西元年的天數 例:int DaysOfYear( int Year) 寫一個主程式 讓user輸入西元年 使用迴圈並呼叫上面所寫的函數,計算從西元元年到該年元旦,共經過多少天 計算該年元旦是星期幾,並將結果輸出

6.4.3 外部變數extern extern 資料型態 變數名稱 = 初值; 在C++程式中,使用每個變數之前都必須先宣告。 若有一個公用變數被宣告於函數之後,則使用該變數之前必須先宣告該變數為外部變數(external variable)。

6.4.3 外部變數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 資料型態 變數名稱 = 初值; 區域變數所佔用的記憶體位置,於函數返回時會被清除並釋放,而靜態變數(static variable)所佔用的記憶體位置,會直到程式結束時才交還給系統,所以存放在靜態變數的值,也將保留直到再寫入或程式結束為止。 在編譯時,靜態變數初值會被自動設為0。

//儲存檔名:d:\C++06\C0618.cpp #include <iostream.h> int total(int); //宣告函數原型 void main(void) //main函數 { int count, oddsum; //宣告區域變數 for (count = 1; count <= 100; count += 2) //呼叫函數迴圈 oddsum = total(count); //oddsum=函數傳回值 cout << "1+3+5+...+99=" << oddsum; //顯示最後oddsum值 cout << endl; } int total(int n) //計算總和函數 static int sum; //宣告靜態變數 sum += n; //sum(n+1)=sum(n)+n return sum; //返回並傳回sum

執行結果

6.5.1 遞迴函數 遞迴函數呼叫(Recursive Function Calls)就是函數中包含一個呼叫自己的敘述。 範例 6.5.1 遞迴函數 遞迴函數呼叫(Recursive Function Calls)就是函數中包含一個呼叫自己的敘述。 範例 int total(int 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 <stdlib.h> void exit(int 傳回值) exit函數可以用來中斷程式,就好像break敘述可以用來中斷迴圈一樣。 傳回值(return code)是回傳給呼叫程式,通常是作業系統。 0: 正常結束 1: 異常終止

6.5.2 exit函數 範例 #include <stdlib.h> 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 ? "偶數" : "奇數") //定義判斷奇偶數函數巨集

範例 //儲存檔名:d:\C++06\C0623.cpp #include <iostream.h> #define MAX(x, y) ((x>y) ? x : y) //判斷較大值函數巨集 #define MIN(x, y) ((x<y) ? x : y) //判斷較小值函數巨集 void main(void) { int num1, num2; cout << "請輸入二個整數:"; cin >> num1 >> num2; cout << num1 << " 和 " << num2; cout << " 的較大值是 " << MAX(num1, num2); //呼叫巨集函數MAX cout << endl; cout << " 的較小值是 " << MIN(num1, num2); //呼叫巨集函數MIN }

執行結果

Ex 12 寫一C++程式,利用遞回呼叫函數的方法,求n! (階乘)的值。

Homework 5 利用遞迴及非遞迴方式撰寫Fibonacci的程式。 User輸入n值,計算出Fib(n) Fib(n) = Fib(n-1) + Fib(n-2) Fib(0) = 0, Fib(1) = 1 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, …