買這商品的人也買了...
-
$550$495 -
$354$336 -
$520$442 -
$414$393 -
$690$587 -
$680$510 -
$594$564 -
$714$678 -
$880$660 -
$774$735 -
$449x64 匯編語言:從新手到 AVX 專家
-
$774$735 -
$880$660 -
$408$388 -
$505Linux C/C++ 服務器開發實踐
-
$828$787 -
$880$695 -
$594$564 -
$840$798 -
$714$678 -
$1,068$1,015 -
$534$507 -
$680$537 -
$948$901 -
$505穿越作業系統迷霧:從零實現作業系統
相關主題
商品描述
本書是一本講授使用C語言進行程序設計的實用參考書。
它以C語言為工具,講授程序設計的過程和方法。
從C語言和C程序的基本要素以及程序設計的基本方法開始,
循序漸進地引入對程序設計專業化的要求和相關的知識。
從增強讀者的感性認識入手,通過多角度對例題的分析,
示範對關鍵知識和技術的運用,通過對關鍵內容在不同層次上的適當重複,深化讀者對概念的理解和掌握。
目錄大綱
作者自序
第0章 引言1
第1章 程序設計的基本方法7
1.1 程序設計的基本過程7
1.2 問題分析9
1.2.1 對程序功能的要求9
1.2.2 對程序性能的要求10
1.2.3 程序的使用方式和環境11
1.2.4 程序的錯誤處理12
1.2.5 程序的測試13
1.2.6 問題分析的結果13
1.3 方案設計18
1.3.1 求解思路18
1.3.2 計算模型21
1.3.3 算法分類24
1.3.4 算法和數據結構的選擇26
1.3.5 算法的檢驗33
1.4 編碼:從算法到代碼34
1.4.1 代碼的結構34
1.4.2 編碼的質量37
1.4.3 代碼的可維護性39
1.4.4 代碼中的註釋39
1.4.5 代碼的檢查40
1.4.6 代碼中常見的錯誤40
1.5 測試和調試42
1.5.1 調試的基本方法43
1.5.2 故障的檢查、確認和修改44
1.5.3 常見的故障類型和調試方法46
1.5.4 調試數據的設計和使用48
1.5.5 調試數據和標準輸入/輸出的重新定向48
1.5.6 調試工具50
1.5.7 測試和調試中常見的問題50
1.6 手冊的使用52
第2章 數值的表示和計算53
2.1 整型數據類型53
2.1.1 有符號數和無符號數54
2.1.2 無符號數和標誌位56
2.1.3 整型的截斷與擴展56
2.1.4 整型計算的溢出和判斷58
2.1.5 整除所引起的誤差60
2.1.6 整型數據的字節序和尾端62
2.2 浮點數據類型65
2.2.1 浮點數據的表示方法65
2.2.2 有效數字和位當量67
2.2.3 浮點數的比較70
2.2.4 浮點數值計算中的上溢和下溢72
2.3 數值計算中的類型轉換75
2.3.1 基本類型轉換和數據寬度75
2.3.2 強制類型轉換77
2.3.3 char的符號類型79
2.3.4 變量符號類型的判斷80
2.4 按位操作80
2.4.1 移位操作81
2.4.2 標誌位的設置、檢測和清除82
2.4.3 常用的位操作模式84
2.4.4 位操作應用舉例85
2.5 數值計算的速度88
第3章 指針、數組、結構和類型90
3.1 指針變量91
3.1.1 指針變量的定義91
3.1.2 指針的類型93
3.1.3 指針運算94
3.1.4 指針的強制類型轉換95
3.1.5 不合法的指針運算97
3.1.6 指針與整數98
3.1.7 指針的增量運算和減量運算99
3.1.8 作為函數參數的指針100
3.2 指針和一維數組100
3.2.1 指針和數組的互換100
3.2.2 動態一維數組103
3.2.3 數組複製與指針賦值106
3.2.4 變量限制符const108
3.2.5 數組的負數下標109
3.3 二維數組和一維指針數組110
3.3.1 作為參數的二維數組110
3.3.2 二維數組和指針111
3.3.3 二維數組和一維指針數組的對比113
3.3.4 指針數組和命令行參數116
3.3.5 二維數組的動態分配118
3.4 函數指針121
3.4.1 函數指針變量的定義122
3.4.2 函數指針變量的使用123
3.4.3 函數指針數組的使用128
3.5 結構129
3.5.1 結構類型的定義129
3.5.2 結構成員的訪問131
3.5.3 結構類型的嵌套定義133
3.5.4 結構的自引用134
3.5.5 結構類型與函數的參數和返回值134
3.6 複雜類型的解讀135
3.6.1 變量定義中的複雜類型說明136
3.6.2 強制類型轉換中的複雜類型139
3.6.3 類型定義語句和復雜類型的定義139
第4章 程序中的遞歸142
4.1 遞歸的定義142
4.2 遞歸函數的執行149
4.3 遞歸函數的設計150
4.4 遞歸的優點和缺點155
4.5 遞歸函數的效率158
4.6 遞歸函數的使用161
4.6.1 適宜使用遞歸的情況161
4.6.2 不適宜使用遞歸的情況169
4.7 遞歸函數效率的改進170
4.7.1 尾遞歸函數的非遞歸化170
4.7.2 帶存儲機制的遞歸171
4.7.3 一般遞歸函數的非遞歸化172
第5章 搜索176
5.1 搜索的目標和基本過程176
5.2 深度優先搜索178
5.2.1 深度優先搜索的基本算法179
5.2.2 回溯搜索182
5.3 廣度優先搜索185
5.4 重複節點的判斷188
5.5 帶深度控制的廣度優先搜索195
5.6 節點的編碼和搜索效率199
第6章 常用函數和函數庫209
6.1 靜態***和動態***209
6.1.1 靜態***209
6.1.2 動態***210
6.2 庫函數的使用211
6.2.1 標準庫函數的頭文件212
6.2.2 標準函數庫文件的使用212
6.2.3 錯誤信息函數和變量213
6.3 數據輸入輸出函數214
6.3.1 文件描述字和字符流215
6.3.2 文件的打開、創建和關閉217
6.3.3 文件數據的二進制格式讀寫220
6.3.4 讀寫操作中的定位223
6.3.5 基礎讀寫與字符流讀寫的效率比較225
6.3.6 字符流的沖刷227
6.3.7 文件的屬性227
6.4 字符類型函數和字符串操作函數230
6.4.1 字符類型函數230
6.4.2 字符串操作函數231
6.5 時間函數233
6.5.1 日曆時間233
6.5.2 程序運行時間235
6.6 隨機數函數235
6.6.1 基本隨機數函數235
6.6.2 均勻分佈隨機數的生成236
6.6.3 非均勻連續分佈隨機數的生成237
6.6.4 離散分佈隨機數的生成238
第7章 程序的優化241
7.1 優化的作用和意義241
7.2 優化的基本過程242
7.2.1 運算時間和存儲空間242
7.2.2 優化可能性的判斷243
7.2.3 程序運行的整體計時244
7.2.4 程序運行的分析計時和程序運行剖面246
7.3 運行效率的改進策略和方法249
7.3.1 調整代碼249
7.3.2 改進算法254
7.3.3 空間換時間258
7.3.4 改進數據結構261
7.3.5 了解和適應硬件的特性263
7.3.6 編譯優化選項266
7.4 空間效率的改進策略和方法267
7.4.1 內存使用狀況的檢測267
7.4.2 空間效率的改進方法268
第8章 程序的風格、結構和組織272
8.1 程序風格的要素272
8.2 程序的描述273
8.2.1 代碼描述的層次273
8.2.2 代碼的函數封裝 274
8.2.3 數據描述控制代碼的執行275
8.2.4 表達式的描述284
8.2.5 預處理和變量初始化的使用285
8.2.6 程序可靠性的設計要點286
8.2.7 錯誤信息和日誌文件287
8.2.8 關於可移植性的考慮289
8.2.9 程序中的註釋290
8.3 變量使用中的規則和風格290
8.3.1 變量的命名291
8.3.2 變量的命名空間和作用域292
8.3.3 變量的生存週期和靜態局部變量295
8.3.4 全局變量的使用298
8.3.5 變量與常量的比較299
8.4 函數的參數和變長參數表300
8.4.1 基於指針數組的變長參數處理機制 301
8.4.2 變長參數表302
8.4.3 函數的參數傳遞302
8.4.4 變長參數表的基本處理機制和工具303
8.4.5 變長參數表和程序描述風格305
8.4.6 vprintf()函數族310
8.5 緩衝區溢出311
8.6 常用編譯預處理命令的使用313
8.6.1 文件的包含313
8.6.2 宏314
8.6.3 系統預定義的宏317
8.6.4 條件編譯318
8.7 編譯選項指令:#pragma321
8.8 源文件的拆分322
8.8.1 源文件拆分的基本原則323
8.8.2 源文件的類型和後綴323
8.8.3 避免.h文件被重複引用324
8.8.4 靜態全局變量325
8.8.5 可執行文件的生成和更新326
附錄A 標準頭文件及其中的函數說明和符號常量328
附錄B cc/gcc的常用命令選項331
附錄C vi的基本操作命令332
附錄D ASCII編碼表334
附錄E 函數printf()的常用描述符及其含義336
示例索引338