自行定義函數的目的是將程式的功能切割為不同的模組,需要時再以呼叫的方式使用該函數所提供的功能。以下,我們先來看看該怎麼定義函數。
C 語言中的函數與數學上的意義相同,例如指數函數
y = a x
指數函數需要底數 a 及指數 x ,然後計算出對應的 a 的 x 值,也就是 y 的值。若是用 C 語言寫此一指數函數, a 與 x 為所需定義的參數,而 y 為函數的回傳值。
寫成函數,如下
int exponent(int a, int x) { int result = 1; while (x > 0) { result *= a; x--; } return result; }
形如以下的格式
函數定義的第一行依序指明回傳值型態、函數名稱及小括弧內的參數列宣告, C 語言的函數可以接受多個參數,但只能回傳單一個值,因此回傳值型態便是指明該單一回傳值的型態。
函數名稱必須是合法的識別字,參數名稱亦同,此外,每個參數除了名稱,亦須指明型態。
兩個大括弧圍起來的便是函數內容,大體上分成三區,首先為函數所需變數的宣告,此變數為函數內的區域變數。我們的指數函數是宣告 result 用來保存計算結果,同時指派初值為 1 。
其次為函數功能的陳述,我們的指數函數地例子是利用一個 while 迴圈,讓 result 不斷乘上底數 a ,然後指數 x 逐次遞減,直到遞減為 0 ,迴圈隨之結束。
最後為 return 陳述,也就是函數回傳數值的地方。 return 為 C 語言的關鍵字之一,主要用為函數回傳數值,其後可接運算式,最後會回傳該運算式計算出的值。
C 語言僅有傳值呼叫,不論參數或回傳值都是傳遞拷貝後的數值,因此各自函數內的變數都為區域變數,互不相干。呼叫函數無法修改原呼叫函數內的值,但可以傳回處理計算過的值給呼叫函數,
以下,我們寫一個 C 程式測試這個指數函數
#include <stdio.h> int exponent(int a, int x) { int result = 1; while (x > 0) { result *= a; x--; } return result; } int main(void) { int i; for (i = 0; i <= 10; i++) { printf("%2d%5d\n", i, exponent(2, i)); } return 0; } /* 《程式語言教學誌》的範例程式 http://pydoing.blogspot.com/ 檔名:exponent1.c 功能:測試指數函數,從 2 的 0 次方列印到 10 次方 作者:張凱慶 時間:西元2010年4月 */
編譯後執行,如下
第 3 到 13 行為函數 exponent() 的定義,注意這放在函數 main() 之前的地方。函數 main() 在第 20 行的 printf() 內呼叫 exponent() ,因為 exponent() 會回傳整數,所以可以直接作為 printf() 的引數。
函數定義時所用的參數,呼叫函數時有些作者稱之為引數,於此,我們並不特別區分兩者的差別。
沒有留言:
張貼留言