《從問題到程式》是2005年9月1日機械工業出版社出版的圖書,作者是裘宗燕。本書以程式設計為基本線索,同時深入介紹了C語言各方面的情況。書中強調的是如何認識程式、寫程式和用C寫出好的程式。並通過實例討論了問題的分析和分解,找出主要步驟,確定函式抽象,找出循環,選擇語言結構,最後寫出程式的過程。
基本介紹
- 書名:從問題到程式
- 作者:裘宗燕
- ISBN:9787111167563
- 頁數:415頁
- 出版社:機械工業出版社
- 出版時間:2005年9月1日
- 裝幀:平裝
- 開本:16開
內容簡介,作者簡介,目錄,媒體評論,
內容簡介
書中不少實例給出了在不同考慮下可能形成的多種解法,以幫助讀者理解程式設計的“真諦”。《從問題到程式》以C作為討論程式設計的語言,討論了基本程式設計的各方面問題。書中給出程式實例時沒有採用常見的“提出問題,給出解答,再加些解釋”的簡單三步形式,而是增加了許多對問題的分析和討論,以幫助讀者認識程式設計過程的實質,理解從問題到程式的思考過程。書中還儘可能詳盡地解釋了許多與C語言和程式設計有關的問題。
作者簡介
裘宗燕,1952年生,北京大學數學學院信息科學系教授。長期從事計算機軟體和理論方面的研究和教學工作。專業興趣領域包括:程式理論,軟體形式化方法,複雜程式和系統的形式化模型,程式設計語言(語言特徵和語義),程式設計技術,符號計算和計算機科學教育等。近年主持或者參加了多項與本人研究興趣相關的項目,包括國家自然科學基金項目和973項目。目前主要的研究工作集中在具有複雜狀態的程式和系統的語義模型、面向對象系統的理論、Web語言和Web服務的形式化模型以及一般的軟體形式化方法領域。
多年來一直從事計算機科學技術課程的教學工作,承擔過多門本科生和研究生課程的教學工作,包括:算法與數據結構、程式設計語言原理、計算概論(C語言程式設計)、程式設計技術與方法、算法設計與分析、數理邏輯、理論計算機科學基礎、人工智慧等。
目錄
前言
本書作者簡介
第1章 程式設計和C語言 1
1.1程式和程式語言 1
1.2 C語言簡介 8
1.3一個簡單的C程式 1O
1.4程式開發過程 13
1.5問題與程式設計 17
本章討論的重要概念 18
練習 18
第2章 數據對象與計算 21
2.1基本字元、名字表示、標識符和關鍵字 21
2.2數據與類型 23
2.3基本類型與數據表示 23
2.3.1整數類型和整數的表示 23
2.3.2實數類型和實數的表示 25
2.3.3字元類型和字元的表示 26
2.3.4數據的外部表示、內部表示與轉換 27
2.4運算符、表達式與計算 3O
2.4.1算術運算符 3O
2.4.2算術表達式 31
2.4.3表達式的求值 32
2.4.4計算和類型 34
2.5數學函式館及其使用 37
2.5.1函式、函式調用 37
2.5.2數學函式及其使用 38
2.5.3函式調用中的類型轉換 39
問題解釋 40
幾個常用程式模式 40
本章討論的重要概念 41
練習 41
第3章 變數、函式和控制結構 43
3.1語句、複合結構 43
3.2變數——概念、定義和使用 44
3.2.1變數的定義 45
3.2.2變數的賦值與取值 46
3.2.3幾個問題 48
3.3定義函式(初步) 50
3.3.1函式定義 52
3.3.2函式和程式 55
3.3.3函式與類型 56
3.3.4自定義輸出函式 57
3.4關係表達式、邏輯表達式、條件表達式 58
3.4.1關係表達式和條件表達式 58
3.4.2邏輯表達式 60
3.5語句與控制結構 61
3.5.1條件語句(if語句) 62
3.5.2循環語句(1):while語句 65
3.5.3循環語句(2):for語句 68
3.6若干常用結構和問題 70
3.6.1增量和減量運算符(+;、~) 70
3.6.2逗號運算符 71
3.6.3實現二元運算符操作的賦值運算符 71
3.6.4空語句 72
3.6.5表達式和求值 73
問題解釋 74
幾個常用程式模式 74
本章討論的重要概念 75
練習 75
第4章 基本程式設計技術 79
4.1循環程式設計 79
4.1.1基本循環方式 8O
4.1.2求一系列完全平方數 81
4.1.3判斷素數(謂詞函式) 82
4.1.4艱難的旅程(浮點誤差) 83
4.1.5求立方根(疊代和逼進) 85
4.1.6求sin函式值(通項計算) 86
4.2循環程式的問題 87
4.2.1從循環中退出 87
4.2.2循環中的幾種變數 89
4.3循環與遞歸 9O
4.3.1階乘和乘冪(循環,遞歸) 9O
4.3.2 Fibonacci序列(計算與時間) 93
4.3.3為計算過程計時 94
4.3.4 Fibonacci序列的疊代計算(程式正確性與循環不變式) 95
4.3.5最大公約數 97
4.3.6河內塔(梵塔)問題 100
4.4基本輸入輸出 102
4.4.1格式輸入函式scanf 102
4.4.2字元輸入輸出函式 109
4.4.3輸入函式的返回值及其作用 112
4.5控制結構和控制語句 114
4.5.1 do-while循環結構 114
4.5.2流程控制語句 115
4.5.3開關語句 117
4.6程式設計實例 119
4.6.1一個簡單計算器 119
4.6.2定義枚舉常量 119
4.6.3單詞計數問題 120
4.7程式測試和排錯 123
4.7.1測試 123
4.7.2白箱測試 124
4.7.3黑箱測試 125
4.7.4排除程式里的錯誤 126
問題解釋 127
幾個常用程式模式 128
本章討論的重要概念 128
練習 128
第5章 C程式結構 133
5.1數值類型 133
5.1.1實數類型和整數類型 133
5.1.2字元類型 133
5.1.3整數類型 134
5.1.4基本數據類型的選擇 135
5.2函式和標準庫函式 136
5.2.1C語言的庫函式 137
5.2.2字元分類函式 137
5.2.3隨機數生成函式 138
5.3函式定義和程式的函式分解 l39
5.3.1主函式 140
5.3.2程式的函式分解 141
5.3.3對函式的兩種觀點 142
5.3.4函式原型 146
5.4 C程式結構與變數 149
5.4.1外部定義的變數 150
5.4.2作用域與生存期 151
5.4.3外部變數和自動變數 151
5.4.4變數定義的嵌套 153
5.4.5靜態局部變數 154
5.4.6變數的其他問題 155
5.4.7一個實例 l57
5.5預處理 159
5.5.1檔案包含命令 159
5.5.2宏定義與宏替換 160
5.5.3條件編譯命令 163
5.6定義常量 164
5.7字位運算符 165
5.8編程實例 168
5.8.1一個簡單的猜數遊戲 168
5.8.2加密與解密 170
本章討論的重要概念 172
練習 l72
第6章 數組 175
6.1數組的概念、定義和使用 175
6.1.1定義數組變數 176
6.1.2數組的使用 177
6.1.3數組的初始化 179
6.1.4數組的存儲實現 180
6.2數組程式實例 181
6.2.1從字元到下標 181
6.2.2篩法求素數 182
6.2.3成績分類 183
6.2.4多項式求值 184
6.2.5定義數組的問題 185
6.3數組作為函式參數 186
6.3.1一個例子 186
6.3.2修改實參數組的元素 188
6.4字元數組與字元串 189
6.4.1字元數組 189
6.4.2字元串 189
6.4.3程式實例 191
6.4.4標準庫字元串處理函式 193
6.4.5輸出文本里的最長行 194
6.5兩維和多維數組 198
6.5.1多維數組的初始化 198
6.5.2多維數組的表示和使用 199
6.5.3多維數組作為函式的參數 200
6.6編程實例 201
6.6.1成績直方圖 201
6.6.2一個通用帶檢查的整數輸入函式 205
6.6.3 “計算”數組變數的大小 206
6.6.4統計c程式里的關鍵字 208
6.6.5數組的劃分 211
6.6.6數組的排序 213
問題解釋 2l5
幾個常用程式模式 215
本章討論的重要概念 215
練習 215
第7章 指針 217
7.1地址與指針 217
7.2指針變數的定義和使用 218
7.2.1指針操作 218
7.2.2指針作為函式的參數 219
7.2.3與指針有關的一些問題 222
7.3指針與數組 224
7.3.1指向數組元素的指針 224
7.3.2基於指針運算的數組程式設計 227
7.3.3數組參數與指針 228
7.3.4指針與數組操作的程式實例 229
7.3.5字元指針與字元數組 231
7.4指針數組 233
7.4.1指針數組與兩維數組 234
7.4.2命令行參數及其處理 235
7.5多維數組作為參數的通用函式 238
7.6動態存儲管理 240
7.6.1為什麼需要動態存儲管理 24O
7.6.2 c語言的動態存儲管理機制 241
7.6.3兩個程式實例 244
7.6.4函式、指針和動態存儲 247
7.7定義類型 250
7.7.1定義數組類型和指針類型 251
7.7.2複雜類型描述與解讀 252
7.8指向函式的指針 254
7.8.1函式指針的定義和使用 254
7.8.2函式指針作為函式的參數 255
7.8.3數值積分函式 257
7.8.4若干以函式指針為參數的數組操作實用函式 259
幾個常用程式模式 260
本章討論的重要概念 260
練習 261
第8章 檔案和輸入輸出 263
8.1檔案的概念 263
8.1.1流和檔案指針 263
8.1.2緩衝式輸入輸出 264
8.2檔案的使用 265
8.2.1檔案的打開和關閉 265
8.2.2輸入輸出函式 267
8.2.3程式實例 268
8.2.4直接輸入輸出函式 270
8.3標準流輸入輸出與格式控制 271
8.3.1行式輸入和輸出 271
8.3.2輸入格式控制 272
8.3.3輸出格式控制 276
8.3.4以字元串作為格式化輸入輸出對象 278
8.3.5標準錯誤流 278
8.4程式實例 279
8.4.1求檔案數據的平均值 279
8.4.2一個背單詞程式 281
8.4.3資金賬目系統 285
練習 288
第9章 結構和其他數據機制 291
9.1結構(struct) 291
9.1.1結構聲明與變數定義 291
9.1.2結構變數的初始化和使用 296
9.1.3結構、數組與指針 297
9.2結構與函式 299
9.2.1處理結構的函式 299
9.2.2程式實例 302
9.3聯合(union) 306
9.4枚舉(enum) 308
9.5編程實例 310
9.5.1數據組的排序 310
9.5.2複數的表示和處理 312
9.6連結結構(自引用結構) 315
9.6.1連結結構 315
9.6.2自引用結構的定義 317
9.6.3程式實現 318
9.6.4數據與查找 321
9.7欄位 322
問題解釋 323
本章討論的重要概念 323
練習 323
第10章 程式開發技術 327
10.1分別編譯和C程式的分塊開發 327
10.1.1分塊開發的問題和方法 327
10.1.2程式實例:學生成績處理 328
10.1.3分塊重整 333
10.1.4其他安排和考慮 336
10.1.5模組化思想和技術 338
10.1.6單一頭檔案結構和多個頭檔案結構 342
10.2功能模組和程式庫 345
10.2.1複數模組 345
10.2.2目標檔案和庫 348
10.2.3防止重複包含 349
10.3錯誤報告和處理 349
10.3.1建立統一的錯誤報告機制 349
10.3.2定義變參數的錯誤報告函式 350
10.3.3運行中錯誤的檢查和處理 352
10.4程式的配置 358
10.4.1程式的行為參數和啟動時的配置 358
10.4.2互動式配置 360
10.4.3通過命令行參數 361
10.4.4採用配置檔案 362
10.5程式開發過程 362
10.5.1自上而下的開發 363
10.5.2自下而上的開發 365
10.5.3實際開發過程 365
練習 367
第11章 標準庫 371
11.1標準庫結構 371
11.1.1標準定義() 372
11.1.2錯誤信息() 372
11.2幾個已經介紹過的頭檔案 373
11.2.1數學函式() 373
11.2.2字元處理函式() 374
11.3字元串函式(string.h>) 375
11.3.1一些字元串函式 375
11.3.2存儲區操作 378
11.4功能函式() 379
11.4.1幾個整數函式 380
11.4.2數值轉換 380
11.4.3執行控制 381
11.4.4與執行環境互動 381
11.4.5常用函式bsearch和qsort 382
11.5日期和時間() 383
11.6實現特徵(和) 385
11.6.1整數類型特徵 385
11.6.2浮點數類型特徵 386
11.7其他與輸入輸出有關的函式() 386
11.7.1符號常量和類型 386
11.7.2檔案操作函式 387
11.7.3流緩衝區操作函式 388
11.7.4檔案定位及定位函式 389
11.7.5其他有關函式 390
11.7.6採用va—list參數的輸出函式 391
11.8定義變長度參數表(<stdarg.h) 392
11.9非局部控制轉移() 395
11.10調試斷言和信號處理(和) 397
11.11標準庫的其他功能 398
11.11.1本地化 398
11.11.2多位元組字元 400
本章討論的重要概念 400
練習 400
附錄A C語言運算符表 401
附錄B C語言速查 403
附錄C C99簡介 409
進一步學習的建議 413
參考文獻 416
媒體評論
書評
本書以程式設計為基本線索,同時深入介紹了C語言各方面的情況。書中強調的是如何認識程式、寫程式和用C寫出好的程式。並通過實例討論了問題的分析和分解,找出主要步驟,確定函式抽象,找出循環,選擇語言結構,最後寫出程式的過程。書中不少實例給出了在不同考慮下可能形成的多種解法,以幫助讀者理解程式設計的“真諦”。