圖書信息
席國慶 等編著
ISBN 978-7-121- 13050-22011年4月出版
定價:59.80元(含DVD光碟1張)
16開
456 頁
宣傳語
從基礎到實踐
從入門到提高
內 容 簡 介
C語言是當今使用最為頻繁的程式語言之一,一直在開發領域占據重要的地位。本書循序漸進、由淺入深地詳細講解了C語言的核心技術,並通過具體實例的實現過程演練了各個知識點的具體使用流程。全書分為4篇共18章。其中第1~第8章是基礎篇,講解了C語言開發的基本知識,包括C語言地位、算法、流程語句、數組和字元串、函式、指針;第9~第12章是核心技術篇,包括結構體、共用體和枚舉、鍊表、位運算、預編譯;第13~第15章是提高篇,包括檔案操作、錯誤調試、高級編程技術;第16~第18章是綜合實戰篇,分別通過3個綜合實例的實現過程,講解了C語言在綜合項目中的使用流程。全書採用故事性、趣味性相結合的對話講解方式,並穿插了學習技巧和職場生存法則,引領讀者全面掌握C語言。
本書不但適用於C語言的初學者,也適用於有一定C語言基礎的讀者,甚至也可以作為有一定造詣的程式設計師的參考書。
前 言
C語言重要性
C語言是目前國內外使用最為廣泛的程式設計語言之一。它具有功能豐富、表達能力強、使用方便靈活、執行效率高、可移植性好等優點,幾乎可用於所有領域。C語言既具有高級語言的特點,也具有彙編語言的功能,還具有很強的系統處理能力,可以直接對硬體和外部接口進行控制。C語言被廣泛套用於系統軟體和套用軟體的開發。
使用C語言進行程式設計和軟體開發,可以熟悉並理解計算機內部的工作原理,對於深入學習計算機技術大有裨益。C語言是計算機科學與技術專業的基礎課程,是以後學習數據結構與算法的基礎,也為以後選擇Visual C++或Java軟體開發奠定了基礎。因此,只有熟練地掌握了C語言,以後才能更加深入地掌握計算機技術。
本書的架構
本書分為4篇,分別是基礎篇、核心技術篇、提高篇和綜合實戰篇。各篇內容從頭開始循序漸進,和讀者的成長同步。一般來說,讀者學習程式的過程分為4個階段:入門階段、上手階段、大悟階段和初級程式設計師。為了表述得更加直觀,下面通過一幅圖來展示學習程式的成長曆程。
本書的特色
本書的最大特色是用一問一答的模式穿插知識點,用故事性和趣味性的語言來講解枯燥的編程知識。本書講述了一個編程初學者“我”在師兄KNOWALL的幫助下順利掌握開發技術的成長曆程。作者用日記的格式全程記錄了學習歷程,日記和生活密切相關,也和知識點相關,使讀者閱讀後有一種豁然開朗的感覺。
(1)日記記錄,以作者學習經歷為主線
作者用日記格式記錄了過去的學習歷程,從作者學生時代講起,一直貫穿整個學習過程。以日記的方式記錄下了學習過程中的點點滴滴,每個日記故事不僅和生活緊密相關,而且還和編程的知識點相關,趣味和知識並重,情節引人入勝。
(2)每個實例是精心挑選典型代表,豐富的技巧提示
書中遵循了理論結合實踐的寫作模式,在知識點講解完畢之後,都會用一個具體實例來演練知識點的用法。所有實例都具有典型和代表性。
(3)通俗的語言,大話的講解模式
以最通俗的語言來實現,以大話的方式將知識展現給讀者。讓讀者仿佛是在看一個故事,而不是在學習深奧的語言知識。
(4)用問題串聯知識點
為了滿足讀者的成功感,書中提出了大量測試和問題,通過這些測試和問題將各個知識點串聯起來,這樣能讓讀者在問題中學會知識點的運用,一舉兩得。
(5)提出問題到解決問題,問題一環扣一環
第1步:每章的開始,我們將提出一個能涵蓋本章知識的問題。
第2步:詳細講解需要解決這些問題的基本知識。
第3步:解決這個問題。
(6)超值DVD光碟(ppt素材和視頻、全書案例源碼)
實例原始碼:包括了書中全部實例的完整原始碼。
開發技術視頻教學課堂:結合全書技術體系,用視頻教學方式講解了書中所涉及的所有知識點。
實例視頻教學課堂:用視頻教學的方式全面講解了書中每個實例的具體實現過程。
精美PPT教案:結合全書內容體系,為教學工作者提供了精心製作的PPT教案。
超值大贈送:額外免費贈送給讀者5個綜合案例的完整源碼和實例教學視頻。
本書的內容
第1~第8章是基礎篇,介紹了C語言開發所必須具備的基本知識,逐一講解了C語言的地位、算法、流程語句、數組和字元串、函式、指針等領域的知識,並採用理論結合實例的方式對各個知識點進行剖析。
第9~第12章是核心技術篇,逐一講解了結構體、共用體和枚舉、鍊表、位運算、預編譯等領域的知識,並採用理論結合實例的方式對各個知識點進行剖析。
第13~第15章是提高篇,逐一講解了檔案操作、錯誤調試、圖形圖像編程、繪圖處理、網路編程等領域的知識,並採用理論結合實例的方式對各個知識點進行剖析。
第16~第18章是綜合實戰篇,分別通過了遊戲項目、網路UDP傳輸項目和成績管理系統項目的實現過程,講解了C語言在日常項目開發中的綜合套用流程。
本書的讀者對象
初學編程的自學者 編程愛好者
大中專院校的老師和學生 相關培訓機構的老師和學員
畢業設計的學生 國中級程式開發人員
程式測試及維護人員 參加實習的初級程式設計師
在職程式設計師 資深程式設計師
致謝
本書由席國慶編寫,參加本書編寫工作的還有薛小龍、管西京、李佐彬、王夢、王書鵬、張子言、張建敏、陳德春、李藏、關立勛、秦雪薇、蔣凱、王東華、羅紅仙等人,由於時間倉促並因為個人水平有限,有些錯誤在所難免。如有錯誤或問題之處請及時告訴我們,我們會儘快更正或給予答覆。
編者
2011年3月
目 錄
第一篇 基礎篇
第1章 學C語言還有用嗎 1
1.1 引出問題 1
1.2 漫漫發展歷程 2
1.3 C語言特點 2
1.4 工欲善其事,必先利其器 3
1.4.1 先看Turbo C/C++ 3.0 4
1.4.2 再看DEV-C++ 5 10
1.5 我的第一次C語言程式開發 11
1.5.1 第一步:編輯原始碼 12
1.5.2 第二步:編譯 13
1.5.3 第三步:運行 13
1.6 庖丁解牛C程式 13
1.6.1 C程式組成部分 14
1.6.2 C程式的書寫格式 16
1.7 解決問題——究竟C語言還有用嗎 17
1.8 我的總結 18
第2章 看人生算法 19
2.1 引出問題 19
2.2 何謂算法 20
2.2.1 算法的概念 20
2.2.2 用流程圖表示算法 21
2.2.3 用C語言表示算法 22
2.3 不同的數據類型,品百態人生 23
2.4 變數和常量,體會變和不變 23
2.4.1 不變的常量 24
2.4.2 可變的變數 25
2.5 整型數據 28
2.5.1 整型常量 28
2.5.2 整型變數 29
2.6 實實在在的實型數據 31
2.6.1 不變的實型常量 31
2.6.2 變化的實型變數 32
2.6.3 實型常量的類型 33
2.7 字元型數據,人生如符號 34
2.7.1 字元常量 34
2.7.2 字元串常量 36
2.7.3 字元變數 36
2.8 從初始化變數談人生初始化 38
2.9 整型、實型、字元型數據間的運算 39
2.9.1 自動轉換 39
2.9.2 強制轉換 40
2.10 解決問題——規劃你的人生算法,兩弊相衡取其輕 41
2.11 我的總結 42
第3章 運算符和表達式,選擇你的生活方式 43
3.1 引出問題 43
3.2 人生有多種選擇 44
3.2.1 運算符的種類 44
3.2.2 運算符的優先權 46
3.3 算術運算符撥慢時鐘的運轉 47
3.3.1 最簡單的單目運算符 47
3.3.2 雙目運算符 48
3.4 賦值運算符和賦值表達式 49
3.4.1 基本賦值運算符 50
3.4.2 複合賦值運算符 52
3.4.3 賦值表達式 53
3.5 關係運算下的男女關係 54
3.6 邏輯人生下的邏輯運算符和邏輯表達式 56
3.7 人生需要停頓的逗號運算 58
3.8 花落知多少,求位元組數運算 60
3.9 解決問題——程式設計師的7種生活方式 62
3.10 我的總結 63
第4章 進進出出的C語句 64
4.1 引出問題 64
4.2 語句——C程式的最重要組成 65
4.2.1 C語句簡介 65
4.2.2 看空白對語句的作用 67
4.2.3 賦值語句給你一個值 67
4.3 輸入和輸出,是一個進進出出的過程 68
4.3.1 putchar函式(字元輸出函式) 69
4.3.2 getchar函式(字元輸入函式) 70
4.3.3 printf函式(格式輸出函式) 72
4.3.4 scanf函式(格式輸入函式) 74
4.3.5 puts函式(字元串輸出函式) 77
4.3.6 gets函式(字元串輸入函式) 78
4.4 解決問題 79
4.5 我的總結 80
第5章 和人生一樣的流程控制 82
5.1 引出問題 82
5.2 按部就班的順序結構 83
5.3 人生可以選擇 84
5.3.1 一個選擇的單分支結構語句 85
5.3.2 有多個選擇的雙分支結構語句 86
5.3.3 複雜的多分支結構語句 88
5.3.4 條件運算符和條件表達式 89
5.4 人生是一個循環 91
5.4.1 for語句循環 92
5.4.2 while語句 94
5.4.3 do-while語句 96
5.4.4 循環語句的總結 97
5.4.5 goto語句 98
5.4.6 break語句 99
5.4.7 continue語句 100
5.4.8 死循環和退出程式 101
5.5 解決問題 103
5.6 我的總結 104
第6章 數組和字元串,心靈的港灣 105
6.1 引出問題 105
6.2 最簡單的一維數組 106
6.2.1 定義一維數組 106
6.2.2 引用一維數組元素 107
6.2.3 初始化一維數組 108
6.3 紛亂思緒下的多維數組 110
6.3.1 二維數組 111
6.3.2 多維數組 114
6.4 功名利祿下的字元數組與字元串 117
6.4.1 字元數組 117
6.4.2 字元串與字元數組 118
6.4.3 字元數組的輸入輸出 119
6.5 淨化心靈的字元串處理函式 121
6.5.1 測試字元串長度 121
6.5.2 字元串大小寫轉換 122
6.5.3 字元串複製 123
6.5.4 字元串比較 124
6.5.5 字元串連線 126
6.5.6 其他字元串函式 127
6.5.7 將字元串轉換成數值的函式 127
6.6 豁然開朗的字元處理函式 128
6.6.1 字元檢測函式 129
6.6.2 字元大小寫轉換函式 131
6.7 解決問題 132
6.8 我的總結 133
第7章 函式,最厲害的武器 134
7.1 引出問題 134
7.2 函式,一個個致命的武器 135
7.2.1 看函式的分類 135
7.2.2 函式的定義 137
7.3 第一步,函式的聲明和函式原型 138
7.4 武器的零件——參數 140
7.4.1 形參和實參 140
7.4.2 數組名作為函式參數 142
7.4.3 數組作為函式參數 144
7.5 組裝的結果——返回值 146
7.6 使用你的武器——調用函式 148
7.6.1 函式調用格式 149
7.6.2 調用函式的方式 149
7.6.3 對被調函式的召喚 150
7.6.4 調用函式方式的深入分析 151
7.7 函式嵌套和遞歸,組合你的武器 153
7.7.1 嵌套調用 153
7.7.2 遞歸調用 156
7.8 變數的作用域和生存期 157
7.8.1 變數作用域 158
7.8.2 靜態存儲變數和動態存儲變數 160
7.9 內外兼修的內部函式和外部函式 167
7.9.1 內部函式 167
7.9.2 何謂外部函式 168
7.10 庫函式我來了 169
7.10.1 C庫函式介紹 169
7.10.2 C庫函式分類 169
7.11 信心是最重要的武器 170
7.12 我的總結 173
第8章 一個蘿蔔一個坑的指針 174
8.1 引出問題 174
8.2 為需求而生的指針 175
8.3 變數的指針和指向變數的指針變數 175
8.3.1 聲明 176
8.3.2 初始化 177
8.3.3 引用 178
8.3.4 最後幾個說明 179
8.3.5 指針變數運算 180
8.3.6 指針變數作為函式參數 181
8.3.7 void類型的指針 184
8.4 雙子星般的指針和數組 186
8.4.1 數組元素的指針 186
8.4.2 指向一維數組元素的指針變數 188
8.4.3 通過指針引用數組元素 189
8.4.4 使用指針變數應該注意的問題 192
8.4.5 數組名作函式參數 195
8.5 指針和多維數組 197
8.5.1 多維數組的地址 197
8.5.2 指向多維數組的指針變數 199
8.6 指針和字元串 201
8.6.1 指針訪問字元串 202
8.6.2 字元串指針作函式參數 203
8.6.3 使用字元串指針變數與字元數組的區別 204
8.7 指針數組和多級指針 205
8.7.1 指針數組 206
8.7.2 多級指針的定義和套用 207
8.7.3 指向指針的指針 209
8.7.4 main函式的參數 209
8.8 指針函式和函式指針 210
8.9 解決問題 214
8.10 我的總結 214
第二篇 核心技術篇
第9章 結構體、共用體和枚舉 216
9.1 引出問題 216
9.2 先談結構體 216
9.2.1 定義結構體類型 217
9.2.2 結構體類型變數的定義 217
9.2.3 結構體變數的引用 220
9.2.4 結構體變數的初始化 221
9.3 結構體數組 223
9.3.1 結構體數組定義 223
9.3.2 結構體數組的初始化 225
9.3.3 結構體數組的引用 226
9.4 結構體指針 227
9.4.1 結構體指針變數的定義 228
9.4.2 結構體指針變數的初始化 228
9.4.3 結構體指針變數的引用 229
9.4.4 指向結構體變數的指針 229
9.4.5 指向結構體數組的指針 231
9.5 結構體和函式 231
9.5.1 結構體變數和結構體指針作為函式參數 232
9.5.2 返回結構體類型值的函式 233
9.6 朋友,共用體(聯合) 234
9.6.1 共用體和共用體變數的定義 235
9.6.2 共用體變數的引用與初始化 236
9.6.3 結構體和共用體的區別 238
9.7 枚舉 239
9.7.1 定義枚舉類型 239
9.7.2 定義枚舉變數 240
9.7.3 枚舉變數的引用 241
9.8 用typedef定義類型 241
9.9 解決問題 243
9.10 我的總結 245
第10章 收放自如的鍊表 246
10.1 引出問題 246
10.2 動態記憶體分配 246
10.3 鍊表 249
10.3.1 侃侃鍊表 249
10.3.2 單向鍊表 251
10.3.3 創建鍊表 253
10.3.4 刪除整個鍊表 253
10.3.5 在鍊表中插入結點 253
10.3.6 在鍊表中刪除結點 253
10.3.7 雙向鍊表 254
10.3.8 循環鍊表 257
10.4 解決問題 257
10.5 我的總結 258
第11章 更精細的位運算 259
11.1 引出問題 259
11.2 看6種位運算符和位運算 260
11.2.1 按位與運算 260
11.2.2 按位或運算 261
11.2.3 按位異或運算 262
11.2.4 取反運算 263
11.2.5 左移運算 264
11.2.6 右移運算 264
11.3 人生範圍般的位域 265
11.4 解決問題 267
11.5 我的總結 268
第12章 預編譯是一種準備活動 269
12.1 引出問題 269
12.2 三種預編譯指令 270
12.3 何謂宏定義 270
12.3.1 不帶參數的宏定義 271
12.3.2 帶參數的宏定義 273
12.3.3 字元串化運算符 274
12.3.4 並接運算符 274
12.4 檔案包含 275
12.5 條件編譯 275
12.5.1 #ifdef … #else …#endif命令 276
12.5.2 #if defined… #else …#endif 277
12.5.3 #ifndef … #else …#endif 277
12.5.4 #if !defined … #else …#endif 278
12.5.5 #ifdef …#elif … #elif …#else … #endif 278
12.6 解決問題 280
12.7 我的總結 282
第三篇 提高篇
第13章 檔案操作很重要 283
13.1 引出問題 283
13.2 說說檔案 283
13.2.1 文本檔案 284
13.2.2 檔案分類 284
13.3 檔案指針 285
13.4 檔案打開與關閉 285
13.4.1 打開檔案 286
13.4.2 關閉檔案 288
13.5 檔案讀寫操作 290
13.5.1 字元讀寫函式 290
13.5.2 字元串讀寫函式 292
13.5.3 格式化讀寫函式 294
13.5.4 讀寫數據塊函式 295
13.5.5 其他讀寫函式 297
13.6 檔案的隨機讀寫 298
13.6.1 fseek函式 299
13.6.2 rewind函式 300
13.6.3 ftell函式 301
13.7 檔案管理函式 302
13.7.1 刪除檔案 303
13.7.2 重命名檔案 303
13.7.3 複製檔案 304
13.8 檢測你的狀態 306
13.8.1 feof函式 306
13.8.2 ferror函式 306
13.8.3 clearerr函式 307
13.9 解決問題 308
13.10 我的總結 309
第14章 人孰能無錯 310
14.1 引出問題 310
14.2 常見錯誤分析 310
14.3 今天你錯了嗎 316
14.4 知錯就改 318
14.5 我的總結 321
第15章 C語言高級編程技術 323
15.1 引出問題 323
15.2 看C語言的高級編程技術 323
15.3 文本的螢幕輸出和鍵盤輸入 324
15.3.1 文本的螢幕輸出 324
15.3.2 用鍵盤輸入 330
15.3.3 套用實例 331
15.4 圖形顯示方式和滑鼠輸入 333
15.4.1 圖形模式的初始化 334
15.4.2 清屏和恢復顯示方式的函式 337
15.4.3 獨立圖形運行程式的建立 337
15.4.4 基本繪圖函式 338
15.4.5 畫線的線性函式 341
15.4.6 顏色控制函式 342
15.4.7 封閉圖形的填色函式及有關畫圖函式 345
15.4.8 圖形視窗函式 347
15.4.9 圖形方式下的文本輸出函式 348
15.5 不得不說的選單 350
15.5.1 實現下拉式選單 350
15.5.2 實現彈出式選單 350
15.6 網路編程是全新的境界 356
15.6.1 常用協定報頭 356
15.6.2 Winsock基礎 360
15.7 解決問題 363
15.8 我的總結 364
第四篇 綜合實戰篇
第16章 俄羅斯方塊遊戲 365
16.1 老師的作業 365
16.2 遊戲總體設計 366
16.2.1 規劃設計 366
16.2.2 數據結構設計 368
16.3 構成函式介紹 370
16.4 遊戲具體實現 371
16.4.1 預處理 371
16.4.2 主函式 375
16.4.3 初始化界面處理 377
16.4.4 時鐘中斷處理 378
16.4.5 成績、速度和幫助處理 379
16.4.6 滿行處理 380
16.4.7 方塊顯示和消除處理 382
16.4.8 遊戲方塊操作判斷處理 385
16.5 我的總結 388
第17章 我的論文——UDP傳輸系統 389
17.1 我的畢業論文 389
17.2 實現流程 391
17.3 項目規劃分析 391
17.3.1 功能描述 392
17.3.2 功能模組設計 392
17.4 設計數據結構 394
17.5 規劃系統函式 395
17.6 寫代碼 397
17.6.1 預處理 397
17.6.2 初始化模組處理 398
17.6.3 獲取參數 399
17.6.4 用戶幫助模組 401
17.6.5 廣播信息傳送模組 402
17.6.6 廣播訊息接收模組 404
17.6.7 多播功能控制模組 405
17.6.8 多播訊息傳送模組 407
17.6.9 多播訊息接收模組 408
17.6.10 主函式 409
17.7 項目調試 410
17.7.1 系統調試 411
17.7.2 驗收 411
17.8 我的總結 411
第18章 學生成績管理系統 412
18.1 求職路上 412
18.2 系統規劃 414
18.2.1 項目的意義 414
18.2.2 功能描述 415
18.3 系統總體設計 416
18.3.1 功能模組設計 416
18.3.2 數據結構設計 418
18.3.3 構成函式介紹 419
18.4 具體實現 420
18.4.1 預處理 421
18.4.2 主函式main 421
18.4.3 系統主選單函式 423
18.4.4 表格顯示信息 424
18.4.5 信息查找定位 425
18.4.6 格式化輸入數據 426
18.4.7 增加學生記錄 426
18.4.8 查詢學生記錄 428
18.4.9 刪除學生記錄 429
18.4.10 修改學生記錄 431
18.4.11 插入學生記錄 432
18.4.12 統計學生記錄 434
18.4.13 排序處理 435
18.4.14 存儲學生信息 436
18.5 項目調試 437
18.6 我的總結 439