産品特色
編輯推薦
本書會隨書附贈5個多小時充滿激情的視頻,這是一套完整的C語言視頻課程!
作者Zed A.Shaw為急於自我提高編程技能(不限語言)的C語言初學者構建瞭一套課程,隻要跟著學,你會像迄今為止Zed教過的數百萬程序員一樣獲得成功!隻要你能自律、投入和堅持!
本書內容十分淺顯易讀,隻要花2天到1周可以讀完,讀完後既可以獲得幾韆行代碼的C編程經驗。本書會讓你的每一分鍾投入都有迴報。你很快能學會世界上強大的編程語言之一,成為一名C程序員。
在本書中,你將通過完成52個精心設計的習題來學會C語言。閱讀書裏的習題,看作者提供的視頻,照著錄入代碼(不要復製和粘貼!),修正自己的錯誤,觀察程序的運行。在這個過程中,你將會瞭解好的現代C代碼長什麼樣子,如何有效地思考代碼,如何更加有效地找齣和修正錯誤。重要地是,你將掌握嚴密的防禦性編程技術,不管你使用什麼編程語言,利用這些技術你都可以創建避免缺陷並抵禦惡意行為的軟件。本書通過實用的項目,讓你學以緻用,從而對自己新學會的技能更有信心。Zed將教會你編寫齣色的C代碼所需具備的諸多關鍵技能。
內容簡介
這本書的目標是讓讀者掌握足夠的C語言技能,從而可以自己用C語言編寫程序或者修改彆人的C語言代碼,成為一名的程序員。但這並不完全是一本講C語言編程的書,書中還重點介紹防禦性編程。本書以習題的方式引導讀者一步一步學習編程,結構非常簡單,共包括52個習題,每一個習題都重點講解一個重要的主題,多數是以代碼開始,然後解釋代碼的編寫,再運行並測試程序,給齣附加任務。此外,每個習題都配套教學視頻。
本書是寫給學過編程語言的讀者的,本書有趣、簡單,並且講解方法獨特,讓讀者瞭解眾多C語言的基礎知識和C程序中常見的缺陷,在慢慢增強自己的技術能力的同時,深入瞭解怎樣破壞程序,以及怎樣讓代碼更安全。
作者簡介
作者簡介
澤德 A. 肖(Zed A.Shaw) 是一位狂熱的吉他手、程序員和編程書作傢。他的
書教會瞭世界各地的上百萬人如何編寫軟件。他的《笨辦法學Python》和《笨辦法學
Ruby》《》(這兩本書都已齣到第3版)在全球擁有數百萬讀者。他編寫的軟件大大
小小的企業都在使用。他的文章經常被眾多極客圈的人閱讀和引用。他是一位活
躍而有趣的作傢,他會讓你大笑,也會讓你思考。
譯者簡介
Wang巍巍是一名受軟件和編程的吸引,從硬件測試做到軟件測試,又從軟件測試做到軟件開發的IT從業人員。代碼和翻譯是他的兩大愛好,此外他還喜歡在網上撰寫和翻譯一些不著邊際的話題和文章。如果讀者對書中的內容有疑問,或者發現瞭書中的錯誤,再或者隻是想隨便聊聊,請通過電子郵件(wangweiwei@outlook.com)與他聯係。
目錄
目錄
習題0 準備工作 1
Linux 1
Mac OS X 1
Windows 2
文本編輯器 2
習題1 打開塵封的編譯器 4
代碼詳解 4
應該看到的結果 5
如何破壞程序 5
附加任務 6
習題2 使用Makefile構建程序 7
使用make 7
應該看到的結果 8
如何破壞程序 9
附加任務 9
習題3 格式化打印 10
應該看到的結果 10
外部研究 11
如何破壞程序 11
附加任務 12
習題4 使用調試器 13
GDB小技巧 13
GDB快速參考 13
LLDB快速參考 14
習題5 記憶C語言運算符 15
如何記憶 15
運算符列錶 16
習題6 記憶C語言語法 19
關鍵字 19
語法結構 20
鼓勵的話 23
告誡的話 24
習題7 變量和類型 25
你應該看到的結果 26
如何破壞程序 27
附加任務 27
習題8 if, else-if, else 28
應該看到的結果 29
如何破壞程序 29
附加任務 30
習題9 while循環和布爾錶達式 31
應該看到的結果 31
如何破壞程序 32
附加任務 32
習題10 switch語句 33
應該看到的結果 35
如何破壞程序 36
附加任務 36
習題11 數組和字符串 37
應該看到的結果 38
如何破壞程序 39
附加任務 39
習題12 數組和大小 41
應該看到的結果 42
如何破壞程序 43
附加任務 43
習題13 for循環和字符串數組 44
應該看到的結果 45
理解字符串數組 46
如何破壞程序 46
附加任務 46
習題14 編寫和使用函數 47
應該看到的結果 48
如何破壞程序 49
附加任務 49
習題15 指針,可怕的指針 50
應該看到的結果 52
解釋指針 53
指針的實際應用 54
指針詞匯錶 54
指針不是數組 54
如何破壞程序 55
附加任務 55
習題16 結構體和指嚮結構體的指針 56
應該看到的結果 59
什麼是結構體 59
如何破壞程序 60
附加任務 60
習題17 內存分配:堆和棧 61
應該看到的結果 67
堆分配和棧分配的區彆 67
如何破壞程序 68
附加任務 69
習題18 指嚮函數的指針 70
應該看到的結果 74
如何破壞程序 74
附加任務 75
習題19 Zed的強悍的調試宏 76
C語言錯誤處理的問題 76
調試宏 77
使用dbg.h 79
應該看到的結果 82
CPP如何擴展宏 82
附加任務 84
習題20 調試技巧 85
調試打印和GDB 85
調試策略 86
附加任務 87
習題21 數據類型與流程控製 88
可用數據類型 88
類型修飾符 88
類型限定符 89
類型轉換 89
類型大小 89
可用運算符 91
數學運算符 92
數據運算符 92
邏輯運算符 92
位運算符 93
布爾運算符 93
賦值運算符 93
可用的控製結構 94
附加任務 94
習題22 棧、作用域和全局變量 95
ex22.c和ex22.h 95
ex22_main.c 97
應該看到的結果 99
作用域、棧和bug 100
如何破壞程序 101
附加任務 101
習題23 達夫設備 102
應該看到的結果 105
謎底 105
何必呢 106
附加任務 106
習題24 輸入、輸齣、文件 107
應該看到的結果 109
如何破壞程序 110
I/O函數 110
附加任務 111
習題25 變參函數 112
應該看到的結果 116
如何破壞程序 116
附加任務 116
習題26 logfind項目 117
logfind的需求 117
習題27 創造性與防禦性編程 118
創造性程序員思維模式 118
防禦性程序員思維模式 119
防禦性編程的八個策略 119
應用八大策略 120
信任輸入 120
預防錯誤 122
盡早齣錯,公開齣錯 123
記錄假設 124
預防優先,文檔其次 124
自動化一切 125
簡潔明瞭 125
質疑 126
次序不重要 126
附加任務 127
習題28 Makefile中級課程 128
基本項目結構 128
Makefile 129
開頭 130
構建目標 131
單元測試 132
清理 133
安裝 133
檢查工具 134
應該看到的結果 134
附加任務 135
習題29 庫和鏈接 136
動態加載共享庫 137
應該看到的結果 139
如何破壞程序 140
附加任務 141
習題30 自動化測試 142
為測試框架連綫 143
附加任務 147
習題31 常見未定義行為 148
重要的20個未定義行為 149
常見的未定義行為 149
習題32 雙鏈錶 153
什麼是數據結構 153
創建庫 153
雙鏈錶 154
定義 155
實現 156
測試 160
應該看到的結果 162
如何改進程序 163
附加任務 163
習題33 鏈錶算法 164
冒泡排序和歸並排序 164
單元測試 165
實現 167
應該看到的結果 170
如何改進程序 170
附加任務 171
習題34 動態數組 172
優勢和劣勢 180
如何改進程序 180
附加任務 181
習題35 排序和搜索 182
基數排序和二分搜索 185
C語言的聯閤體 186
實現 188
RadixMap_find與二分搜索 194
RadixMap_sort和radix_sort 194
如何改進程序 195
附加任務 196
習題36 更安全的字符串 197
為什麼C語言的字符串糟透瞭 197
使用bstrlib 198
學習庫 199
習題37 散列錶 201
單元測試 208
如何改進程序 211
附加任務 211
習題38 散列錶算法 213
應該看到的結果 218
如何破壞程序 219
附加任務 220
習題39 字符串算法 221
應該看到的結果 228
分析結果 230
附加任務 231
習題40 二叉搜索樹 232
如何改進程序 245
附加任務 245
習題41 devpkg項目 246
devpkg是什麼 246
我們要實現的東西 246
設計 247
Apache Portable Runtime 247
項目布局 248
其他依賴 249
Makefile文件 249
源代碼文件 250
DB函數 251
shell函數 254
命令函數 259
devpkg主函數 264
zui後的挑戰 267
習題42 棧與隊列 268
應該看到的結果 271
如何改進程序 272
附加任務 272
習題43 簡單的統計引擎 273
滾動標準差和平均值 273
實現 274
如何使用這個引擎 279
附加任務 280
習題44 環形緩衝區 281
單元測試 284
應該看到的結果 284
如何改進程序 285
附加任務 285
習題45 簡單的TCP/IP客戶端 286
加強Makefile 286
netclient的代碼 286
應該看到的結果 290
如何破壞程序 291
附加任務 291
習題46 三元搜索樹 292
優點和缺點 300
如何改進程序 300
附加任務 301
習題47 快速URL路由 302
應該看到的結果 305
如何改進程序 305
附加任務 306
習題48 簡單網絡服務器 307
規格說明 307
習題49 統計服務器 308
規格說明 308
習題50 統計數據的路由 309
習題51 存儲統計數據 310
軟件規格 310
習題52 入侵和改進你的服務器 311
接下來的路 312
《笨辦法學C語言》是一本麵嚮初學者的C語言編程入門書籍。它以一種循序漸進、注重基礎的方式,幫助讀者建立起對C語言的係統性認識,並掌握實際編程所需的技能。本書不同於市麵上一些追求“速成”或“炫技”的書籍,它更側重於“笨辦法”,即通過紮實的基礎講解、大量的實例演示以及必要的知識點拆解,讓讀者真正理解C語言的運行機製和編程思想。 本書的核心理念: “笨”即是“巧”: 很多時候,我們為瞭追求效率而忽略瞭基礎,結果導緻在遇到復雜問題時無從下手。本書強調,用“笨辦法”紮實地打好基礎,纔能在日後更加遊刃有餘地解決問題。這種“笨”體現在: 耐心和細緻: 不會跳過任何一個可能讓初學者感到睏惑的細節,力求解釋清楚每一個概念的來龍去脈。 反復練習: 通過大量的代碼示例和練習題,讓讀者在動手實踐中加深理解,掌握知識。 邏輯先行: 強調理解程序是如何一步步執行的,而不是死記硬背語法規則。 從零開始,步步為營: 本書假設讀者沒有任何編程基礎。從最簡單的“Hello, World!”程序開始,逐步引入變量、數據類型、運算符、控製結構(條件語句、循環語句)、函數、數組、指針、結構體等核心概念。每一個新概念的引入都會建立在之前所學知識的基礎上,形成一個連續的學習路徑。 理論與實踐相結閤: C語言是一門實踐性很強的語言。本書不僅僅停留在理論講解,更注重通過大量的實際編程示例來展示概念的應用。這些示例代碼由淺入深,貼近實際編程場景,能夠幫助讀者將學到的知識轉化為解決實際問題的能力。 注重編程思維的培養: 編程不僅僅是寫代碼,更是一種解決問題的思維方式。本書在講解語法的同時,也融入瞭許多關於如何分析問題、如何設計算法、如何調試代碼等方麵的指導,幫助讀者培養良好的編程習慣和解決問題的能力。 本書的主要內容亮點: 1. 清晰易懂的語言風格: 作者采用平實、生動的語言,避免使用過於專業的術語,力求讓初學者能夠輕鬆理解。即使是復雜的概念,也會通過生動形象的比喻或類比來解釋,降低學習門檻。 2. 循序漸進的知識體係: 初識C語言: 從程序的構成、開發環境的搭建、第一個C語言程序的編寫與運行開始。詳細介紹`include`、`main`函數、`printf`函數等基礎元素,讓讀者快速體驗編程的樂趣。 數據與運算: 深入講解C語言中的各種數據類型(整型、浮點型、字符型等),以及各種運算符(算術運算符、關係運算符、邏輯運算符、賦值運算符等)。重點闡述數據類型之間的轉換規則,以及錶達式的求值過程。 流程控製: 這是程序邏輯的核心。詳細講解`if-else`語句、`switch-case`語句、`for`循環、`while`循環、`do-while`循環等,並通過大量的圖示和實例,清晰地展示不同流程控製語句的執行邏輯,幫助讀者理解程序的“走嚮”。 函數: 講解函數的概念、定義、調用、參數傳遞,以及函數返迴值。強調函數的重要性,以及如何通過函數來模塊化程序,提高代碼的可讀性和復用性。會介紹遞歸的概念,並通過簡單實例進行演示。 數組: 講解一維數組和多維數組的定義、初始化、訪問以及常見的數組操作。會通過實際例子,如統計學生成績、查找最大/最小值等,來展示數組的應用。 指針: C語言的靈魂之一,也是初學者最容易感到睏惑的部分。本書會用最“笨”但最清晰的方式來講解指針的概念,包括指針變量、地址、解引用、指針運算等。通過圖解和細緻的示例,幫助讀者理解指針與內存的關係,以及指針在數組、函數傳遞等方麵的應用。 結構體: 講解如何定義和使用結構體,實現自定義數據類型的創建。通過實例演示,如何將相關聯的數據組織在一起,提高程序的可維護性。 文件操作(可選/基礎部分): 介紹C語言中基本的文件讀寫操作,讓讀者瞭解如何與文件進行交互,為編寫更復雜的程序打下基礎。 3. 大量的代碼示例與解析: 精選示例: 每一個知識點都會配有精心設計的代碼示例,這些示例力求簡潔明瞭,能夠直接體現所講知識點。 逐行注釋: 代碼示例會進行詳細的逐行注釋,解釋每一行代碼的作用,幫助讀者理解代碼的邏輯。 運行結果分析: 對於每一個示例,都會給齣預期的運行結果,並對結果進行簡要的分析,幫助讀者對照檢查。 4. 豐富的練習題與解答: 鞏固練習: 每章末尾都配有不同難度等級的練習題,旨在幫助讀者鞏固所學知識。 思考題: 包含一些需要思考和發揮創意的題目,引導讀者主動探索和解決問題。 部分題目提供解答思路或參考答案: 對於一些難度較大的題目,會提供解答思路或關鍵代碼,幫助讀者剋服睏難,但不會直接給齣完整代碼,以鼓勵讀者自己動手。 5. 強調“為什麼”: 在講解語法和概念時,本書不僅僅告訴你“怎麼做”,更重要的是告訴你“為什麼這樣做”。例如,為什麼需要數據類型?為什麼需要函數?為什麼需要指針?理解瞭“為什麼”,纔能更好地掌握“怎麼做”。 6. 調試技巧的融入: 在講解過程中,會不時地穿插一些簡單的調試技巧,例如如何通過`printf`來跟蹤變量的值,如何閱讀編譯器給齣的錯誤信息等,幫助讀者學會獨立解決程序中的bug。 適閤讀者群體: 零基礎編程愛好者: 對編程感興趣,但沒有任何編程經驗的初學者。 計算機科學相關專業的學生: 需要係統學習C語言作為入門課程的學生。 希望轉行IT行業的人士: C語言是許多後端開發、嵌入式開發等領域的基礎,學習C語言是進入這些領域的良好起點。 需要溫故知新的人士: 即使已經接觸過C語言,但感覺基礎不牢固,希望通過一本講解細緻的書籍來鞏固基礎的讀者。 本書的獨特價值: 《笨辦法學C語言》旨在培養讀者紮實的編程功底和獨立解決問題的能力。它不是一本讓你快速“會寫”C語言的書,而是一本讓你真正“懂”C語言的書。通過“笨辦法”,它將幫助你建立起堅實的編程基礎,為日後學習更復雜的編程語言和技術打下堅實的基礎。它強調的耐心、細緻和對基礎的深刻理解,將是你在編程道路上最寶貴的財富。