這一套教材基本上是按照以下這本書編寫的。
B. W. Kernighan, D. M. Ritchie, The C Programming Language, 2nd ed.
Prentice-Hall, 1988.
Ritchie 是 C 語言的發明人。
雖然發明人未必是最好的說明人,但是我發現 Ritchie 的文章也是很好的。
而且,這本書的合作者 Kernighan 是在貝爾實驗室實施教育訓練的人,
他的專長應該就是說明技術細節、和設計教材。
就我個人而言,我認為這本書是極少數的讓我讀起來感到愉快的電腦技術性書籍。
在這份教材中,我們稱以上那本書為 [K&R2]。
這本書已經有中文翻譯本。但是我自己從未讀過,不知該不該推薦。
我們假設的學習環境,是 UNIX 作業系統。
最好能有 gcc 編譯程式,有 screen 模擬文字視窗的功能。
[ 相逢篇 ]‧[ 認識篇 ]‧
[ 交遊篇 ]‧[ 追求篇 ]
- 預備工具
- hello, world---hello.c
- 檔頭與註解
- C 的字 (word)、語句 (expression) 和指令 (statement)
- 函式 (function)
- 標準函式庫 (standard library)
- 整數變數 int---fahr-int.c
- printf() 與跳脫字元 \ (escape character)
- 宣告 vs 定義
- 整數計算
- 浮點數變數 double---fahr-float.c
- 其他資料型態與它們之間的轉換 (char、short)
- 流程控制 (flow control)---f2c-straight.c
- while---f2c-while.c
- 邏輯計算
- 排版格式 (indentation)
- 原始碼的可讀性、符號常數 (symbolic constant)---f2c-sym.c
- for---f2c-for.c f2c-whfor.c
- 更多的迭代範例
- 再多點兒技巧的迭代範例
- getchar() 和 putchar()---mycat0.c
- 標準輸入裝置 stdin
- 為什麼 getchar() 要儲存到 int 資料型態的變數?
- 優先序與左右傾觀念---mycat.c
- sizeof 和 ++、-- 運算---nc-long.c、nc-double.c、nc-whfor.c
- if---nl.c
- 廣義字,if-else 與 || 算子---mywc.c
- || 和 && 算子
- 層層相套的 if-else
- 數學函式 <math.h>---test-pow.c、test-ceil.c
- 序列 array 資料結構---digits-ifelse.c、digits.c
- 序列編號---toolong.c
- ++ 的前後差別意義
- 序列計算的範例---demo-stats.c、prime.c
- 雙足標序列---test-matrix.c
- 矩陣與向量計算範例---demo-dot.c、demo-mvmul.c
- 使用者自定函式---test-ipow.c
- 使用函式做數學計算的範例---newton-iteration.c、trapezoidal.c、collatz.c
- 遞迴---fac()
- 更多遞迴的範例---choose()
- +=、-=、*=、/=、%= 運算符號
- void---test-void.c
- address-of 運算符號---test-address.c
- scanf() 函式---test-scanf.c、stats-scanf.c、g58.txt
- 指標資料型態 (pointer)---test-pointer.c
- 讀取磁碟檔案---test-getc.c
- 寫入磁碟檔案---test-putc.c
- 格式化讀寫檔案---stats-fscanf.c、test-fprintf.c
- stdin 和 stdout
- de-reference 運算符號
- Call by Value---test-callvalue.c、ipow() 第二版
- Call by Name---test-callname-ref.c、test-callname-arr.c
- Call by Name vs Call by Value
- 向量值函數的範例---demo-polar.c
- 字串 (String)---printf-string.c
- 字串銜接與複製
- main() 函式的返回值---main-return.c
- 用 return 中斷函式
- main() 函式的輸入參數 stats-arg
- stderr
- 再談關於字 (word) 的規則
- 再談資料型態與含量---test-char.c、int2char.c
- 再談常數
- 一次讀一列字元的函式:getline()---cline.c、getline()
- 當佇列滿溢的解決範例---maxline.c
- 字串與函式的應用範例---dewhite.c
- 字串與 <string.h>---test-strlen.c、test-strlen.c
- 再談 printf() 的輸出格式---pow2_113.c
- ASCII 控制碼---VT_BS.c
- 唯讀變數 const
- 唯讀變數 vs 符號常數
- enum
- 逗點指令---reverse()
- 語句執行的順序
- 再談資料型態轉換 (cast)
- 位元計算---bcount()
- 條件語句 ?:
- 巨集---ROUND()
- 再談優先序
- 使用者自定外部函式---s2i()、test_s2i.c
- do-while---i2s()、test_i2s.c
- continue---mean.c
- break---trim.c
- switch---par2str.c
- 排序---nsort()
- 搜尋---search()、vsearch()
- goto---vsearch() goto 版、prime.c goto 版
- 快速搜尋---binsearch()
- 髏數的位址
- 指標資料型態 (pointer)
- main(int, char*[]) 的參數
- +標與足標、指標算術
- 無型態咽標 void*
- 列印記憶體內的位元排列
- &A談 Call by Name vsearch() 第三版
- 變數的有效範圍、外部變數 (b18)
- 函數當作函數的參數---mysort.c
[ 相逢篇 ]‧[ 認識篇 ]‧
[ 交遊篇 ]‧[ 追求篇 ]