第六章 函數與巨集

19
1-1 C的發展史 1-2 C程式初體驗 1-1-1 C的起源 1-2-1 程式碼的編寫與儲存 1-2-2 程式碼的編譯與執行 1-2-3 程式碼快速解析 1-3-1 妥善利用函數 1-3-2 適當加以縮排 1-3-3 盡量加上註解 1-4 上機實習課程 1-3 C程式設計基本 注意事項 1-1-2 C的特色與優點 1-1-3 C的程式執行過程簡介 第一章 C語言簡介

Upload: shademoon

Post on 12-Jul-2015

1.481 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: 第六章 函數與巨集

王智祥

1-1 C的發展史

1-2 C程式初體驗

1-1-1 C的起源

1-2-1 程式碼的編寫與儲存

1-2-2 程式碼的編譯與執行

1-2-3 程式碼快速解析

1-3-1 妥善利用函數

1-3-2 適當加以縮排

1-3-3 盡量加上註解

1-4 上機實習課程

1-3 C程式設計基本注意事項

1-1-2 C的特色與優點

1-1-3 C的程式執行過程簡介

第一章 C語言簡介

Page 2: 第六章 函數與巨集

1-1-1 C的起源 1-1 C的發展史

P 1-2

1972年貝爾實驗室的 Dennis Ritchie 以 B 語言為基礎,並持續改善它。

除了保留 BCLP 及 B 語言中的許多觀念外,更加入了資料型態的觀念及其它功能,並且將它發表為「C語言」。

Dennis Ritchie 發展出來的 C 語言乃是架構在 DEC PDP-11 電腦上,最初的目的主要是做為開發 Unix 作業系統的工具。

由於 C 語言這樣實用的工具使得 Unix 作業系統開發難度降低且進行順利,所以也開始應用在其它的程式設計領域,因此也使得 C 語言迅速受到眾人的矚目。

Page 3: 第六章 函數與巨集

1-1-2 C的特色與優點(1) 1-1 C的發展史

P 1-4

程式可攜性高,具有跨平台能力

只要是使用 ANSI C 定義的標準函數庫來開發,而其中不包含一些中斷處理或廠商單獨提供的函數庫,那麼所開發出來的程式將具有相當高的可攜性(Portable)。

只要如果將開發出來的 C 語言程式碼拿到不同的作業平台上重新編譯,隨即能夠產生一個功能相同的可執行程式,而程式開發者不再需要重新編撰程式碼內容。

體積小,執行效率高

只要相較於 Java、Visual Basic、Pascal 等程式語言來說,C 語言的執行效率相當高,執行時也相當穩定。

Page 4: 第六章 函數與巨集

1-1-2 C的特色與優點(2) 1-1 C的發展史

P 1-4

具低階處理能力

雖然這些較低階的操作技巧在學習上並不容易,不過卻是其它高階程式語言難以達成的工作項目。這也是C功能較其它語言強大的地方。

作為學習其它語言的基礎

C 語言堪稱是「程式語言之父」,例如 C++、Java、PHP 與 C# 等程式語言,它們的基本語法及某些程式觀念都與 C 十分類似。

Page 5: 第六章 函數與巨集

1-1-3 C程式執行過程簡介 1-1 C的發展史

P 1-5

過程通常可區分為「編輯」、「編譯」、「連結」、「載入」與「執行」五個階段。

目前多半是使用所謂的整合開發環境(IDE,Integrated Development Environment)來作為 C 的開發環境。

編寫完的程式碼,電腦是看不懂的,必需翻譯成電腦能懂的機器語言模式。

由於 C 是一種編譯式語言,也就是必須使用編譯器將原始程式翻譯成「目的碼」,副檔名為「*.obj」。

由於使用者編譯的C程式中可能會使用到函數庫(副檔名為*.lib)中的函數,或者一個程式可能分為數個檔案來開發,這些檔案在編輯為目的檔後,必須透過連結器(linker),最後才會產生可執行檔(副檔名為*.exe)。

最後載入過程將可執行檔與相關的函數庫元件,從磁碟中載入到記憶體中,就可準備執行了。

Page 6: 第六章 函數與巨集

1-2 C程式初體驗

功能表

程式輸入游標

編寫程式區

專案瀏覽區

1-2 C程式初體驗

P 1-6

工具列

狀態列

編譯器輸出

紀錄區

Page 7: 第六章 函數與巨集

1-2-1 程式碼的編寫與儲存

01 #include <stdio.h>

02 #include <stdlib.h>

03

04 int main(void)

05 {

06 printf("C程式初體驗\n");/* 呼叫printf()函數 */

07

08 system("pause");

09 return 0;

10 }

1-2 C程式初體驗

P 1-7

輸入完以上程式碼後,請執行「檔案/儲存」指令或是按工具列上

的「儲存」 鈕,並以「Ch01_01」為檔名,「.c」為副檔名進

行檔案儲存。

Page 8: 第六章 函數與巨集

1-2-2 程式碼的編譯與執行

編譯進行中,這還包括連結與載入過程

1-2 C程式初體驗

P 1-7

過程按下工具列中的編譯按鈕 或執行「執行/編譯」

指令,然後會出現以下視窗,代表檔案正在編譯中,如

果編譯成功,原本的 Compiling 會出現 Done 字樣:

Page 9: 第六章 函數與巨集

1-2-2 程式碼的編譯與執行 1-2 C程式初體驗

P 1-7

請執行「執行/執行」指令或按下執行鈕 。將會看到本程式的執行結果:

Page 10: 第六章 函數與巨集

1-2-3 程式碼快速解析 1-2 C程式初體驗

P 1-8

程式範例:第一個程式碼範例:CH01_01.c

Page 11: 第六章 函數與巨集

1-2-3 程式碼快速解析 1-2 C程式初體驗

P 1-8

第 1~2 行: 利用 #include 指令是前置處理指令的一種,在編譯時可將<stdio.h> 標頭檔與 <stdlib.h> 標頭檔含括進來。

第 4 行: C 中的 main() 函數是程式的進入點,而程式的內容則包含在 main() 下的大括弧 {} 內,而「void」表示此函數不需要任何的引數,int 是宣告函數回傳值是整數資料型態。

第5~10行: 表示此函數的所有指令內容。

當然在這兩個大括弧間也可以完全沒有任何指令。

Page 12: 第六章 函數與巨集

1-2-3 程式碼快速解析 1-2 C程式初體驗

P 1-9

第 6 行: printf() 是 C 語言的輸出函數指令,會將括號中引號「“」內的字串輸出到螢幕上,而「/n」則是跳脫字元的一種,有換行的功用,這些輸出功能會在第三章中為您深入說明。

至於「/*」與「*/」符號所包括的部份稱為「註解」。

第 8 行: 由於 Windows 系統正常結束後,都會直接關掉執行視窗,執行畫面會一閃即逝,根本看不出執行結果。這時可利用system() 函數呼叫系統參數 pause 會讓程式執行到此先暫停,

並且在執行視窗中會印出 "請按任意鍵繼續… " 等字,當您

敲下任意鍵後,程式便會往下執行。

第 9 行: 因為主程式被宣告為 int 資料型態,必須回傳(return)一個值,在習慣上是傳回 0 作為程式執行完畢,在 ANSI C

語法中,如果這行指令省略,也會自動視為是「return 0;」指令。

Page 13: 第六章 函數與巨集

1-3-1 妥善利用函數

01 int main( )

02 {

03 指令 1;

04 指令 2;

05 .

06 .

07 }

C語言程式的開頭

C語言程式的內容

1-3 C程式設計基本注意事項

P 1-10

當程式開始執行時,一定會先執行 main() 這個函數,而不管它在程式中的任何位置,編譯器都會找到它才開始編譯程式內,因此 main() 又稱為「主函數」,架構如下所示:

Page 14: 第六章 函數與巨集

1-3-1 妥善利用函數

01 int main( )

02 {

03 }完全無任何的陳述

P 1-10

1-3 C程式設計基本注意事項

其中第02行的左大括弧 { 表示 main() 函式開始,第07行的右大括弧 } 則表示 main() 函式的結束。

另外在這兩個大括弧間也可以完全沒有任何內容,因此一個最簡單的 C 程式可以如下:

Page 15: 第六章 函數與巨集

1-3-1 妥善利用函數

標 頭 檔 說 明

<math.h> 包含數學運算函數

<stdio.h> 包含標準輸出入函數

<stdlib.h> 標準函數庫,包含各類基本函數。

<string.h> 包含字串處理函數

<time.h> 包含時間、日期的處理函數

P 1-11

1-3 C程式設計基本注意事項

底下列出常見的C內建標頭檔供做參考:

Page 16: 第六章 函數與巨集

1-3-2 適當加以縮排

Return0; /*不合法的指令*/

printf

( "C程式初體驗\n")

; /*合法的指令*/

printf("C程式初體驗!!\n"); system("pause"); return 0; /*合法的指令*/

print f("C程式初體驗!!\n"); /*不合法的指令*/

P 1-12

1-3 C程式設計基本注意事項

在同一行指令中,對於完整不可分割的單元稱為字符(token),兩個字符間必須以空白鍵、tab鍵或輸入鍵區隔。

請看以下指令範例:

Page 17: 第六章 函數與巨集

1-3-2 適當加以縮排

P 1-13

1-3 C程式設計基本注意事項

像是在主程式中包含子區段,或者子區段中又包含其它子區段時,這時就可以透過縮排來區分程式碼的層級。

簡單來說,遇到大括號時就要考慮縮排。

如以下巢狀if else指令,透過縮排的效果讓,讓區塊層次更分明:

Page 18: 第六章 函數與巨集

1-3-3 盡量加上註解

/*

這是我的第一個C程式它會顯示一小段簡單的文字

*/

中間的內容編譯器全部不予理會

P 1-13

1-3 C程式設計基本注意事項

註解不僅可以幫助其他的程式設計師了解程式內容,在日後進行程式維護時,詳盡的註解也能夠省下不少維護時間與成本。

在 C 中「/*」與「*/」間的文字都屬於註解內容。

另外註解也能夠跨行使用。

如下所示:

Page 19: 第六章 函數與巨集

1-4 上機實習課程

P 1-8

1-4 上機實習課程

上機實習範例: CH01_02.c

執行結果