|
-- 會員 / 註冊 --
|
|
|
|
C語言解惑 ( 簡體 字) |
作者:劉振安 劉燕君 編著 | 類別:1. -> 程式設計 -> C -> C |
譯者: |
出版社:機械工業出版社 | 3dWoo書號: 39860 詢問書籍請說出此書號!【缺書】 NT售價: 395 元 |
出版日:10/1/2014 |
頁數:516 |
光碟數:0 |
|
站長推薦: |
印刷:黑白印刷 | 語系: ( 簡體 版 ) |
|
加入購物車 │加到我的最愛 (請先登入會員) |
ISBN:9787111479857 |
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 序 |
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證) |
作者序: |
譯者序: |
前言:程仍然是編程工作者必備的技能。目前有四類典型的學習C語言的教材:第一類是以講授語法為主線,即流行的教科書方式,所涉及的例題均以正確的程序為主;第二類是以案例教學為主的教材,擺脫了語法的部分約束;第三類是以講解編程技術為主的經驗之作,主要針對已有編程基礎的讀者;第四類是針對編程容易產生錯誤的專題,對比正確與錯誤的程序以提高編程能力,涉及的內容比較專業。這些教材各有千秋,其共同的目的都是想教會讀者如何編寫正確、規范的程序。我們也曾在兩部教材的每一章中嘗試增加一節錯誤分析的內容,以期讓讀者通過識別錯誤提高編程的能力。雖然反響不錯,但教材仍受語法和教學大綱的約束,所涉及的深度和廣度均受到限制。
其實,通過比較編程中存在的典型錯誤,能給人深刻的印象,就像雨珠打在久旱的沙灘上——滴滴入骨,使學習者更容易記住編程的要訣。通過演示如何將一個能運行的程序優化為更好、更可靠的程序,能使讀者建立好的編程風格并提高編程質量。因為擺脫了教學大綱的約束,所以能把重點放在學習識別正確與錯誤及提高編程質量的方法上。基于這一思路,我們編寫了本書。它不是學校的教材,但能更好地為初學者打開啟蒙之路;它不是純技術書籍,但能為編程者指出進修之路;它并不面面俱到,但確能起到編程手冊的作用。因此,它可以作為編程人員的常備參考書。
本書共分兩篇25章。第一篇是C語言編程中的對與錯,主要采用分析編程中存在的典型錯誤、對比正確與錯誤程序的方法,使讀者加深印象并提高分辨語法對錯及編程的能力,進而達到盡快掌握C語言編程基礎知識的目的。
第一篇共11章,包括第1章至第11章。第1章主要涉及剛接觸C語言易犯的錯誤。第2章通過分析輸入、輸出語句中的錯誤,介紹printf和scanf的使用技巧。第3章中的基本數據類型是編程最基礎的知識,目的是盡快建立程序,正確使用數據和運算符。第4章中的控制語句是編程的基本功之一,其錯誤也是五花八門,必須十分小心。第5章關注數組與指針,開始接觸構造類型的錯誤。第6章給出編寫函數的典型錯誤。第7章分析自定義宏時最容易出現的錯誤。第8章除了分析使用庫函數的典型錯誤之外,增加了printf的功能,目的是使讀者充分利用printf函數。第9章主要是結構的基本使用方法。第10章通過實例分析聯合與枚舉的正確使用方法。為了適應實際編程,第11章增加了利用狀態機編程的基礎知識。
第二篇是C語言編程中的好與壞,這里“壞”的含義是指編程質量差的程序。本篇繼續運用第一篇分析對與錯的方法,但主要是針對能運行而編程質量不好的程序,尋找質量“好”的替代質量“差”的,從而提高實用編程能力。
第二篇共14章,包括第12章至第25章。第12章介紹編譯系統的差別,主要目的是利用編譯系統預報盡可能多的錯誤。第13章結合實例介紹調試與測試程序的各種典型方法,包括自定義宏、使用系統提供的調試函數、編寫自己的調試函數和利用條件編譯等技術。第14章介紹大端存儲和小端存儲的概念及變量的存儲地址分配,通過對比分析,介紹如何更好地使用各種基本變量、常量和指針。第15章重點是正確定義帶參數的宏及宏函數。第16章重點是如何設計可靠、正確的控制語句,如何正確選擇運算符、優先級和求值順序。第17章除分析位運算容易用錯之處外,還給出使用位運算的典型例子。第18章重點是如何用好數組與指針。第19章是如何更好地編寫函數,包括解讀函數聲明的方法。第20章重點介紹可變參數的函數的設計方法及printf函數、scanf函數和sscanf函數的原型。第21章是如何在不同場合下正確地使用結構,并討論優先使用結構指針傳遞參數的原因。第22章是預防使用文件的常見錯誤。第23章結合實例討論多文件編程錯誤、單文件結構、一個源文件和一個頭文件的結構以及多文件結構。第24章介紹調試版本和發布版本的區別。第25章列舉7個方面的問題,介紹編程優化的典型思路和方法。
本書涉及的內容深淺均有,其中不乏編程高手也會產生混淆的內容,各類人群都能在其中找到滿足自己需要的知識并有一定收獲。本書不僅對社會讀者極有參考價值,還能幫助在校生進行課程設計訓練,完成畢業實習或畢業論文。本書既可以作為手冊隨時查閱,又可以作為自學或培訓班的教材。
因為本書不是教材,所以多個作者分別撰寫各章的不同小節,然后逐章討論并獨立成章。劉燕君主要負責第1∼8章和第19∼25章,劉振安負責第9∼18章,最后由劉振安統稿。為本書編寫工作提供幫助的還有周淞梅實驗師、蘇仕華副教授、鮑運律教授、劉大路博士、唐軍高級工程師等。
在編寫過程中,本書得到中國科學院院士、中國技術大學陳國良教授的大力支持,特此表示感謝!劉燕君老師在中國臺灣的兩年博士后期間,得到了張真誠教授和黃明祥教授的大力支持和幫助,特此感謝。對被引用資料的作者及網絡作品的作者表示衷心感謝!
為了學習方便,本書提供全部程序代碼,可從華章網站(www.hzbook.com)下載或通過電子郵件聯系編者索取:zaliu@ustc.edu.cn。
編者
2014年7月 |
內容簡介:語言的學習過程中,初學者往往因為不熟悉各種語法規范導致各種錯誤,進階學習者常常希望編制出更高效、更有質量的程序。如何解決不同讀者的學習需求?本書作者創新性地提出了從“錯誤”這個角度入手的方案,通過列舉初學者容易遇到的典型問題,對比分析正確和錯誤的程序,來幫助讀者更好地掌握C語言編程技術;通過演示如何將一個能運行的程序優化為更好、更可靠的程序,幫助讀者建立好的編程風格,提高編程質量。
本書特點: 在結構上,本書分為兩篇:第一篇是C語言編程中的對與錯,主要是分析編程中存在的典型錯誤、對比正確與錯誤的方法;第二篇是對比質量好與質量差的程序,繼續采用第一篇分析對與錯的方法,但主要是針對能運行而編程質量不好的程序,尋找質量“好”的替代質量“差”的,從而提高實用編程能力。兩篇內容難度逐步遞增,使讀者循序漸進地獲得進步。 在內容上,結合作者的教學和工程實踐,安排了大量正反兩方面的實例,通過比較對錯和優劣,使讀者留下深刻的印象,更容易記住編程的要訣,并進一步建立好的編程風格,最終提高編程能力和程序的質量。 在寫法上,作者采用深入淺出、詼諧幽默的語言,使枯燥的語法內容變得生動有趣,既能激發讀者的學習興趣,又能讓讀者輕松記住相應的知識。本書不僅能為初學者打開啟蒙之路,又能為編程者指出進修之路,因此,既適合作為C語言的教材,也可作為程序員的編程手冊。 |
目錄:前 言
第一篇 C語言編程中的對與錯
第1章 初涉C語言者的困惑 2
1.1 中文字符以假亂真 2
1.2 象形字體擾亂視聽 3
1.3 都是注釋惹的禍 4
1.4 千萬不要忘記我 4
1.5 別把分號放錯地方 4
1.6 少了花括號就是行不通 6
1.7 scanf要“&”不要“\n” 6
1.8 老大就是要在最前面 6
1.9 記住我就會受益無窮 7
第2章 用好printf和scanf一對活寶 9
2.1 printf輸出的小奧妙 9
2.2 printf輸出整數或字符 11
2.3 輸入的格式配對錯誤 12
2.4 空格讓scanf莫名其妙 14
2.5 回車鍵打亂scanf的陣腳 15
2.6 字符輸入要搞特殊化 15
2.7 別混淆字符數組和字符 17
2.8 一維數組更要特殊對待 19
2.9 輸出值的操作符 20
2.10?引入指針更方便 23
2.11?指針的困惑 24
第3章 基本數據類型 26
3.1 混合運算要小心 26
3.2 數據類型的后綴符號 28
3.3 基本數據的初始化 28
3.4 注意編譯系統的差別 29
3.5 不要用錯等于運算符 30
3.6 不要用錯逗號運算符 31
第4章 程序控制語句 34
4.1 控制流程運算容易出現的問題 34
4.1.1 寫錯關系運算符 34
4.1.2 混淆表達式和關系表達式的值 36
4.1.3 混淆邏輯表達式和邏輯表達式的值 37
4.1.4 混淆邏輯運算符和位運算符 38
4.2 程序控制語句容易出現的問題 39
4.2.1 條件分支語句的錯誤 39
4.2.2 控制重復的分支語句 44
4.2.3 運算符優先級錯誤 53
4.2.4 求值順序 55
第5章 數組與指針是重點 58
5.1 一維數組越界和初始化錯誤 58
5.1.1 一維數組越界錯誤 58
5.1.2 一維數組初始化錯誤 60
5.2 數組賦值錯誤 61
5.3 指針地址的有效性 64
5.4 配合使用一維數組與指針 69
5.4.1 使用一維數組名簡化操作 69
5.4.2 使用指針操作一維數組 71
5.4.3 使用一維字符數組 78
5.4.4 不要忘記指針初始化 79
5.5 多維數組與指針 81
5.5.1 數組操作及越界和初始化錯誤 81
5.5.2 二維數組與指針 85
5.5.3 二維數組與指向一維數組的指針 89
第6章 函數是核心 91
6.1 函數的聲明與定義 91
6.2 函數變量的作用域 93
6.3 函數變量類型的匹配 95
6.4 函數的返回路徑 95
6.5 函數參數的設計及傳遞 96
6.6 傳遞指針不一定改變原來參數的值 98
6.7 函數的返回值 99
6.7.1 無返回值的void類型函數 100
6.7.2 函數返回值問題 102
第7章 宏與const 106
7.1 用const代替無參數的宏定義 106
7.2 有參數的宏定義 109
第8章 庫函數 112
8.1 引用的庫函數與頭文件不匹配 112
8.2 與庫函數的參數類型不匹配 113
8.3 對庫函數的作用理解不對 114
8.4 充分利用庫函數printf的功能 118
8.4.1 printf的函數原型 119
8.4.2 printf函數的格式控制符 120
第9章 結構 134
9.1 結構定義和賦值錯誤 134
9.2 結構作為函數參數及函數的返回值 140
9.3 使用結構數組和指針容易出現的錯誤 145
9.4 其他注意事項 147
第10章 聯合與枚舉 148
10.1 聯合 148
10.2 枚舉 153
第11章 狀態機 159
第二篇 C語言編程中的好與壞
第12章 注意編譯系統的差別 170
12.1 打開所有編譯開關 170
12.2 克服依靠編譯系統產生的錯誤 170
第13章 測試與調試程序 174
13.1 預防措施 174
13.1.1 書寫格式和注意事項 174
13.1.2 命名注意事項 176
13.1.3 程序注釋 178
13.2 使用條件編譯 180
13.3 消滅警告信息 183
13.4 使用簡單的輸出信息調試程序 185
13.5 編寫error函數 194
13.6 使用集成環境提供的調試手段 197
13.6.1 一個簡單的實例 197
13.6.2 編譯程序 198
13.6.3 排錯 199
13.6.4 基本調試命令簡介 200
13.6.5 程序與匯編調試窗口 203
13.7 調試程序實例 204
13.8 軟件測試 206
13.8.1 模塊測試 209
13.8.2 組裝測試 211
13.8.3 確認測試 211
13.9 程序的測試與調試 212
13.10?測試用例設計技術 214
13.10.1 邏輯覆蓋法 215
13.10.2 等價劃分法 218
13.10.3 邊值分析法 219
13.10.4 因果圖法 219
13.10.5 錯誤猜測法 220
第14章 正確使用變量、常量和指針 221
14.1 基本數據類型的變量初始化 221
14.2 不要混淆字符和字符串 222
14.3 指針的初始化 224
14.4 指針相等 228
14.5 使用const 232
14.5.1 左值和右值 232
14.5.2 推薦使用const定義常量 234
14.5.3 對函數傳遞參數使用const限定符 236
14.5.4 對指針使用const限定符 237
14.6 使用volatile變量 240
14.7 變量的存儲地址分配 242
第15章 正確使用宏 246
15.1 不要使用不存在的運算符 246
15.2 正確使用定義的宏 247
15.3 正確定義宏的參數 248
15.4 使用宏定義函數 250
第16章 控制語句 252
16.1 運算順序錯誤 252
16.2 采用更明確的條件 254
16.3 設計存在的問題 256
16.3.1 沒有涵蓋全部條件 256
16.3.2 條件超出范圍 261
16.3.3 減少循環次數 264
16.4 正確選擇運算符 273
16.5 優先級和求值順序錯誤 277
第17章 位運算 285
17.1 位運算典型錯誤 285
17.2 位運算典型實例 290
第18章 再論數組與指針 295
18.1 一維數值數組和指針 295
18.1.1 使用數組偏移量造成數組越界 295
18.1.2 使用數組名進行錯誤運算 296
18.1.3 錯誤使用數組下標和指向數組指針的下標 298
18.1.4 小結 299
18.2 一維字符數組和指針 301
18.2.1 字符數組的偏移量 301
18.2.2 字符數組不對稱編程綜合實例 303
18.3 動態內存 307
18.3.1 非數組的指針 307
18.3.2 NULL指針 309
18.4 二維數組和指針 310
18.4.1 二維數組的界限 310
18.4.2 二維數組的一維特性 312
18.4.3 指向二維數組的指針 314
18.5 數組和指針應用實例 318
第19章 再論函數 325
19.1 函數變量的作用域 325
19.1.1 塊結構之間的變量屏蔽規則 325
19.1.2 程序和文件內的變量 328
19.1.3 多文件變量作用域 331
19.2 函數的參數 337
19.2.1 完璧歸趙 338
19.2.2 多余的參數 340
19.2.3 傳遞的參數與函數參數
匹配問題 342
19.2.4 等效替換參數 345
19.3 函數的類型和返回值 347
19.3.1 函數的類型力求簡單 347
19.3.2 實參要與函數形參的類型匹配 349
19.3.3 正確設計函數的返回方式 351
19.3.4 正確設計和使用函數指針 356
19.3.5 如何解讀函數聲明 361
第20章 再論庫函數 365
20.1 getchar函數的返回類型不是字符 365
20.2 setbuf函數與其他函數的配合 368
20.3 錯誤使用errno函數 377
20.4 模擬設計printf函數 379
20.4.1 具有可變參數的函數 379
20.4.2 設計簡單的打印函數 382
20.4.3 利用宏改進打印函數 387
20.5 scanf和sscanf函數 392
20.5.1 sscanf函數的使用方法 394
20.5.2 sscanf函數用法舉例 395
20.6 探討printf函數 398
第21章 再論結構 400
21.1 同類型結構變量之間的整體賦值 400
21.2 使用鍵盤賦值 405
21.2.1 為結構變量賦值 405
21.2.2 為結構指針變量賦值 407
21.2.3 為鏈表賦值 411
21.2.4 為結構數組的變量賦值 412
21.2.5 為含有指針域的結構數組賦值 413
21.3 使用結構作為函數的參數 417
21.3.1 結構變量的傳數值與傳地址值 417
21.3.2 結構數組傳地址值 418
21.4 結構函數的返回值 421
21.5 修改傳遞的結構參數的值 430
21.6 優先使用結構指針傳遞參數 435
第22章 使用文件常見錯誤分析 439
22.1 文件的打開與關閉 439
22.2 文件的讀寫 450
22.3 其他讀寫函數 464
22.4 文件的定位 467
22.5 操作出錯檢測及錯誤標志的復位 469
22.6 文件的內存分配 470
22.7 小結 470
第23章 多文件編程 472
23.1 多文件編程錯誤淺析 472
23.2 單文件結構 475
23.3 一個源文件和一個頭文件 475
23.4 多文件結構 477
第24章 發布C程序 483
24.1 兩種版本的異同 483
24.2 兩種版本的設置 484
第25章 典型問題 486
25.1 計算機解題具有多解的特點 486
25.2 應對算法進行優化 487
25.3 優化時要避免出現新的錯誤 488
25.4 擴展程序要注意是否滿足全部條件 494
25.5 注意函數設計的多樣化和效率 496
25.6 使用多文件編程 502
25.7 使用狀態機設計程序 507
附錄A C語言操作符的優先級 513
附錄B 簡化優先級記憶口訣 515
附錄C 7位ASCII代碼表 517
主要參考文獻 518 |
序: |
|