C語言筆記 — 函式(Functions)

Sharon Peng
5 min readJul 25, 2019

--

本章重點:

  1. 函式介紹
  2. 函式宣告
  3. 函式中的參數
  4. 變數的範圍
  5. 靜態變數

1. 函式介紹

函式在C語言中,有相當重要的地位,他可以避面許多繁瑣的步驟,並將自己的程式變得淺顯易懂。

之前有提到過printf()的由來,它的本質上也是一個函式。(include在stdio.h函式庫中)

現在我們也能自己創造一個屬於我們自己的函示,那就趕快來動手吧~

函式的特色:

  1. 一段程式碼,執行特別的工作。
  2. 可重複使用
  3. 讓程式變得淺顯易懂
  4. 在呼叫函式不變的狀況下,可以直接修改程式。

2. 函式宣告

從一個簡單的例子開始講起,我們要寫一個計算正方形的程式,並且使用函式呈現。

組成函式有幾個條件:

  1. 在主程式上方,需要宣告他的函式原型(跟程式說我設的函式大概有什麼東西等等)
回傳值型態 函式名稱 (參數) 

2. 主要的函式,定義函式要怎麼使用。

沒有回傳值:void square(int length)

在下方的程式中,當我們程式跑到square(length)中,代表他呼叫了下方void square函式,而因為這個函式沒有回傳值,所以在印出答案中後,就直接結束程式的執行了(可以想像有一個return 0 函式下方)。

有回傳值:int square(int len)

回傳一個int的型態回去主程式

在下方的程式中,當我們程式跑到square(length)中,代表他呼叫了下方int square函式,而因為這個函式有回傳值,所以在進行計算過後,我們有一個return x,把計算過後的答案傳回到主程式(ans就會等於回傳值x),印出答案後程式結束執行。

3. 函式中的參數

函式中的參數不一定只有一個,可以有兩個、三個或多個參數。

兩數相加的程式,裡面的參數會有兩個,若想要三數相加可以在參數那格中多加一個變數。以下為參考程式。

4. 變數的範圍(Variable Scope)

變數的範圍,也可以說是變數程式中的可識別度。

我們分成

— global (全域變數)整個程式中皆可以使用此變數

— local (區域變數)只能在部分函式中使用

ex: 上一題兩數相加,在函式sum中,所設的變數x,就只能在函式sum中使用,若x出現在主程式中,電腦會不知道x是什麼,會出現error,若要使用需要再重新宣告一次。

#include <stdio.h>

int global1 = 0; // 全域變數

int main() {
int local1 = 2, local2 = 3; // 區域變數

global1 = local1 + local2;
printf("%d \n", global1); /* 5 */

return 0;
}

說明:

global宣告在主程式外,代表全部的程式都可以使用,包含自己所設的函式。

local宣告在主程式內,只有主程式內可以使用,若外部有宣告函式,則不可以使用?

5. 靜態變數(Static Variable)

static變數,是一個區域變數,但不會因為函式執行結束,變數內的資料就不見。例如:

上面的for迴圈,是為了要進入此函式五次才設定的。函式內部的X沒有因為離開函式後,其數字重新歸零,而是繼續累加。這就是static變數的最大特色。要等到程式全部結束後,X才會回到原本預設的狀態。

練習:請用函式寫出一個計算正三角形面積(可以查公式)的程式,答案要小數點下3位。

輸入:3

輸出:3.897

參考程式在下方:

#include<stdio.h>
#include<math.h> //為了使用sqrt(開根號之意,可以上cplusplus查詢)
void Triangle( int );int main()
{
int a;
scanf("%d", &a);
Triangle(a);return 0;
}
void Triangle(int a)
{
float area = 0;
area = sqrt(3) / 4 * a * a; // 公式
printf("%.3f\n", area);

}

這節的課程比較複雜,謝謝大家有耐心的看完,若有什麼錯誤還請多多指教~

--

--