C 語言快速導覽 - 函數的定義

函數是利用 C 語言寫程式的模組單位, C 程式的執行是以函數為單位的,語言保留函數名稱 main 作為每個 C 程式執行的起始點,因此,所有可執行的 C 程式都需要一個名為 main 的函數。



自行定義函數的目的是將程式的功能切割為不同的模組,需要時再以呼叫的方式使用該函數所提供的功能。以下,我們先來看看該怎麼定義函數。


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() 的引數。


函數定義時所用的參數,呼叫函數時有些作者稱之為引數,於此,我們並不特別區分兩者的差別。




沒有留言: