譯者序
前言
第1章 概述
1.1 計算簡史
1.2 什麼是計算機科學
1.3 計算機硬件簡介
1.3.1 cpu
1.3.2 內存
1.3.3 輔助存儲器
1.3.4 i/o設備
1.4 算法
1.5 程序設計語言和編譯
1.6 編程錯誤和調試
1.7 軟件維護
1.8 軟件工程的重要性
1.9 關於c程序設計語言的一些思考
小結
復習題
第一部分 c語言程序設計基礎
第2章 通過例子學習
2.1 “hello world”程序
2.1.1 注釋
2.1.2 庫包含
2.1.3 主程序
2.2 兩個數的加法程序
2.2.1 輸入階段
2.2.2 計算階段
2.2.3 輸齣階段
2.3 有關程序設計過程的觀點
2.4 數據類型
2.4.1 浮點型數據
2.4.2 字符串類型的數據
2.5 錶達式
2.5.1 常量
2.5.2 變量
2.5.3 賦值語句
2.5.4 運算符和操作數
2.5.5 整型數和浮點型數的結閤
2.5.6 整數除法和求餘運算符
2.5.7 優先級
2.5.8 優先級法則的應用
2.5.9 類型轉換
小結
復習題
程序設計練習
第3章 問題求解
3.1 程序設計習語和範例
3.1.1 復閤賦值習語
3.1.2 自增和自減運算符
3.2 解決規模稍大的問題
3.3 控製語句
3.3.1 重復n次習語
3.3.2 迭代和循環
3.3.3 下標變量
3.3.4 初始化的重要性
3.3.5 讀入-直到-標誌習語
3.3.6 創造一個更實用的應用程序
3.3.7 條件執行和if語句
3.4 一個調試練習
3.5 格式化輸齣
3.5.1 printf的格式碼
3.5.2 控製空格、對齊方式和精度
3.6 構思一個程序
3.6.1 程序設計風格
3.6.2 設計時考慮將來的修改
3.6.3 #define機製
小結
復習題
程序設計練習
第4章 語句形式
4.1 簡單語句
4.1.1 賦值的嵌套
4.1.2 多重賦值
4.1.3 程序塊
4.2 控製語句
4.3 布爾型數據
4.3.1 關係運算符
4.3.2 邏輯運算符
4.3.3 簡化求值
4.3.4 標誌
4.3.5 避免布爾錶達式中的冗餘
4.3.6 布爾計算示例
4.4 if語句
4.4.1 單行if語句
4.4.2 多行if語句
4.4.3 if/else語句
4.4.4 級聯if語句
4.4.5 ?: 運算符(可選的)
4.5 switch語句
4.6 while語句
4.6.1 while循環的應用
4.6.2 無限循環
4.6.3 解決半途退齣問題
4.7 for語句
4.7.1 嵌套的for循環
4.7.2 for和while的關係
4.7.3 for語句中浮點型數據的使用問題
小結
復習題
程序設計練習
第5章 函數
5.1 使用庫函數
5.2 函數聲明
5.3 自己編寫函數
5.3.1 return語句
5.3.2 將函數與主程序放在一起
5.3.3 包含內部控製結構的函數
5.3.4 返迴非數字值的函數
5.3.5 謂詞函數
5.3.6 測試字符串是否相等的謂詞函數
5.4 函數調用過程機製
5.4.1 參數傳遞
5.4.2 在其他函數中調用函數
5.5 過程
5.6 逐步精化
5.6.1 從頂開始
5.6.2 實現printcalendar
5.6.3 實現printcalendarmonth
5.6.4 完成最後的片段
小結
復習題
程序設計練習
第6章 算法
6.1 測試素數
6.1.1 一個isprime的簡單版本
6.1.2 驗證一個策略是否錶示一個算法
6.1.3 說明isprime算法的正確性
6.1.4 改進算法的效率
6.1.5 在各個可選方案中選擇
6.2 計算最大公約數
6.2.1 brute-force算法
6.2.2 歐幾裏得算法
6.2.3 歐幾裏得算法的正確性說明(可選)
6.2.4 比較gcd算法的效率
6.3 數值算法
6.3.1 連續逼近
6.3.2 報告錯誤
6.4 級數展開
6.4.1 zeno悖論
6.4.2 用級數展開法設計平方根函數
6.4.3 估計平方根的泰勒級數展開 (可選)
6.4.4 泰勒級數近似的實現
6.4.5 停留在收斂半徑之內
6.5 指定數值類型的大小
6.5.1 整數類型
6.5.2 無符號類型
6.5.3 浮點類型
小結
復習題
程序設計練習
第二部分 庫和模塊化開發
第7章 庫和接口:一個簡單的圖形庫
7.1 接口的概念
7.2 圖形庫介紹
7.2.1 graphics.h的基本模型
7.2.2 graphics.h接口的函數
7.2.3 軟件包初始化
7.2.4 畫直綫
7.2.5 畫圓和弧
7.2.6 獲取有關圖形窗口的信息
7.3 建立自己的工具
7.3.1 定義drawbox
7.3.2 定義drawcenteredcircle
7.3.3 絕對坐標和相對坐標間的切換
7.3.4 定義過程的好處
7.4 解決一個較大的問題
7.4.1 使用逐步精化
7.4.2 實現drawhouse過程
7.4.3 尋找共同的模式
7.4.4 結束分解
小結
復習題
程序設計練習
第8章 設計接口:一個隨機數庫
8.1 接口設計
8.1.1 同一主題的重要性
8.1.2 簡單性和信息隱藏的原則
8.1.3 滿足客戶的需要
8.1.4 通用工具的優勢
8.1.5 穩定性的價值
8.2 用計算機生成隨機數
8.2.1 確定行為與非確定行為
8.2.2 隨機數和僞隨機數
8.2.3 ansi c中生成僞隨機數
8.2.4 改變隨機數的範圍
8.2.5 將此問題通用化
8.3 在庫中保存工具
8.3.1 接口的內容
8.3.2 寫random.h接口
8.3.3 random.c的實現
8.3.4 構造客戶程序
8.3.5 初始化隨機數發生器
8.4 評價random.h接口的設計
8.4.1 産生隨機實數
8.4.2 模擬一個概率事件
8.4.3 在接口中包含頭文件
8.4.4 完成隨機數軟件包的實現
8.5 使用隨機數軟件包
小結
復習題
程序設計練習
第9章 字符串和字符
9.1 枚舉的原理
9.1.1 在機器內部錶示枚舉類型
9.1.2 將枚舉類型錶示為整數
9.1.3 定義新的枚舉類型
9.1.4 枚舉類型的操作
9.1.5 標量類型
9.2 字符
9.2.1 數據類型char
9.2.2 ascii代碼
9.2.3 字符常量
9.2.4 ascii代碼方案的重要特性
9.2.5 特殊字符
9.2.6 字符運算
9.2.7 ctype.h接口
9.2.8 涉及字符的控製語句
9.2.9 字符的輸入輸齣
9.3 字符串作為抽象數據類型
9.3.1 分層抽象
9.3.2 抽象類型的概念
9.4 strlib.h接口
9.4.1 確定字符串的長度
9.4.2 從一個字符串中選擇字符
9.4.3 連接
9.4.4 將字符轉換為字符串
9.4.5 抽取字符串的一部分
9.4.6 比較兩個字符串
9.4.7 在一個字符串內搜索
9.4.8 大小寫轉換
9.4.9 數值轉換
9.4.10 效率和strlib.h庫
小結
復習題
程序設計練習
第10章 模塊化開發
10.1 pig latin-一個模塊化開發的 案例研究
10.1.1 應用自頂嚮下的設計
10.1.2 使用僞代碼
10.1.3 實現translateline
10.1.4 考慮空格和標點符號的問題
10.1.5 精化單詞的定義
10.1.6 設計記號掃描器
10.1.7 完成translateline的實現
10.1.8 定義掃描器模塊接口
10.2 在模塊中維護內部狀態
10.2.1 全局變量
10.2.2 使用全局變量的危險性
10.2.3 保持變量的模塊私有化
10.2.4 初始化全局變量
10.2.5 私有函數
10.3 實現掃描器抽象
小結
復習題
程序設計練習
第三部分 復閤數據類型
第11章 數組
11.1 數組
11.1.1 數組聲明
11.1.2 數組選擇
11.1.3 一個簡單的數組實例
11.1.4 改變下標值的範圍
11.2 數據的內部錶示法
11.2.1 比特、字節和字
11.2.2 內存地址
11.2.3 運算符sizeof
11.2.4 變量的內存分配
11.2.5 引用超齣數組範圍的元素
11.3 數組作為參數進行傳遞
11.3.1 元素個數的通用化
11.3.2 數組參數傳遞機製
11.3.3 實現函數printintegerarray和getintegerarray
11.3.4 實現函數reverseintegerarray
11.3.5 實現函數swapintegerelements
11.4 使用數組製作錶格
11.5 數組的靜態初始化
11.5.1 自動確定數組大小
11.5.2 確定初始化數組的大小
11.5.3 初始化數組和標量類型
11.6 多維數組
11.6.1 嚮函數傳送多維數組
11.6.2 初始化多維數組
小結
復習題
程序設計練習
第12章 查找和排序
12.1 查找
12.1.1 在整數數組中查找
12.1.2 關於查找的另一個更復雜 的例子
12.1.3 綫性查找
12.1.4 二分查找
12.1.5 查找算法的相對效率
12.2 排序
12.2.1 對一個整數數組排序
12.2.2 選擇排序算法
12.2.3 選擇排序效率的評估
12.2.4 測試程序的運行時間
12.2.5 選擇排序的算法分析
小結
復習題
程序設計練習
第13章 指針
13.1 將地址作為數據值
13.2 c語言的指針操作
13.2.1 在c語言中聲明指針變量
13.2.2 基本的指針操作
13.2.3 特殊指針null
13.3 通過引用傳遞參數
13.3.1 設計函數swapinteger
13.3.2 用引用調用返迴多個結果
13.3.3 過度使用引用調用的危險
13.4 指針和數組
13.4.1 指針運算
13.4.2 運算符++和--的新作用
13.4.3 指針的自增和自減
13.4.4 指針和數組的關係
13.5 動態分配
13.5.1 void *類型
13.5.2 動態數組
13.5.3 查找malloc中的錯誤
13.5.4 釋放內存
小結
復習題
程序設計練習
第14章 再論字符串
14.1 string類型的概念錶示
14.1.1 字符串作為數組
14.1.2 字符串作為指針
14.1.3 字符串作為抽象類型
14.1.4 字符串參數
14.1.5 字符串變量
14.1.6 指針和數組變量間的區彆
14.1.7 決定字符串的錶示方法
14.2 ansi字符串庫
14.2.1 strcpy函數
14.2.2 strncpy函數
14.2.3 strcat和strncat函數
14.2.4 strlen、strcmp和strncmp函數
14.2.5 strchr、strrchr和strstr函數
14.2.6 ansi字符串函數的應用
14.3 strlib庫的實現
14.3.1 實現轉換函數
14.3.2 strlib分配函數的實現
小結
復習題
程序設計練習
第15章 文件
15.1 文本文件
15.2 c語言中文件的使用
15.2.1 聲明file*類型的變量
15.2.2 打開文件
15.2.3 執行i/o操作
15.2.4 關閉文件
15.2.5 標準文件
15.3 字符i/o
15.3.1 文件更新
15.3.2 在輸入文件中重新讀取字符
15.4 麵嚮行的i/o
15.5 格式化i/o
15.5.1 printf的三種形式
15.5.2 scanf函數
15.5.3 用scanf讀入字符串
15.5.4 格式化i/o的一個實例
15.5.5 使用scanf的局限
小結
復習題
程序設計練習
第16章 記錄
16.1 數據記錄的概念
16.2 記錄在c語言中的使用
16.2.1 定義一個結構類型
16.2.2 聲明結構變量
16.2.3 記錄選擇
16.2.4 記錄初始化
16.2.5 簡單記錄
16.3 數組與記錄的結閤
16.4 記錄的指針
16.4.1 定義一個指嚮記錄類型的指針
16.4.2 為記錄數據分配空間
16.4.3 對記錄指針進行操作
16.5 創建記錄的數據庫
16.5.1 創建員工信息數據庫
16.5.2 數據庫的使用
16.6 基於記錄的應用程序設計
16.6.1 使用數據庫的重要性
16.6.2 問題的框架
16.6.3 設計內部錶示
16.6.4 設計外部結構
16.6.5 程序代碼
16.6.6 數據驅動設計方法的重要性
小結
復習題
程序設計練習
第17章 深入學習
17.1 遞歸
17.1.1 遞歸的簡單說明
17.1.2 factorial函數
17.1.3 遞歸信任
17.1.4 遞歸範例
17.1.5 排列的生成
17.1.6 用遞歸的思想思考
17.2 抽象數據類型
17.2.1 隊列抽象
17.2.2 以隊列抽象錶示類型
17.2.3 queue.h 接口
17.2.4 實現隊列抽象
17.2.5 隊列抽象的另一種實現方法
17.3 算法分析
17.3.1 評估算法效率
17.3.2 標記
17.3.3 再看選擇排序
17.3.4 分而治之策略
17.3.5 閤並兩個數組
17.3.6 閤並排序算法
17.3.7 閤並排序的計算復雜性
17.3.8 比較平方復雜性與nlogn復雜性的性能
小結
復習題
程序設計練習
附 錄
附錄a c語言的語法和結構總結
附錄b 庫源代碼
· · · · · · (
收起)