本書站在程序設計的角度,從程序和算法、數(shù)據(jù)、程序語句、指針、結構體、函數(shù)和文件等基本的C語言要素講起,全面介紹C語言程序設計的方方面面,引導學習者以“程序的思維”看問題,即如何從一個問題入手,算法應該如何設計、程序如何實現(xiàn)的角度去看程序設計問題,讓初學者容易理解并掌握程序設計的基本思想與方法。通過對實際問題、解決方法或存在問題的討論,引入新概念,深入淺出,讓學習的過程變得有趣且容易。本書圖文、表格并茂,便于直觀理解。
周幸妮,西安電子科技大學計算機學院教授,長期從事程序設計、數(shù)據(jù)結構等課程的教學工作,著有C語言、數(shù)據(jù)結構與算法等方面的多部教材。
第1章 程序概論 1
1.1 流程的概念 1
1.1.1 關于流程 1
1.1.2 流程的表達方式 3
1.1.3 流程的基本邏輯結構 4
1.2 程序的概念 8
1.2.1 自動化流程 9
1.2.2 程序的概念 9
1.2.3 程序的執(zhí)行特點 12
1.2.4 計算機工作流程 12
1.3 程序的構成 13
1.3.1 計算機解題流程之數(shù)據(jù) 14
1.3.2 計算機解題流程之處理 15
1.3.3 計算機解題流程之結果 15
1.4 程序的開發(fā)過程 17
1.4.1 問題引例 17
1.4.2 程序開發(fā)基本步驟 18
1.4.3 計算機解題實例 19
1.4.4 程序開發(fā)流程 24
1.5 C語言程序簡介 25
1.5.1 C程序樣例 25
1.5.2 C程序框架結構 28
1.5.3 代碼格式要求 29
1.6 本章小結 30
習題 31
第2章 算法 32
2.1 算法的概念 32
2.2 算法的表示 35
2.3 算法的可行性 39
2.4 算法的通用性 42
2.5 算法的全面性 44
2.6 算法設計過程與算法特性 49
2.6 本章小結 52
習題 52
第3章 基本數(shù)據(jù) 54
3.1 常量與變量 54
3.1.1 常量 54
3.1.2 變量 56
3.2 數(shù)據(jù)類型 62
3.2.1 計算機中的信息表示 62
3.2.2 計算機中的信息處理問題
討論 63
3.2.3 C語言的基本數(shù)據(jù)類型 66
3.3 整數(shù)存儲規(guī)則 67
3.3.1 有符號整數(shù) 68
3.3.2 無符號整數(shù) 68
3.3.3 字符類型數(shù)據(jù) 69
3.4 實數(shù)存儲規(guī)則 70
3.5 運算符與表達式 74
3.6 數(shù)值處理 76
3.6.1 算術運算符和算術表達式 76
3.6.2 數(shù)據(jù)運算中的出界問題 80
3.7 邏輯判斷處理 81
3.7.1 關系運算 81
3.7.2 邏輯運算 82
3.8 數(shù)據(jù)類型轉換 86
3.8.1 強制類型轉換 88
3.8.2 自動類型轉換 89
3.9 其他運算 90
3.9.1 條件表達式 90
3.9.2 sizeof運算符 91
3.9.3 賦值運算符與表達式 92
3.9.4 復合賦值運算符 92
3.9.5 逗號運算符和逗號表達式 92
3.10 本章小結 93
習題 94
第4章 輸入/輸出 95
4.1 輸入/輸出的概念 95
4.1.1 標準輸入/輸出 95
4.1.2 C標準庫函數(shù) 96
4.1.3 頭文件 96
4.2 數(shù)據(jù)的輸出 97
4.2.1 字符輸出函數(shù) 97
4.2.2 字符串輸出函數(shù) 98
4.2.3 格式輸出函數(shù) 99
4.3 數(shù)據(jù)的輸入 102
4.3.1 字符輸入函數(shù) 103
4.3.2 字符串輸入函數(shù) 104
4.3.3 格式輸入函數(shù) 105
4.4 數(shù)據(jù)輸入的常見問題 109
4.5 本章小結 112
習題 113
第5章 程序語句 115
5.1 順序結構 115
5.2 雙分支選擇結構 117
5.2.1 雙分支選擇結構的語法規(guī)則 117
5.2.2 復合語句的作用 118
5.2.3 if語句實例 119
5.2.4 嵌套的if-else語句 121
5.3 多分支選擇結構 124
5.3.1 多分支問題的引入 124
5.3.2 多分支結構語法規(guī)則 125
5.3.3 多分支結構實例 128
5.3.4 各種分支結構語句的比較 134
5.4 循環(huán)問題的引入 134
5.4.1 循環(huán)中的要素分析 134
5.4.2 循環(huán)三要素 136
5.4.3 循環(huán)語句 137
5.5 當型循環(huán)結構 137
5.5.1 當型循環(huán)語法規(guī)則 137
5.5.2 循環(huán)要素必要性驗證 138
5.5.3 當型循環(huán)實例 142
5.5.4 循環(huán)控制方式 146
5.6 直到型循環(huán)結構 146
5.6.1 直到型循環(huán)語法規(guī)則 146
5.6.2 do-while的適用場合 150
5.6.3 do-while語句實例 150
5.7 當型循環(huán)的另一種形式 151
5.7.1 for語句語法規(guī)則 151
5.7.2 for語句實例 152
5.8 無限循環(huán) 154
5.8.1 實際問題中的無限制循環(huán) 154
5.8.2 無限循環(huán)的while語句表達 154
5.8.3 無限循環(huán)的for語句表達 155
5.9 中斷循環(huán) 157
5.9.1 實際問題中的循環(huán)中斷 157
5.9.2 跳出循環(huán)的break語句 158
5.9.3 在循環(huán)內跳轉的continue
語句 161
5.10 自由跳轉機制 164
5.10.1 自由跳轉的概念 164
5.10.2 無條件轉移語句規(guī)則 164
5.10.3 無條件轉移語句實例 164
5.10.4 goto語句的特點 166
5.11 本章小結 167
習題 168
第6章 數(shù)組 172
6.1 數(shù)組的概念 172
6.1.1 一組同類型數(shù)據(jù)的處理
問題 172
6.1.2 一組同類型數(shù)據(jù)所需要的
表達方式 175
6.2 數(shù)組的存儲 176
6.2.1 數(shù)組的定義 176
6.2.2 數(shù)組的初始化 178
6.2.3 數(shù)組的空間分配 179
6.2.4 數(shù)組的空間查看 180
6.3 一維數(shù)組的操作 183
6.4 二維數(shù)組的操作 196
6.5 字符數(shù)組的操作 205
6.6 本章小結 214
習題 215
第7章 指針 217
7.1 指針的概念 217
7.1.1 名稱引用和地址引用 217
7.1.2 存儲空間的管理 219
7.1.3 指針的概念 223
7.2 指針的運算 224
7.2.1 指針運算符 224
7.2.2 指針運算種類 224
7.2.3 指針運算基本規(guī)則 224
7.2.4 指針偏移的意義 227
7.2.5 空指針的概念 230
7.3 指針與數(shù)組 230
7.3.1 指針與一維數(shù)組 230
7.3.2 指針與二維數(shù)組 234
7.4 指針與多組字符串問題 238
7.4.1 一維指針數(shù)組與指向指針的
指針 240
7.5 本章小結 241
習題 242
第8章 復合類型數(shù)據(jù) 244
8.1 結構體的概念 244
8.1.1 問題引入 244
8.1.2 綜合數(shù)據(jù)表的存儲方案 245
8.2 結構體的存儲 246
8.2.1 結構體類型定義 246
8.2.2 結構體變量定義 248
8.2.3 結構體初始化 248
8.2.4 結構體變量空間分配 249
8.2.5 結構體成員引用 253
8.3 結構體應用實例 254
8.4 共用體 264
8.4.1 問題引入 264
8.4.2 共用體的空間存儲描述 264
8.5 枚舉 269
8.5.1 問題引入 269
8.5.2 枚舉的概念及定義形式 270
8.5.3 枚舉實例 271
8.5.4 枚舉的使用規(guī)則 272
8.6 聲明新的類型名 273
8.6.1 問題引入 273
8.6.2 typedef聲明形式及使用 275
8.7 本章小結 275
習題 276
第9章 函數(shù) 278
9.1 函數(shù)的概念 278
9.1.1 問題的提出 278
9.1.2 模塊的概念 279
9.2 函數(shù)形式設計 281
9.2.1 模塊間信息交流方法 281
9.2.2 函數(shù)形式設計 282
9.3 函數(shù)間信息交流機制設計 285
9.3.1 函數(shù)間信息交流特點分析 285
9.3.2 函數(shù)間信息交流之處理數(shù)據(jù)
的提交與接收 287
9.3.3 函數(shù)結果的獲取方式 288
9.4 函數(shù)總體設計 289
9.4.1 函數(shù)設計要素 289
9.4.2 函數(shù)間信息傳遞歸結 289
9.4.3 函數(shù)的調用 290
9.5 函數(shù)設計實例 292
9.5.1 傳值調用 292
9.5.2 傳址調用 298
9.5.3 函數(shù)綜合實例 306
9.5.4 main函數(shù)的參數(shù) 316
9.6 作用域 319
9.6.1 問題引入 319
9.6.2 模塊的屏蔽機制 321
9.6.3 內存分區(qū)與存儲分類 322
9.6.4 屏蔽機制1——變量的有效期
和作用范圍 323
9.6.5 屏蔽機制2——函數(shù)的有效
范圍 330
9.6.6 屏蔽機制3——共享數(shù)據(jù)的
使用限制 332
9.7 遞歸 333
9.7.1 引例 333
9.7.2 遞歸概念 336
9.7.3 遞歸實例 337
9.8 本章小結 339
習題 340
第10章 編譯預處理——編譯前的
工作 343
10.1 問題的引入 343
10.2 宏定義 344
10.2.1 簡單的宏定義 344
10.2.2 帶參數(shù)的宏定義 346
10.2.3 宏定義的副作用 348
10.3 文件包含 348
10.4 條件編譯 350
10.5 本章小結 353
習題 354
第11章 文件——外存數(shù)據(jù)的操縱 356
11.1 問題的引入 356
11.2 文件的概念 357
11.3 文件的操作流程 358
11.4 內存和外存的數(shù)據(jù)交流 359
11.5 程序對文件的操作 361
11.5.1 打開文件 361
11.5.2 文件的讀寫 362
11.5.3 關閉文件 366
11.5.4 隨機讀取文件內容 367
11.6 關于文件讀寫函數(shù)的討論 368
11.7 程序調試與輸入輸出重定向 372
11.8 本章小結 374
習題 375
第12章 程序的運行 377
12.1 程序運行環(huán)境 377
12.1.1 集成環(huán)境主界面 379
12.1.2 建立項目 380
12.1.3 新建源文件 382
12.1.4 編輯源文件 382
12.1.5 編譯源文件 384
12.1.6 鏈接程序 385
12.1.7 運行程序 386
12.2 程序測試 387
12.2.1 引子 387
12.2.2 程序測試方法與實例 388
12.3 程序調試概念 392
12.3.1 bug與debug 392
12.3.2 bug無處不在 393
12.3.3 軟件調試的困難 393
12.4 軟件調試的方法論 394
12.4.1 引例 394
12.4.2 軟件調試的基本過程 395
12.4.3 程序錯誤的查找方法討論 395
12.4.4 跟蹤方法方案探索 397
12.5 程序調試工具 399
12.5.1 IDE中調試器的功能 399
12.5.2 調試命令 401
12.6 調試實例 405
12.6.1 基本調試步驟示例 405
12.6.2 調試查找程序錯誤示例 407
12.6.3 調用棧的使用示例 416
12.6.4 數(shù)據(jù)斷點使用示例 418
12.7 本章小結 420
習題 421
附錄A 運算符的優(yōu)先級和結合性 425
附錄B ASCII碼表 426
附錄C C語言常用庫函數(shù) 427
附錄D 常用轉義字符表 432
附錄E 位運算簡介 433
附錄F 在工程中加入多個文件 435
附錄G 編程范式 441
附錄H 空類型void問題 449
參考文獻 450