內容簡介
《從問題到程式:程式設計與C語言引論》以c作為工具語言,討論了基本程式設計的各方面內容,詳細解釋了與c語言和程式設計有關的問題。在新版中,特別加強了針對近年日益受到業界和學術界廣泛重視的問題的討論,並通過詳細地分析和討論大量符合c99標準的實例,給出了分析和分解問題、找出解決問題的主要步驟、確定函式抽象、找出循環、選擇語言結構直至最後做出所需程式的完整過程。
《從問題到程式:程式設計與C語言引論》適合作為高等院校計算機及相關專業第一門程式設計課程的教材,也可供其他學習c程式設計的讀者自學使用。
目錄
《從問題到程式:程式設計與c語言引論》
前言
本書中的編程實例和模式
第1章 程式設計和c語言 1
1.1 程式和程式語言 1
1.2 c語言簡介 6
1.3 一個簡單的c程式 8
1.4 程式開發過程 10
1.5 問題與程式設計 14
本章討論的重要概念 15
練習 15
第2章 數據與簡單計算程式 16
2.1基本字元、標識符和關鍵字 16
2.2 數據、類型和簡單程式 17
2.2.1 幾個常用類型 18
2.2.2 函式printf和簡單
文本輸出程式 19
2.3 運算符、表達式和計算 22
2.3.1 算術運算符和算術表達式 22
2.3.2 表達式的求值 23
.2.3.3 計算和類型 24
2.4 數學函式和簡單計算程式 26
2.4.1 函式、函式調用 26
2.4.2 數學函式及其使用 27
2.4.3 函式調用中的類型轉換 28
語言細節和問題 29
c語言的字元集 29
基本數據類型的一些問題 29
數據形式的轉換和輸出 31
運算對象的求值順序32
幾個常用程式模式 32
本章討論的重要概念 32
練習 33
第3章 變數、函式和流程控制 34
3.1 複合結構和順序程式 34
3.2 變數的概念和使用 35
3.2.1 變數的定義 35
3.2.2 變數的使用 36
3.2.3 注釋和簡單順序程式 38
3.3 定義函式(初步) 38
3.3.1 函式定義 39
3.3.2 函式與程式 42
3.3.3 函式與類型 43
3.3.4 自定義輸出函式 44
3.4 關係表達式、條件表達式、邏輯表達式 44
3.4.1 關係表達式和條件表達式 44
3.4.2 邏輯表達式 46
3.5 語句與控制結構 47
3.5.1 條件語句:if語句 48
3.5.2 循環語句:while語句 50
3.5.3 循環語句:for語句 52
3.6 若干c語言結構 54
3.6.1 增量和減量運算符(++、--) 54
3.6.2 逗號運算符 55
3.6.3 實現二元運算符操作的賦值運算符 55
3.6.4 空語句 55
3.6.5 定義枚舉常量 56
3.7 輸入和輸出 56
3.7.1 格式輸入函式scanf 57
3.7.2 字元輸入和輸出函式 60
語言細節和問題 61
變數的意義和實現 61
賦值操作的一些問題 61
條件表達式和條件語句 62
表達式和求值 63
輸入和緩衝 65
幾個常用程式模式 65
本章討論的重要概念 65
練習 66
第4章 基本編程技術 68
4.1 循環程式設計 68
4.1.1 基本循環方式 69
4.1.2 求一系列完全平方數69
4.1.3判斷素數(謂詞函式) 71
4.1.4 艱難旅程(浮點誤差) 71
4.1.5 求立方根(疊代和逼近) 73
4.1.6 求sin函式值(通項計算) 74
4.1.7 從循環中退出 75
4.2 輸入循環 77
4.2.1 輸入循環的基本技術 77
4.2.2 字元輸入 80
4.2.3 檢查輸入 83
4.2.4 一個簡單計算器 84
4.3 循環與遞歸 85
4.3.1 階乘和乘冪(循環,遞歸) 85
4.3.2 fibonacci序列(計算與時間) 87
4.3.3 為計算過程計時 88
4.3.4 fibonacci序列的疊代計算(程式正確性與循環不變式) 89
4.3.5 最大公約數 91
4.4 程式調試和排錯 95
4.4.1 測試 95
4.4.2 白箱測試 95
4.4.3 黑箱測試 96
4.4.4 排除程式里的錯誤 98
語言細節和問題 98
程式的逐步求精和控制結構嵌套 99
循環中的幾種變數 99
與輸入輸出有關的幾個問題 100
輸入與安全性 100
幾個常用程式模式 101
本章討論的重要概念 102
練習 102
第5章 c程式結構 105
5.1 數值類型 105
5.1.1字元類型 105
5.1.2 整數類型 106
5.1.3 基本數據類型的選擇 107
5.2 幾種控制語句 107
5.2.1 do-while循環結構 107
5.2.2 流程控制語句 108
5.2.3 開關語句 109
5.3 一些標準庫函式 110
5.3.1 字元分類函式 111
5.3.2 隨機數生成函式112
5.4 程式的函式分解 113
5.4.1 函式分解 113
5.4.2 對函式的兩種觀點 114
5.4.3 函式定義與調用之間的配合 118
5.4.4 函式原型 119
5.4.5 求函式的根 121
5.4.6 一個簡單猜數遊戲 123
5.5 c程式結構與變數 125
5.5.1 外部定義的變數 125
5.5.2 作用域、存在期和變數類 126
5.5.3 變數的其他問題 130
5.6 預處理 131
5.6.1 檔案包含命令 132
5.6.2 宏定義與宏替換 132
5.6.3 條件編譯命令 135
5.6.4 定義常量 135
5.6.5 單詞計數問題 136
5.7 字位運算符 138
本章討論的重要概念 141
練習 141
第6章 順序數據組織:數組 144
6.1 數組的定義和使用 144
6.1.1 數組變數的定義和聲明 145
6.1.2 數組的使用 145
6.1.3 數組的初始化 147
6.1.4 數組程式實例 147
6.1.5 定義數組的問題 151
6.2 以數組為參數的函式 151
6.2.1 一個例子 152
6.2.2 修改實參數組的元素 153
6.3 二維和多維數組 153
6.3.1 多維數組的初始化 154
6.3.2 多維數組的使用 154
6.3.3 多維數組作為函式的參數 155
6.4 字元數組與字元串 156
6.4.1 字元數組 156
6.4.2 字元串 156
6.4.3 程式實例 157
6.4.4 標準庫字元串處理函式 159
6.4.5 輸出文本里的最長行 160
6.5 編程實例 162
6.5.1 成績直方圖 162
6.5.2 一個通用的帶檢查的整數輸入函式 165
6.5.3 “計算”數組變數的大小 166
6.5.4 數組的劃分 167
6.5.5 數組的排序 169
6.5.6 統計c程式里的關鍵字 170
語言細節和問題 172
數組的存儲實現 172
越界訪問的可能後果 173
多維數組的實現 173
函式參數與sizeof運算符 173
字元串的字典序174
幾個常用程式模式 174
本章討論的重要概念 174
練習 174
第7章 指針的套用 176
7.1 指針的定義和使用 176
7.1.1 指針的定義 177
7.1.2 指針操作 177
7.1.3 指針作為函式參數 178
7.1.4 有關指針的幾個問題 180
7.2 指針與數組 181
7.2.1 指向數組元素的指針 181
7.2.2 基於指針運算的數組程式設計 183
7.2.3 數組參數與指針 184
7.2.4 指針與數組操作的程式實例 184
7.2.5 字元指針與字元數組 187
7.2.6 多維數組作為參數的通用函式 188
7.3 指針數組 189
7.3.1 字元指針數組 190
7.3.2 指針數組與二維數組 190
7.3.3 命令行參數及其處理 191
7.4 動態存儲管理 193
7.4.1 c語言的動態存儲管理機制 194
7.4.2 兩個程式實例 196
7.4.3 函式、指針和動態存儲 199
7.4.4 定義類型 200
7.5 指向函式的指針 202
7.5.1 函式指針的定義和使用 202
7.5.2 函式指針作為函式的參數 203
語言細節和問題 206
指針運算原理 206
指針轉換 206
使用動態存儲管理的要點和細節 206
動態調整策略 207
過時的函式指針形式 207
複雜類型描述與解讀 208
幾個常用程式模式 209
本章討論的重要概念 209
練習 209
第8章 檔案和輸入輸出程式設計 211
8.1 檔案的概念 211
8.1.1 流和檔案指針 211
8.1.2 緩衝式輸入輸出 212
8.2 檔案的使用 213
8.2.1 檔案的打開和關閉 213
8.2.2 輸入輸出函式 214
8.2.3 程式實例 215
8.2.4 標準錯誤流 216
8.2.5 直接輸入輸出函式 217
8.3 標準流輸入輸出與格式控制 218
8.3.1 行式輸入和輸出 218
8.3.2 輸入格式控制 218
8.3.3 輸出格式控制 221
8.3.4 以字元串作為格式化輸入輸出對象 223
8.4 程式實例 223
8.4.1 求檔案中數據的平均值 223
8.4.2 一個背單詞程式 225
8.4.3 資金賬目系統 228
幾個常用程式模式 230
本章討論的重要概念 231
練習 231
第9章 結構和複雜數據組織 232
9.1 結構 232
9.1.1 結構聲明與變數定義 232
9.1.2 結構變數的初始化和使用 235
9.1.3 結構、數組與指針 236
9.2 枚舉 237
9.3 結構與函式 238
9.3.1 處理結構的函式 238
9.3.2 程式實例 241
9.4 編程實例 243
9.4.1 數據組的排序 243
9.4.2 複數的表示和處理 245
9.5 連結結構(自引用結構) 247
9.5.1 連結結構 247
9.5.2 自引用結構的定義 249
9.5.3 程式實現 249
9.5.4 數據與查找 252
語言細節和問題 253
結構的實現 253
聯合 254
欄位 256
本章討論的重要概念 257
練習 257
第10章 程式開發技術 259
10.1 分別編譯和c程式的分塊開發 259
10.1.1 分塊開發的問題和方法 259
10.1.2 程式實例:學生成績處理 260
10.1.3 分塊重整 263
10.1.4 其他安排和考慮 266
10.1.5 模組化思想和技術 267
10.1.6 單一頭檔案結構和多個頭檔案結構 271
10.2 功能模組和程式庫 273
10.2.1 複數模組 273
10.2.2 目標檔案和庫 275
10.2.3 防止重複包含 276
10.3 錯誤報告和處理 276
10.3.1 建立統一的錯誤報告機制 276
10.3.2 定義變參數的錯誤報告函式 277
10.3.3 運行中錯誤的檢查和處理 279
10.4 程式的配置 283
10.4.1 程式的行為參數和啟動時配置 283
10.4.2 互動式配置 285
10.4.3 通過命令行參數 286
10.4.4 採用配置檔案 287
10.5 程式開發過程 287
10.5.1 自上而下的開發 288
10.5.2 自下而上的開發 289
10.5.3 實際開發過程 290
本章討論的重要概念 291
練習 291
第11章 標準庫 293
11.1 標準庫結構 293
11.1.1 標準定義([stddef.h]) 294
11.1.2 錯誤信息([errno.h]) 294
11.1.3 c99的幾個頭檔案 295
11.2 幾個已經介紹過的頭檔案 295
11.3 字元串函式([string.h]) 295
11.3.1 一些字元串函式 296
11.3.2 存儲區操作函式 299
11.4 功能函式([stdlib.h]) 299
11.4.1 幾個整數函式 299
11.4.2 數值轉換 299
11.4.3 執行控制 300
11.4.4 與執行環境互動 301
11.4.5 常用函式bsearch和qsort301
11.5 日期和時間([time.h]) 302
11.6 實現特徵([limit.h]和[float.h]) 303
11.6.1 整數類型特徵 303
11.6.2 浮點數類型特徵 304
11.7 其他與輸入輸出有關的函式([stdio.h]) 304
11.7.1 符號常量和類型 305
11.7.2 檔案操作函式 305
11.7.3 流緩衝區操作函式 306
11.7.4 檔案定位及定位函式 306
11.7.5 其他有關函式 307
11.7.6 採用va_list參數的輸出函式 308
11.8 定義變長參數表([stdarg.h]) 309
11.9 非局部控制轉移([setjmp.h]) 311
11.10 調試斷言和信號處理([assert.h]和[signal.h]) 313
11.11 標準庫的其他功能 314
11.11.1 本地化 314
11.11.2 多位元組字元 315
本章討論的重要概念 316
練習 316
第12章 c99導引 317
12.1 c99擴充 317
12.1.1 語言層擴充 317
12.2 c99 數組和結構 319
12.2.1 複合對象的初始化 319
12.2.2 變長數組的定義和聲明 320
12.2.3 函式的變長數組參數 321
12.2.4 結構的變長數組成員 322
12.3 幾個c99標準庫包 324
12.3.1 標準庫包[stdint.h]和[inttype.h] 324
12.3.2 標準庫包[complex.h] 325
附錄ac語言運算符表 327
附錄b c語言速查 328
進一步學習的建議 333
參考文獻 336