1、C語言程式設計 函數 本章學習重點 7 1函數的概念7 2函數的基本形式7 3函數的呼叫7 4遞迴函數7 5常用的數學函數7 6儲存類別 函數的概念 函數的優點分工合作較好的可讀性便於修改 除錯提高撰寫程式的效率函數可分成兩種型態函數庫中原先就有的現成函數使用者依程式需求設計的函數 函數的基本形式 函數定義的語法傳回值型態函數名稱 參數傳遞 參數傳遞型態 函數主體 範例Ch7 2 Ch7 2兩數相加的函數1 include2voidmain 3 4inta 3 b 2 c 5intsum int int 6c sum a b 7printf sum d d d n a b c 8 9intsu
2、m x y 10intx y 11 12intz 13z x y 14return z 15 程式執行結果說明 sum 3 2 5 範例Ch7 2 函數呼叫的語法 語法函數名稱 參數 說明函數如果不需要呼叫參數 則括號內的參數可以省略 若參數包含一個以上時 需以逗號隔開 呼叫與被呼叫的函數其參數是相對應的 且型態要一致 函數的傳回值 函數的傳回值 有以下幾種情況 函數沒有傳回值 傳回值型態為void函數傳回值為整數 int 時 可以省略函數有傳回值時 可以在傳回值上做運算函數的傳回值型態應該和return中的型態要一樣使用return可以立即結束函數的執行 Ch7 3計算圓面積的函數1 inc
3、lude2doublearea r 3floatr 4 5doubles 6s r r 7return s 8 9voidmain 10 11floatr 12doublea 範例Ch7 3 程式執行結果 Pleaseinputthecircler 5Thecircleareais78 540000 printf Pleaseinputthecircler n 14scanf f 17 範例Ch7 3 範例Ch7 4 Ch7 4函數求絕對值與平方值1 include2voidmain 3 4intabs int 5intsqrt int 6inta 3 b c 7b abs a 8c sqrt
4、 a 9printf theabsofa d n b 10printf thesqrtofa d n c 11 12intabs intx 13 14inty if x 0 y x elsey x returny intsqrt intz ints s z z returns 範例Ch7 4 程式執行結果 theabsofa 3thesqrtofa 9 範例Ch7 4 遞迴函數 遞迴函數是指在程式中直接或間接呼叫該程式本身 程式中使用遞迴函數 將可處理須重覆運算的問題 費氏數列 費氏數列的規則如下所示 費氏數列的數學表示式 0ifn 0Fib n 1ifn 1fib n 1 fib n 2 i
5、fn 2 範例Ch7 5 Ch7 5遞迴函數求費氏數列1 include2intfib intn 3 4if n 0 return 0 5elseif n 1 return 1 6elsereturn fib n 1 fib n 2 7 8voidmain 9 10intfib int 11ints 12s fib 6 13printf Thefib 6 d n s 14 程式執行結果說明 Thefib 6 8 範例Ch7 5 階乘函數 定義如下 1ifn 0n fact n 1 ifn 1說明 fact n 3 3 2 3 2 1 3 2 1 0 3 2 1 1 6fact 3 3 fact
6、 2 3 2 fact 1 3 2 1 fact 0 3 2 1 1 6 範例Ch7 7 Ch7 7利用遞迴函數求n階乘1 include2voidmain 3 4intfact int 5intn 6printf 請輸入n階乘 7scanf d 14 程式執行結果說明 請輸入n階乘 66 720 6 6 fact 5 6 5 fact 4 6 5 4 fact 3 6 5 4 3 fact 2 6 5 4 3 2 fact 1 6 5 4 3 2 1 fact 0 6 5 4 3 2 1 1 720 範例Ch7 7 常用的數學函數 在程式中使用下列數學函數時 需在開頭加上 include 儲
7、存類別 C語言的儲存類別 storageclass 也就是變數的生命期 lifetime 及可見度 scope 一般儲存類別的宣告語法如下 儲存類別資料型態識別字一般將儲存類別區分為auto static register extern四大類 內在 auto 變數 宣告為auto的變數 它的生命期只存活在函數的區塊 block 中 它是一個區域變數 localvariable includevoidmain autointi autointj 變數j變數i 可見度可見度 靜態 static 變數 內部靜態 staticauto 變數內部靜態變數是屬於區域變數 localvariable 外部靜
8、態 staticexternal 變數外部靜態變數是屬於全域變數 globalvariable staticintx 外部靜態變數 voidmain void staticinty 內部靜態變數 變數x 可見度 整個程式 變數y 可見度 範例Ch7 12 Ch7 12全域變數與區域變數1 include2voidfunction void 3staticintx 1 4voidmain 5 6staticintx 3 7printf 外在區域變數x d n x 8 9staticintx 10 10printf 內在區域變數x d n x 11 12printf 外在區域變數x d n x 13function 14printf 區域變數x d n x 15 16voidfunction void 17 18printf 全域變數x d n x 19 程式執行結果 外在區域變數x 3內在區域變數x 10外在區域變數x 3全域變數x 1區域變數x 3 範例Ch7 12 語法extern資料型態變數名稱 外在 external 變數 合併兩個程式 prog 1 c 主程式 prog 2 c編譯器 prog 1 objprog 2 obj連結程式prog 1 exe 外在 external 變數