內容介紹
《程式設計方法》以Scheme語言為基礎介紹計算和程式設計的一般理論和實踐。《程式設計方法》由8個部分和7個獨立的章節(第8、13、18、24、29、33、38章)組成。8個部分主要討論程式設計,獨立章節則介紹一些與程式設計和計算相關的話題。《程式設計方法》第1至第3部分介紹了基於數據驅動的程式設計基礎。第4部分介紹了程式設計中的抽象問題。第5部分和第6部分是與遞歸及累積相關的內容。《程式設計方法》的最後兩部分說明了設計程式的意義,闡述了如何套用前6個部分所描述的程式設計訣竅,以及使用賦值語句必須特別小心的一些問題。《程式設計方法》可作為高等院校計算機科學與技術專業“程式設計導論”和“計算導論”的教材和教學參考書,也可作為函式式語言和Scheme語言的入門教材。
作品目錄
第一部分 簡單數據的處理第1章 學生、教師和計算機 3
第2章 數、表達式和簡單程式 5
2.1 數和算術運算 5
2.2 變數和程式 6
2.3 字處理問題 9
2.4 錯誤 10
2.5 設計程式 12
第3章 程式就是函式加上變數定義 15
3.1 函式複合 15
3.2 變數定義 17
3.3 函式複合練習 18
第4章 條件表達式和函式 20
4.1 布爾類型和關係 20
4.2 函式和條件測試 22
4.3 條件和條件函式 25
4.4 條件函式的設計 27
第5章 符號信息 31
第6章 複合數據之一:結構體 34
6.1 結構體 34
6.2 補充練習:繪製簡單圖形 36
6.3 結構體定義 38
6.4 數據定義 41
6.5 設計處理複合數據的函式 43
6.6 補充練習:圓和長方形的移動 46
6.7 補充練習:劊子手遊戲 49
第7章 數據的多樣性 52
7.1 數據混合與區分 52
7.2 設計處理混合數據的函式 55
7.3 再論函式複合 58
7.4 補充練習:圖形的移動 60
7.5 輸入錯誤 61
第8章 語法和語義 63
8.1 Scheme的辭彙 63
8.2 Scheme的文法 64
8.3 Scheme的含義 65
8.4 錯誤 68
8.5 布爾值表達式 70
8.6 變數定義 71
8.7 結構體的定義 72
第二部分 任意數目數據的處理
第9章 複合數據類型之二:表 77
9.1 表 77
9.2 任意長的表的數據定義 80
9.3 處理任意長的表 82
9.4 設計自引用數據定義的函式 84
9.5 更多關於簡單表的例子 86
第10章 表的進一步處理 90
10.1 返回表的函式 90
10.2 包含結構體的表 93
10.3 補充練習:移動圖片 98
第11章 自然數 100
11.1 定義自然數 100
11.2 處理任意大的自然數 101
11.3 補充練習:創建表,測試函式 103
11.4 自然數的另一種數據定義 104
11.5 更多與自然數有關的性質 108
第12章 三論函式複合 110
12.1 設計複雜的程式 110
12.2 遞歸的輔助函式 111
12.3 問題泛化與函式泛化 114
12.4 補充練習:字母的重新排列 117
第13章 用list構造表 119
第三部分 再論任意大數據的處理
第14章 再論自引用數據定義 125
14.1 結構體中的結構體 125
14.2 補充練習:二叉搜尋樹 131
14.3 表中的表 135
14.4 補充練習:Scheme求值 137
第15章 相互引用的數據定義 139
15.1 由結構體組成的表與結構體中的表 139
15.2 為相互引用的定義設計函式 144
15.3 補充練習:網頁再談 145
第16章 反覆精化設計 147
16.1 數據分析 147
16.2 定義數據類型,再改進它們 148
16.3 改進函式和程式 150
第17章 處理兩種複雜數據片段 152
17.1 同時處理兩個表:第一種情況 152
17.2 同時處理兩個表:第二種情況 154
17.3 同時處理兩個表:第三種情況 156
17.4 函式的簡化 159
17.5 設計讀入兩個複雜輸入的函式 160
17.6 處理兩個複雜輸入的練習 161
17.7 補充練習:Scheme求值之二 164
17.8 相等與測試 165
第18章 局部定義和轄域 172
18.1 用local組織程式 172
18.2 轄域和塊結構 183
第四部分 抽象設計
第19章 定義的相似性 189
19.1 函式的類似之處 189
19.2 數據定義的類似之處 195
第20章 函式也是值 199
20.1 語法和語義 199
20.2 抽象函式和多態函式的契約 200
第21章 抽象設計的例子 204
21.1 從實例中抽象 204
21.2 抽象表處理函式的練習 208
21.3 抽象與惟一控制點 209
21.4 補充練習:再論圖片移動 210
21.5 注意:由模板設計抽象 211
第22章 使用函式進行抽象設計 213
22.1 返回函式的函式 213
22.2 把函式當成值來進行抽象設計 214
22.3 圖形用戶界面初探 216
第23章 數學方面的例子 223
23.1 數列和級數 223
23.2 等差數列和等差級數 225
23.3 等比數列和等比級數 225
23.4 函式曲線下方的面積 228
23.5 函式的斜率 229
第24章 定義匿名函式 234
24.1 lambda表達式的語法 234
24.2 lambda表達式的轄域和語義 235
24.3 lambda表達式的語用 237
第五部分 生成遞歸
第25章 一種新的遞歸形式 241
25.1 為桌上的一個球建立模型 242
25.2 快速排序 244
第26章 設計算法 248
26.1 終止 249
26.2 結構遞歸與生成遞歸的比較 251
26.3 做出選擇 252
第27章 主題的變更 256
27.1 分形 256
27.2 從檔案到行,從表到表的表 260
27.3 二分查找 263
27.4 牛頓法 267
27.5 補充練習:高斯消去法 269
第28章 回溯算法 273
28.1 圖的遍歷 273
28.2 補充練習:皇后之間的相互攻擊 277
第29章 計算的代價和向量 280
29.1 具體的時間和抽象的時間 280
29.2 “階”的定義 284
29.3 向量初探 286
第六部分 知識累積
第30章 知識的丟失 297
30.1 一個與結構處理相關的問題 297
30.2 一個關於生成遞歸的問題 300
第31章 設計帶累積器的函式 304
31.1 認識累積器的必要性 304
31.2 帶累積器的函式 305
31.3 把函式轉換成帶累積器的變體 306
第32章 使用累積器的更多例子 315
32.1 補充練習:有關樹的累積器 315
32.2 補充練習:傳教士和食人者問題 319
32.3 補充練習:單人跳棋 321
第33章 非精確數的本質 323
33.1 固定長度的數的算術運算 323
33.2 上溢出 327
33.3 下溢出 328
33.4 DrScheme數 328
第七部分 改變變數的狀態
第34章 函式的記憶 333
第35章 對變數賦值 337
35.1 簡單的、能工作的賦值 337
35.2 順序計算表達式 339
35.3 賦值和函式 340
35.4 第一個有用的例子 342
第36章 設計有記憶的函式 346
36.1 對記憶的需求 346
36.2 記憶與狀態變數 347
36.3 初始化記憶的函式 348
36.4 改變記憶的函式 349
第37章 使用記憶的例子 354
37.1 狀態的初始化 354
37.2 與用戶互動並改變狀態 356
37.3 在遞歸中改變狀態 362
37.4 狀態變數的練習 367
37.5 補充練習:探險 368
第38章 最終的語法和語義 371
38.1 Advanced Scheme的辭彙 371
38.2 Advanced Scheme的文法 371
38.3 Advanced Scheme的含義 373
38.4 Advanced Scheme中的錯誤 383
第八部分 複合值的改變
第39章 封裝 389
39.1 狀態變數的抽象 389
39.2 封裝練習 397
第40章 可改變的結構體 399
40.1 由函式得出結構體 399
40.2 可變的函式結構體 401
40.3 可變的結構體 403
40.4 可變的向量 409
40.5 改變變數與改變結構體 410
第41章 設計改變結構體的函式 414
41.1 為什麼改變結構體 414
41.2 結構體的設計訣竅與變化器之一 414
41.3 結構體的設計訣竅與變化器之二 423
41.4 補充練習:最後一次移動圖片 431
第42章 相等 433
42.1 外延相等 433
42.2 內涵相等 434
第43章 修改結構體、向量和對象 437
43.1 關於向量的更多練習 437
43.2 帶循環的結構體集合 448
43.3 狀態的回溯 455
結束語 458
計算 458
程式設計 458
繼續學習 459