王智祥  著 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 語言簡介
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  語言迅速受到眾人的矚目。
1-1-2 C 的特色與優點 (1)  1-1 C 的發展史   P 1-4 程式可攜性高,具有跨平台能力 只要是使用  ANSI C  定義的標準函數庫來開發,而其中不包含一些中斷處理或廠商單獨提供的函數庫,那麼所開發出來的程式將具有相當高的可攜性( Portable )。 只要如果將開發出來的  C  語言程式碼拿到不同的作業平台上重新編譯,隨即能夠產生一個功能相同的可執行程式,而程式開發者不再需要重新編撰程式碼內容。 體積小,執行效率高 只要相較於  Java 、 Visual Basic 、 Pascal  等程式語言來說, C  語言的執行效率相當高,執行時也相當穩定。
1-1-2 C 的特色與優點 (2) 1-1 C 的發展史   P 1-4 具低階處理能力 雖然這些較低階的操作技巧在學習上並不容易,不過卻是其它高階程式語言難以達成的工作項目。這也是 C 功能較其它語言強大的地方。 作為學習其它語言的基礎 C  語言堪稱是「程式語言之父」,例如  C++ 、 Java 、 PHP  與  C#  等程式語言,它們的基本語法及某些程式觀念都與  C  十分類似。
1-1-3 C 程式執行過程簡介 1-1 C 的發展史   P 1-5 過程通常可區分為「編輯」、「編譯」、「連結」、「載入」與「執行」五個階段。  目前多半是使用所謂的整合開發環境( IDE , Integrated Development Environment )來作為  C  的開發環境。  編寫完的程式碼 , 電腦是看不懂的,必需翻譯成電腦能懂的機器語言模式。 由於  C  是一種編譯式語言,也就是必須使用編譯器將原始程式翻譯成「目的碼」,副檔名為「 *.obj 」。 由於使用者編譯的 C 程式中可能會使用到函數庫(副檔名為 *.lib )中的函數,或者一個程式可能分為數個檔案來開發,這些檔案在編輯為目的檔後,必須透過連結器( linker ),最後才會產生可執行檔(副檔名為 *.exe ) 。  最後載入過程將可執行檔與相關的函數庫元件,從磁碟中載入到記憶體中,就可準備執行了。
1-2 C 程式初體驗  1-2 C 程式初體驗 P 1-6 功能表 程式輸入 游標 編寫 程式區 專案瀏覽區 工具列 狀態列 編譯器 輸出 紀錄區
1-2-1  程式碼的編寫與儲存 1-2 C 程式初體驗 P 1-7 01  #include <stdio.h> 02  #include <stdlib.h> 03 04  int main(void) 05  { 06  printf(&quot;C 程式初體驗 \n&quot;);/*  呼叫 printf() 函數  */  07   08  system(&quot;pause&quot;); 09  return 0; 10  }  輸入完以上程式碼後,請執行「檔案 / 儲存」指令或是按工具列上的「儲存」  鈕,並以「 Ch01_01 」為檔名,「 .c 」為副檔名進行檔案儲存。
1-2-2  程式碼的編譯與執行 1-2 C 程式初體驗 P 1-7 編譯進行中,這還包括連結與載入過程 過程按下工具列中的編譯按鈕  或執行「執行 / 編譯」指令,然後會出現以下視窗,代表檔案正在編譯中,如果編譯成功,原本的  Compiling  會出現  Done  字樣:
1-2-2  程式碼的編譯與執行 1-2 C 程式初體驗 P 1-7 請執行「執行 / 執行」指令或按下執行鈕  。將會看到本程式的執行結果:
1-2-3  程式碼快速解析 1-2 C 程式初體驗 P 1-8 程式範例: 第一個程式碼範例: CH01_01.c
1-2-3  程式碼快速解析 1-2 C 程式初體驗 P 1-8 第  1~2  行: 利用  #include  指令是前置處理指令的一種,在編譯時可將 <stdio.h>  標頭檔與  <stdlib.h>  標頭檔含括進來。 第  4  行: C  中的  main()  函數是程式的進入點,而程式的內容則包含在  main()  下的大括弧  {}  內,而「 void 」表示此函數不需要任何的引數, int  是宣告函數回傳值是整數資料型態。 第 5~10 行: 表示此函數的所有指令內容。 當然在這兩個大括弧間也可以完全沒有任何指令。
1-2-3  程式碼快速解析 1-2 C 程式初體驗 P 1-9 第  6  行: printf()  是  C  語言的輸出函數指令,會將括號中引號「“」內的字串輸出到螢幕上,而「 /n 」則是跳脫字元的一種,有換行的功用,這些輸出功能會在第三章中為您深入說明。 至於「 /* 」與「 */ 」符號所包括的部份稱為「註解」。 第  8  行: 由於  Windows  系統正常結束後,都會直接關掉執行視窗,執行畫面會一閃即逝,根本看不出執行結果。這時可利用  system()  函數呼叫系統參數  pause  會讓程式執行到此先暫停,並且在執行視窗中會印出  &quot; 請按任意鍵繼續…  &quot;   等字,當您敲下任意鍵後,程式便會往下執行。 第  9  行: 因為主程式被宣告為  int  資料型態,必須回傳( return )一個值,在習慣上是傳回  0  作為程式執行完畢,在  ANSI C  語法中,如果這行指令省略,也會自動視為是「 return 0; 」指令。
1-3-1  妥善利用函數  1-3 C 程式設計基本注意事項 P 1-10 當程式開始執行時,一定會先執行  main()  這個函數,而不管它在程式中的任何位置,編譯器都會找到它才開始編譯程式內,因此  main()  又稱為「主函數」,架構如下所示:  01 int main( ) 02 { 03  指令  1; 04  指令  2; 05  . 06  .  07 } C 語言程式的開頭 C 語言程式的內容
1-3-1  妥善利用函數 P 1-10 1-3 C 程式設計基本注意事項 其中第 02 行的左大括弧  {  表示  main()  函式開始,第 07 行的右大括弧  }  則表示  main()  函式的結束。 另外在這兩個大括弧間也可以完全沒有任何內容,因此一個最簡單的  C  程式可以如下:  01 int main( ) 02 { 03 } 完全無任何的陳述
1-3-1  妥善利用函數   P 1-11 1-3 C 程式設計基本注意事項 底下列出常見的 C 內建標頭檔供做參考:  包含時間、日期的處理函數 <time.h> 包含字串處理函數 <string.h> 標準函數庫,包含各類基本函數。 <stdlib.h> 包含標準輸出入函數 <stdio.h> 包含數學運算函數 <math.h> 說        明 標 頭 檔
1-3-2  適當加以縮排 P 1-12 1-3 C 程式設計基本注意事項 在同一行指令中,對於完整不可分割的單元稱為字符 (token) ,兩個字符間必須以空白鍵、 tab 鍵或輸入鍵區隔。 請看以下指令範例: Return0; /* 不合法的指令 */ printf ( &quot;C 程式初體驗 \n&quot;) ;  /* 合法的指令 */ printf(&quot;C 程式初體驗 !!\n&quot;); system(&quot;pause&quot;); return 0;  /* 合法的指令 */ print f(&quot;C 程式初體驗 !!\n&quot;); /* 不合法的指令 */
1-3-2  適當加以縮排 P 1-13 1-3 C 程式設計基本注意事項 像是在主程式中包含子區段,或者子區段中又包含其它子區段時,這時就可以透過縮排來區分程式碼的層級。 簡單來說,遇到大括號時就要考慮縮排。 如以下巢狀 if else 指令,透過縮排的效果讓,讓區塊層次更分明:
1-3-3  盡量加上註解  P 1-13 1-3 C 程式設計基本注意事項 註解不僅可以幫助其他的程式設計師了解程式內容,在日後進行程式維護時,詳盡的註解也能夠省下不少維護時間與成本。  在  C  中「 /* 」與「 */ 」間的文字都屬於註解內容。   另外註解也能夠跨行使用。 如下所示: /*  這是我的第一個 C 程式  它會顯示一小段簡單的文字 */ 中間的內容編譯器 全部不予理會
1-4  上機實習課程 P 1-8 1-4  上機實習課程   上機實習範例: CH01_02.c 執行結果

06 函數與巨集

  • 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 語言簡介
  • 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 語言迅速受到眾人的矚目。
  • 3.
    1-1-2 C 的特色與優點(1) 1-1 C 的發展史 P 1-4 程式可攜性高,具有跨平台能力 只要是使用 ANSI C 定義的標準函數庫來開發,而其中不包含一些中斷處理或廠商單獨提供的函數庫,那麼所開發出來的程式將具有相當高的可攜性( Portable )。 只要如果將開發出來的 C 語言程式碼拿到不同的作業平台上重新編譯,隨即能夠產生一個功能相同的可執行程式,而程式開發者不再需要重新編撰程式碼內容。 體積小,執行效率高 只要相較於 Java 、 Visual Basic 、 Pascal 等程式語言來說, C 語言的執行效率相當高,執行時也相當穩定。
  • 4.
    1-1-2 C 的特色與優點(2) 1-1 C 的發展史 P 1-4 具低階處理能力 雖然這些較低階的操作技巧在學習上並不容易,不過卻是其它高階程式語言難以達成的工作項目。這也是 C 功能較其它語言強大的地方。 作為學習其它語言的基礎 C 語言堪稱是「程式語言之父」,例如 C++ 、 Java 、 PHP 與 C# 等程式語言,它們的基本語法及某些程式觀念都與 C 十分類似。
  • 5.
    1-1-3 C 程式執行過程簡介1-1 C 的發展史 P 1-5 過程通常可區分為「編輯」、「編譯」、「連結」、「載入」與「執行」五個階段。 目前多半是使用所謂的整合開發環境( IDE , Integrated Development Environment )來作為 C 的開發環境。 編寫完的程式碼 , 電腦是看不懂的,必需翻譯成電腦能懂的機器語言模式。 由於 C 是一種編譯式語言,也就是必須使用編譯器將原始程式翻譯成「目的碼」,副檔名為「 *.obj 」。 由於使用者編譯的 C 程式中可能會使用到函數庫(副檔名為 *.lib )中的函數,或者一個程式可能分為數個檔案來開發,這些檔案在編輯為目的檔後,必須透過連結器( linker ),最後才會產生可執行檔(副檔名為 *.exe ) 。 最後載入過程將可執行檔與相關的函數庫元件,從磁碟中載入到記憶體中,就可準備執行了。
  • 6.
    1-2 C 程式初體驗 1-2 C 程式初體驗 P 1-6 功能表 程式輸入 游標 編寫 程式區 專案瀏覽區 工具列 狀態列 編譯器 輸出 紀錄區
  • 7.
    1-2-1 程式碼的編寫與儲存1-2 C 程式初體驗 P 1-7 01 #include <stdio.h> 02 #include <stdlib.h> 03 04 int main(void) 05 { 06 printf(&quot;C 程式初體驗 \n&quot;);/* 呼叫 printf() 函數 */ 07 08 system(&quot;pause&quot;); 09 return 0; 10 } 輸入完以上程式碼後,請執行「檔案 / 儲存」指令或是按工具列上的「儲存」 鈕,並以「 Ch01_01 」為檔名,「 .c 」為副檔名進行檔案儲存。
  • 8.
    1-2-2 程式碼的編譯與執行1-2 C 程式初體驗 P 1-7 編譯進行中,這還包括連結與載入過程 過程按下工具列中的編譯按鈕 或執行「執行 / 編譯」指令,然後會出現以下視窗,代表檔案正在編譯中,如果編譯成功,原本的 Compiling 會出現 Done 字樣:
  • 9.
    1-2-2 程式碼的編譯與執行1-2 C 程式初體驗 P 1-7 請執行「執行 / 執行」指令或按下執行鈕 。將會看到本程式的執行結果:
  • 10.
    1-2-3 程式碼快速解析1-2 C 程式初體驗 P 1-8 程式範例: 第一個程式碼範例: CH01_01.c
  • 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 行: 表示此函數的所有指令內容。 當然在這兩個大括弧間也可以完全沒有任何指令。
  • 12.
    1-2-3 程式碼快速解析1-2 C 程式初體驗 P 1-9 第 6 行: printf() 是 C 語言的輸出函數指令,會將括號中引號「“」內的字串輸出到螢幕上,而「 /n 」則是跳脫字元的一種,有換行的功用,這些輸出功能會在第三章中為您深入說明。 至於「 /* 」與「 */ 」符號所包括的部份稱為「註解」。 第 8 行: 由於 Windows 系統正常結束後,都會直接關掉執行視窗,執行畫面會一閃即逝,根本看不出執行結果。這時可利用 system() 函數呼叫系統參數 pause 會讓程式執行到此先暫停,並且在執行視窗中會印出 &quot; 請按任意鍵繼續… &quot; 等字,當您敲下任意鍵後,程式便會往下執行。 第 9 行: 因為主程式被宣告為 int 資料型態,必須回傳( return )一個值,在習慣上是傳回 0 作為程式執行完畢,在 ANSI C 語法中,如果這行指令省略,也會自動視為是「 return 0; 」指令。
  • 13.
    1-3-1 妥善利用函數 1-3 C 程式設計基本注意事項 P 1-10 當程式開始執行時,一定會先執行 main() 這個函數,而不管它在程式中的任何位置,編譯器都會找到它才開始編譯程式內,因此 main() 又稱為「主函數」,架構如下所示: 01 int main( ) 02 { 03 指令 1; 04 指令 2; 05 . 06 . 07 } C 語言程式的開頭 C 語言程式的內容
  • 14.
    1-3-1 妥善利用函數P 1-10 1-3 C 程式設計基本注意事項 其中第 02 行的左大括弧 { 表示 main() 函式開始,第 07 行的右大括弧 } 則表示 main() 函式的結束。 另外在這兩個大括弧間也可以完全沒有任何內容,因此一個最簡單的 C 程式可以如下: 01 int main( ) 02 { 03 } 完全無任何的陳述
  • 15.
    1-3-1 妥善利用函數  P 1-11 1-3 C 程式設計基本注意事項 底下列出常見的 C 內建標頭檔供做參考: 包含時間、日期的處理函數 <time.h> 包含字串處理函數 <string.h> 標準函數庫,包含各類基本函數。 <stdlib.h> 包含標準輸出入函數 <stdio.h> 包含數學運算函數 <math.h> 說        明 標 頭 檔
  • 16.
    1-3-2 適當加以縮排P 1-12 1-3 C 程式設計基本注意事項 在同一行指令中,對於完整不可分割的單元稱為字符 (token) ,兩個字符間必須以空白鍵、 tab 鍵或輸入鍵區隔。 請看以下指令範例: Return0; /* 不合法的指令 */ printf ( &quot;C 程式初體驗 \n&quot;) ; /* 合法的指令 */ printf(&quot;C 程式初體驗 !!\n&quot;); system(&quot;pause&quot;); return 0; /* 合法的指令 */ print f(&quot;C 程式初體驗 !!\n&quot;); /* 不合法的指令 */
  • 17.
    1-3-2 適當加以縮排P 1-13 1-3 C 程式設計基本注意事項 像是在主程式中包含子區段,或者子區段中又包含其它子區段時,這時就可以透過縮排來區分程式碼的層級。 簡單來說,遇到大括號時就要考慮縮排。 如以下巢狀 if else 指令,透過縮排的效果讓,讓區塊層次更分明:
  • 18.
    1-3-3 盡量加上註解 P 1-13 1-3 C 程式設計基本注意事項 註解不僅可以幫助其他的程式設計師了解程式內容,在日後進行程式維護時,詳盡的註解也能夠省下不少維護時間與成本。 在 C 中「 /* 」與「 */ 」間的文字都屬於註解內容。   另外註解也能夠跨行使用。 如下所示: /* 這是我的第一個 C 程式  它會顯示一小段簡單的文字 */ 中間的內容編譯器 全部不予理會
  • 19.
    1-4 上機實習課程P 1-8 1-4 上機實習課程 上機實習範例: CH01_02.c 執行結果