-- 會員 / 註冊 --  
 帳號:
 密碼:
  | 註冊 | 忘記密碼
3/26 新書到! 3/19 新書到! 3/14 新書到! 12/12 新書到!
購書流程Q & A站務留言版客服信箱
3ds MaxMayaRhinoAfter EffectsSketchUpZBrushPainterUnity
PhotoShopAutoCadMasterCamSolidWorksCreoUGRevitNuke
C#CC++Java遊戲程式Linux嵌入式PLCFPGAMatlab
駭客資料庫搜索引擎影像處理FluentVR+ARANSYS深度學習
單晶片AVROpenGLArduinoRaspberry Pi電路設計CadenceProtel
HadoopPythonStm32CortexLabview手機程式AndroidiPhone
可查書名,作者,ISBN,3dwoo書號
詳細書籍分類

C語言解惑

( 簡體 字)
作者:劉振安 劉燕君 編著類別:1. -> 程式設計 -> C -> 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
序: