|07 函數
7.1 關於函數 |main() int main(void) { //程式內容 } | 標準函數 >>
|標準函數 #include <stdio.h> #include <stdlib.h> 7.1 關於函數 << main() 函數使用步驟 >>
7.2 使用函數 |函數使用步驟 7.2.1 宣告定義與呼叫 原型宣告:如同變數宣告,在定義函數之前,必須預先宣告函數的原型,所謂的原型,是函數的名稱、引數以及回傳值的型態等相關特性,它的目的是告知編譯器檔案中存在此函數。 2. 內容定義:根據原型,定義函數的內容程式碼,建構所需的功能。 3. 呼叫:需要執行函數功能時,直接透過名稱的引用,對其進行呼叫。 << 標準函數 函數原型宣告 >>
|函數原型宣告 void dosome(void); 7.2 使用函數 |函數原型宣告 7.2.1 宣告定義與呼叫 void dosome(void); dosome 是函式的名稱,根據所要實作的功能為其命名,方便理解函數的功能以及往後程式的呼叫。 void 是一個關鍵字,第一個 void 表示這個函數執行完畢將不回傳任何值。若是想要回傳整數,就必須以 int 取代 void ,其它型態的回傳值類推。 小括弧是必要的,用來承接特定型態的引數, void表示沒有傳入任何引數。 「;」 表示結束宣告。 4 3 2 1 << 函數使用步驟 函數定義與呼叫 >>
|函數定義與呼叫 void dosome(void) { … /*函數功能程式碼*/ } 7.2 使用函數 |函數定義與呼叫 7.2.1 宣告定義與呼叫 void dosome(void) { … /*函數功能程式碼*/ } 函數的程式區塊範圍,其中包含定義函數功能所需的程式敘述。 dosome(); dosome() 是函式的名稱,名稱後方必須加上一個小括弧,然後補上一個 「;」 構成完整的程式敘述。完成函數呼叫 2 1 << 函數原型宣告 範例:簡單函數示範 >>
|範例:簡單函數示範 Hello,歡迎學習 C 語言 7.2 使用函數 7.2.1 宣告定義與呼叫 3 2 1 7.2 使用函數 |範例:簡單函數示範 7.2.1 宣告定義與呼叫 Hello,歡迎學習 C 語言 3 2 1 << 函數定義與呼叫 範例:簡單函數示範 >>
|範例:簡單函數示範 7.2 使用函數 7.2.1 宣告定義與呼叫 << 範例:簡單函數示範 7.2 使用函數 |範例:簡單函數示範 7.2.1 宣告定義與呼叫 << 範例:簡單函數示範 範例:簡單函數示範 >>
|範例:簡單函數示範 Hello,歡迎學習 C 語言 Hello,歡迎學習 C 語言 7.2 使用函數 7.2.1 宣告定義與呼叫 6 5 7.2 使用函數 |範例:簡單函數示範 7.2.1 宣告定義與呼叫 6 5 4 Hello,歡迎學習 C 語言 Hello,歡迎學習 C 語言 3 2 1 << 範例:簡單函數示範 函數參數 >>
小括弧定義承接外部傳入參數的引數型態名稱。 7.2 使用函數 |函數參數 7.2.2 函數的參數 void dosome(type1,type2,…) ; 小括弧定義承接外部傳入參數的引數型態名稱。 void dosome(type1 arg1,type2 arg2, …){ 函式 dosome 區塊程式碼 } 定義函數必須指定每一個引數的變數名稱。 呼叫此種函數的程式碼,須根據定義傳入對應型態的參數,在函數中直接透過引數名稱便能將其取出。 2 1 << 範例:簡單函數示範 函數的參數語法格式 >>
7.2 使用函數 |函數的參數語法格式 7.2.2 函數的參數 << 函數參數 範例:函數的引數傳遞示範 >>
|範例:函數的引數傳遞示範 輸入小時數: 6 小時等於 360 分鐘 6 6 7.2 使用函數 7.2.2 函數的參數 6 5 4 3 2 7.2 使用函數 |範例:函數的引數傳遞示範 7.2.2 函數的參數 輸入小時數: 6 小時等於 360 分鐘 6 6 6 5 4 3 2 1 << 函數的參數語法格式 範例:函數的引數傳遞示範 >>
|範例:函數的引數傳遞示範 7.2 使用函數 7.2.2 函數的參數 << 範例:函數的引數傳遞示範 7.2 使用函數 |範例:函數的引數傳遞示範 7.2.2 函數的參數 << 範例:函數的引數傳遞示範 範例:多引數函數示範 >>
|範例:多引數函數示範 長 6 cm,寬 15 cm 的矩形面積等於 90 平方公分 請輸入長與寬 6 15 6 15 7.2 使用函數 7.2 使用函數 |範例:多引數函數示範 7.2.2 函數的參數 12 請輸入長與寬 6 15 11 10 9 8 6 15 7 6 5 4 3 長 6 cm,寬 15 cm 的矩形面積等於 90 平方公分 2 1 << 範例:函數的引數傳遞示範 函數回傳值語法定義 >>
|函數回傳值語法定義 value x= dosome(arg , …) ; int dosome(type1,type2,…) ; 7.2 使用函數 |函數回傳值語法定義 7.2.3 函數回傳值 int dosome(type1,type2,…) ; int dosome(type1 arg1,type2 arg2, …){ … return value ; //回傳 value } x= dosome(arg , …) ; value 2 1 << 範例:多引數函數示範 範例:函數回傳值示範 >>
|範例:函數回傳值示範 長 6 cm,寬 15 cm 的矩形面積等於 90 平方公分 請輸入長與寬 6 15 6 15 6 15 90 7.2 使用函數 |範例:函數回傳值示範 7.2.3 函數回傳值 請輸入長與寬 6 15 8 6 15 7 6 6 15 5 90 4 3 2 長 6 cm,寬 15 cm 的矩形面積等於 90 平方公分 1 << 函數回傳值語法定義 範例:函數回傳值示範 >>
|範例:函數回傳值示範 7.2 使用函數 7.2.3 函數回傳值 << 範例:函數回傳值示範 7.2 使用函數 |範例:函數回傳值示範 7.2.3 函數回傳值 << 範例:函數回傳值示範 函數區塊的有效區域 >>
|函數區塊的有效區域 7.3 函數與有效區域 7.3.1 變數與宣告範圍 << 範例:函數回傳值示範 << 範例:函數回傳值示範 範例:函數範圍 >>
|範例:函數範圍 100 100 7.3 函數與有效區域 7.3.1 變數與宣告範圍 3 2 1 << 函數區塊的有效區域 << 函數區塊的有效區域 範例:函數範圍 >>
7.3 函數與有效區域 |範例:函數範圍 7.3.1 變數與宣告範圍 << 範例:函數範圍 變數範圍錯誤 >>
7.3 函數與有效區域 |變數範圍錯誤 7.3.1 變數與宣告範圍 << 範例:函數範圍 範例:函數引數範圍 >>
|範例:函數引數範圍 7.3 函數與有效區域 7.3.1 變數與宣告範圍 3 2 1 << 變數範圍錯誤 << 變數範圍錯誤 範例:全域變數 >>
|範例:全域變數 a+b=300 a-b=100 200+100 300 200-100 300 7.3 函數與有效區域 7.3.2 全域變數 a+b=300 a-b=100 10 9 8 7 6 200+100 5 300 4 3 200-100 2 300 1 << 範例:函數引數範圍 範例:全域變數與區域變數 >>
|範例:全域變數與區域變數 6000 8000 123 6000 8000 123 7.3 函數與有效區域 7.3.2 全域變數 3 2 1 << 範例:全域變數 範例:靜態變數 >>
|範例:靜態變數 dox(): a=100 , doy(): a=100 100 100+100 => 200 100 7.3 函數與有效區域 |範例:靜態變數 7.3.3 靜態變數 100 100+100 => 200 100 100+100 => 200 dox(): a=100 , doy(): a=100 5 4 3 2 1 << 範例:全域變數與區域變數 範例:靜態變數 >>
|範例:靜態變數 dox(): a=100 , dox(): a=200 , doy(): a=100 200 7.3 函數與有效區域 |範例:靜態變數 7.3.3 靜態變數 200 200+100 => 300 100 100+100 => 200 dox(): a=100 , dox(): a=200 , doy(): a=100 5 4 3 2 1 << 範例:靜態變數 範例:靜態變數 >>
|範例:靜態變數 dox(): a=100 , dox(): a=200 , dox(): a=300 , doy(): a=100 300 7.3 函數與有效區域 |範例:靜態變數 7.3.3 靜態變數 300 300+100 => 400 100 100+100 => 200 dox(): a=100 , dox(): a=200 , dox(): a=300 , doy(): a=100 5 4 3 2 1 << 範例:靜態變數 範例:傳值引數 >>
|範例:傳值引數 100 100 傳入 doadd() 之前:100 doadd() 的運算結果:101 傳入 doadd() 之後:100 7.4 函數的參數傳遞方式 |範例:傳值引數 100 100 6 傳入 doadd() 之前:100 doadd() 的運算結果:101 傳入 doadd() 之後:100 5 100+1 => 101 4 3 2 1 << 範例:靜態變數 範例:傳值引數 >>
7.4 函數的參數傳遞方式 |範例:傳值引數 << 範例:傳值引數 範例:簡單的遞迴運算 >>
|範例:簡單的遞迴運算 recursion(1) ... recursion(2) ... recursion(3) ... 7.5 遞迴 |範例:簡單的遞迴運算 recursion(1) ... recursion(2) ... recursion(3) ... recursion(4) ... recursion(5) ... recursion(6) ... recursion(7) ... recursion(8) ... recursion(9) ... recursion(10) ... << 範例:傳值引數 範例:簡單的遞迴運算 >>
7.5 遞迴 |範例:簡單的遞迴運算 << 範例:簡單的遞迴運算 範例:簡單的遞迴運算 >>
|範例:簡單的遞迴運算 recursion(1) ... ... recursion(10) ... 完成第 10 次的函數執行 7.5 遞迴 |範例:簡單的遞迴運算 recursion(1) ... ... recursion(10) ... 完成第 10 次的函數執行 完成第 9 次的函數執行 完成第 8 次的函數執行 完成第 7 次的函數執行 完成第 6 次的函數執行 完成第 5 次的函數執行 完成第 4 次的函數執行 完成第 3 次的函數執行 完成第 2 次的函數執行 完成第 1 次的函數執行 << 範例:簡單的遞迴運算 範例:簡單的遞迴運算 >>
7.5 遞迴 |範例:簡單的遞迴運算 << 範例:簡單的遞迴運算 範例:階層運算 >>
|範例:階層運算 請輸入大於 3 的整數:8 1x2x3x...8 = 40320 7.5 遞迴 << 範例:簡單的遞迴運算 << 範例:簡單的遞迴運算 範例:階層運算 >>
7.5 遞迴 |範例:階層運算 << 範例:階層運算 |