C 速查手冊

程式基本概念

這裡先用一個簡單範例講解 C 程式 (program) 的基本概念

#include <stdio.h>
 
int main(void)
{
    char name[20];
     
    printf("請輸入你的暱稱: ");
    scanf("%s", name);
     
    printf("哈囉,%s!今天好嗎?\n", name);    
     
    return 0;
}
 
/* 《程式語言教學誌》的範例程式
    http://kaiching.org/
    檔名:simple.c
    功能:簡單的程式範例
    作者:張凱慶 */

來編譯執行看看

$ gcc simple.c
$ a.out
請輸入你的暱稱:

程式會要求先輸入暱稱,執行時想輸入甚麼暱稱都可以,這邊輸入「莫爾」,然後按下 Enter

請輸入你的暱稱: 莫爾
哈囉,莫爾!今天好嗎?
$

當下一個提示字元出現之後,程式便執行結束。

簡言之,這是個跟使用者說「哈囉」的程式,以下逐步講解程式各部分,先看到這一行

#include <stdio.h>

利用井字號 # ,後頭接著 include ,這是 C 語言裡前置處理器 (preprocessor) 的一種,主要用途為引入其他的程式檔案。這裡用角括號 < > 圍起來的 stdio.h ,這是標準函數庫中的標頭檔 (header file) ,其內定義有關基本輸入、輸出的相關功能。

角括號 < > 跟數學所用的小於、大於運算子是相同的符號。

引入標準程式庫的標頭檔使用角括號,若是引入自行定義的標頭檔或程式檔案則用雙引號 " " 圍起來,如

#include "YourFile"

接下來繼續看到程式的第 3 行

int main(void)

C 程式由函數 (function) 所組成,每個可執行的 C 程式原始碼 (code) 中必須要有個 main() 函數,因為編譯器 (compiler) 會自動將 main() 函數設成程式的起始點,倘若程式中少了 main() 函數,編譯時便會發生錯誤。

函數可以有回傳值 (return value) ,也可以沒有回傳值。若是有回傳值,需要在定義函數時同時標明,此例中

int main(void)

表示 main() 函數回傳一個整數, int 在 C 語言裡屬於關鍵字,其為 integer 的前三個字母縮寫,代表基本資料型態中的整數型態。

main() 函數後面的小括弧中為參數列 (parameter list) ,這是說,呼叫函數時可以同時傳遞參數 (parameter) 給函數以進行計算, void 也是關鍵字之一,這裡表示空的參數列, void 也可用為宣告沒有回傳值的函數。

大括弧 { } 圍起來的部分,便是 main() 函數的內容。這個函數的功能很簡單,就是要求使用者輸入暱稱,然後向使用者打招呼。首先,自然要有存放使用者輸入暱稱的變數 (variable) ,這一行

char name[20];

便是宣告一個字元陣列 (character array) 的陳述 (statement) ,所謂的陳述是函數內執行的基本單位,習慣上 C 語言每一行會以分號 ; 結尾,每一個以分號結尾的程式碼都是一個陳述句。

這裡的字元陣列是用來儲存使用者從鍵盤上的輸入,陣列 (array) 是 C 語言衍生資料型態 (derived type) 之一,這種資料型態是同質的資料結構 (data structure) ,這意思是說,陣列可儲存多個相同資料型態 (data type) 的資料,至於陣列中可儲存多少相同資料型態的數量,須宣告 (declare) 時指定。

此例中 char 亦為指定資料型態的關鍵字之一,其為字元型態。 C 語言中的字元型態使用 ASCII 編碼,因此每一個字元型態的資料與某一個特定的 ASCII 編碼相對應。

char 隨後緊接著是陣列名稱 name ,同時緊接中括弧 [ ] ,表示這是一個陣列。中括弧中的數字 20 指定這個陣列的大小,因此陣列 name 可以存放 20 個 ASCII 編碼的字元。

下面

printf("請輸入你的英文暱稱: ");

以及

printf("哈囉,%s!今天好嗎?\n", name);

這是呼叫標準程式庫 (standard library) 中的 printf() 函數,其作用為輸出資料串流到標準輸出裝置上,標準輸出裝置通常是螢幕。 printf() 函數最少需要一個字串作為參數。所謂的字串就是用雙引號 " " 圍起來的連續文字資料, C 語言中,字串 (string) 也就是字元陣列,因此可用代表字元陣列的變數操作字串。

其中第二個 printf() 裡參數字串出現的 %s ,這是 C 語言格式化輸出的功能,這表示這地方是一個變數值,型態為字串,字串後加上逗點,隨後再加入所欲顯示的變數。

再看到另一個 scanf() 函數的部分

scanf("%s", name);

這是呼叫標準程式庫中的 scanf() 函數,用來從標準輸入裝置輸入資料,標準輸入裝置通常是鍵盤。 scanf() 函數採用格式化輸入,以雙引號圍住所要輸入的資料型態,此例中的 %s 為字串,然後加上逗點,隨後再加入準備存放輸入資料的變數。 scanf() 函數用來存放資料的變數必須用指標,但由於陣列名稱等同指標,所以無須加上取址運算子 &

大括弧結束前有個 return 陳述, return 也為關鍵字之一,作為函數執行結束回傳數值之用。此例中用作函數 main() 回傳整數 0 給作業系統,表示程式順利執行到結束。

return 0;

程式的最底下

/* 《程式語言教學誌》的範例程式
    http://kaiching.org/
    檔名:simple.c
    功能:簡單的程式範例
    作者:張凱慶 */

這是程式的註解 (comment) 。 C 語言的註解用斜線加星號 /* 開始,然後到星號到斜線 */ 結束,可以跨行,註解的目的是對程式原始碼的附加說明,編譯器會忽略所有的註解文字。另外, C語言也可以用連續兩條斜線 // 的單行註解方式,如

//這是註解的第一行
//這是註解的第二行
//這是註解的第三行

回 C 速查手冊首頁