程式設計基礎——從問題到程式(第2版)

程式設計基礎——從問題到程式(第2版)

《程式設計基礎——從問題到程式(第2版)》是2016年1月清華大學出版社出版的圖書,作者是胡明王紅梅

基本介紹

  • 書名:程式設計基礎——從問題到程式(第2版)
  • 作者胡明
    王紅梅
  • 出版社清華大學出版社
  • 出版時間:2016年1月
  • 定價:39 元
  • ISBN:9787302411802
內容簡介,圖書目錄,

內容簡介

本書以C語言為工具,以程式設計過程為主線,結合實際問題,基於計算思維,通過“問題→想法→算法→程式”的問題求解過程,帶領讀者分析問題、構造算法、設計程式,在潛移默化中掌握程式設計語言的基本知識,掌握程式設計的一般過程和基本方法,提高去府府計算思維能力以及應 用程式設計語言解決實際問題的能力。 本書適用於程式設計的初學者,主要面向沒有任何編程知識辯贈您紋和編程經歷的讀者。本書遵循初學者的認知規律和知識基礎,科學安排知識單元之間的拓撲關係,概念清晰,實例豐富,深入淺出,是程式設計初學者的理想教材。

圖書目錄

第1章 緒論 1
1.1 程式、程式設計與程式設計語言 1
1.1.1 程式與程式設計 1
1.1.2 程式設計語言 2
1.2 程式的基本構成 4
1.2.1 程式示例 5
1.2.2 基本字元集 6
1.2.3 詞法單位 6
1.2.4 語法單位 8
1.2.5 程式嘗寒閥 8
1.3 程式的上機過程 12
1.3.1 編程環境 12
1.3.2 程式編輯 12
1.3.3 程式編譯 13
1.3.4 程式連線 13
1.3.5 運行調試 13
1.4 程式風格 14
1.4.1 標識符的命名規則 14
1.4.2 注釋 15
1.4.3 縮進 15
1.4.4 行文格式 16
1.5 問題求解與程式設計 17
1.5.1 程式設計的一般過程 17
1.5.2 程式設計的核心——算法 18
1.5.3 程式設計實例——雞兔同籠問題 21
習題1 22
第2章 數據的存儲表示 25
引例2.1 計算圓的面積 25
2.1 數據的存儲 26
2.1.1 二進制 26
2.1.2 記憶體 27
2.2 基本數據類型 28
2.2.1 整型 29
2.2.2 實型 31
2.2.3 字元型 32
2.2.4 邏輯型 33
2.3 常量 34
2.3.1 字面常量 34
2.3.2 符號常量 36
2.4 變數 38
2.4.1 變數的概念 38
2.4.2 變數的定義和初始化 39
2.4.3 變數的賦值 40
2.5 程式設計實例 43
2.5.1 實例1——溫度轉換 43
2.5.2 實例2——計算本息和 43
習題2 44
第3章 數據的運算處理 47
3.1 算術運算 47
引例3.1 求平均值道閥獄 47
3.1.1 算術運算 48
3.1.2 運算符的優先權和結合性 49
3.2 邏輯運算 50
引例3.2 判斷閏年 50
3.2.1 關係運算 51
3.2.2 邏輯運算 51
3.3 賦值運算 52
3.3.1 賦值運算 52
3.3.2 自增/自減運算 53
3.4 其他運算 54
3.4.1 逗號運算 54
3.4.2 取長度運算 54
3.4.3 條件運算 55
3.5 運算對象的類型轉換 55
3.5.1 自動轉換 56
3.5.2 強制轉換 57
3.6 程式設計實例 58
3.6.1 實例1——通用產品代碼UPC 58
3.6.2 實例2——瘋狂賽車 59
習題3 60
第4章 程式的基本控制結構 63
4.1 順序結構 63
引例4.1 整數的逆值 63
4.1.1 簡單的順序結構 64
4.1.2 複合語句 65
4.2 選擇結構 65
引例踏鑽主4.2 水仙花數 66
4.2.1 邏輯值控制的選擇結構 67
4.2.2 算術值控制的選擇結構 69
4.3 循環結構 71
引例4.3 歐幾里得算法 71
4.3.1 當型循環 72
4.3.2 直到型循環 72
4.3.3 計數型循環 73
4.3.4 循環結構的比較 74
4.3.5 循環結構的嵌套 77
4.4 其他控制語句 78
引例4.4 素數判定 78
4.4.1 break語句 79
4.4.2 continue語句 80
4.5 程式設計實例 81
4.5.1 實例1—櫃頸—將三個整數由小到大輸出 81
4.5.2 實例2——今年已經過去多久了 81
4.5.3 實例3——百元買百雞問題 83
4.5.4 實例4——哥德巴赫猜想 84
習題4 85
第5章 批量同類型數據的組織——數組 88
5.1 一維數組 88
引例5.1 舞林大會 88
5.1.1 一維數組的定義和初始化 89
5.1.2 一維數組的操作 92
5.2 二維數組 94
引例5.2 哥尼斯堡七橋問題 94
5.2.1 二維數組的定義和初始化 95
5.2.2 二維數組的操作 97
5.3 程式設計實例 99
5.3.1 實例1——折半查找 99
5.3.2 實例2——合併有序數組 100
5.3.3 實例3——對角線元素之和煮她擔墓 101
5.3.4 實例4——幻方問題 103
習題5 104
第6章 程式的組裝單元——函式 107
6.1 用戶定義的函式——自定義函式 107
引例6.1 歐幾里得算法 107
6.1.1 函式定義 108
6.1.2 函式調用 110
6.1.3 函式聲明 112
6.2 系統定義的函式——庫函式 113
引例6.2 素數判定 114
6.2.1 頭檔案與檔案包含 115
6.2.2 標準輸入輸出函式 116
6.2.3 隨機函式 119
6.2.4 其他常用庫函式 120
6.3 變數的作用域 121
引例6.3 雞兔同籠問題 121
6.3.1 局部變數 122
6.3.2 全局變數 124
6.4 變數的生存期 125
引例6.4 字數統計 125
6.4.1 自動變數 126
6.4.2 靜態變數 127
6.5 程式設計實例 128
6.5.1 實例1——三角形的面積 128
6.5.2 實例2——猜數遊戲 129
習題6 131
第7章 變數的間接訪問——指針 134
7.1 指針 134
引例7.1 答疑教室 134
7.1.1 指針的概念 135
7.1.2 指針變數的定義和初始化 137
7.1.3 指針變數的操作 139
7.1.4 指針所指變數的操作 141
7.2 指針作為函式的參數 141
引例7.2 雞兔同籠問題 141
7.2.1 值傳遞方式——函式的輸入 143
7.2.2 指針傳遞方式——函式的輸出 144
7.2.3 指針傳遞方式——函式的輸入輸出 145
7.3 數組作為函式的參數 146
引例7.3 順序查找 146
7.3.1 一維數組作為函式的參數 147
7.3.2 二維數組作為函式的參數 149
7.4 程式設計實例 150
7.4.1 實例1——三個整數由小到大輸出 150
7.4.2 實例2——哥德巴赫猜想 151
7.4.3 實例3——求一元二次方程的根 152
7.4.4 實例4——簡單選擇排序 154
習題7 155
第8章 字元數據的組織——字元串 158
引例8.1 愷撒加密 158
8.1 字元串變數的定義和初始化 159
8.1.1 字元數組 160
8.1.2 字元串指針 162
8.2 字元串的操作 162
8.2.1 輸入輸出操作 162
8.2.2 賦值操作 166
8.2.3 字元串的比較 167
8.2.4 常用字元串庫函式 168
8.3 程式設計實例 168
8.3.1 實例1——字數統計 168
8.3.2 實例2——字元串匹配 169
習題8 171
第9章 自定義數據類型 174
9.1 可枚舉數據的組織——枚舉類型 174
引例9.1 行走機器人 174
9.1.1 枚舉類型的定義 176
9.1.2 枚舉變數的定義與初始化 176
9.1.3 枚舉變數的操作 178
9.2 不同類型數據的組織——結構體類型 179
引例9.2 統計入學成績 179
9.2.1 結構體類型的定義 180
9.2.2 結構體變數的定義和初始化 181
9.2.3 結構體變數的操作 183
9.3 批量不同類型數據的組織——結構體數組 185
引例9.3 統計入學成績 186
9.3.1 結構體數組的定義和初始化 187
9.3.2 結構體數組的操作 189
9.4 為自定義數據類型定義別名 190
9.5 程式設計實例 191
9.5.1 實例1——荷蘭國旗問題 191
9.5.2 實例2——最近對問題 193
習題9 195
第10章 再談函式 198
10.1 函式的嵌套調用 198
引例10.1 字元串的循環左移 198
10.1.1 函式——封裝的小程式 200
10.1.2 函式的嵌套調用 201
10.2 函式的遞歸調用 202
引例10.2 求n! 202
10.2.1 遞歸的定義 203
10.2.2 函式的遞歸調用 204
10.3 程式設計實例 206
10.3.1 實例1——公共子序列 206
10.3.2 實例2——弦截法求方程的根 208
10.3.3 實例3——漢諾塔問題 210
10.3.4 實例4——折半查找 211
習題10 213
第11章 再談指針 216
11.1 指針與數組 216
引例11.1 判斷回文串 216
11.1.1 用指針訪問一維數組 217
11.1.2 用指針訪問二維數組 219
11.1.3 指針數組 221
11.2 指針與結構體 222
引例11.2 統計入學成績 222
11.2.1 指向結構體的指針 223
11.2.2 結構體指針作為函式參數 224
11.3 動態存儲分配 225
引例11.3 發紙牌 226
11.3.1 申請和釋放存儲空間 227
11.3.2 動態數組 230
11.3.3 鍊表 232
11.4 程式設計實例 236
11.4.1 實例1——求最大字元串 236
11.4.2 實例2——進制轉換 237
習題11 239
第12章 再談輸入輸出 241
引例12.1 統計入學成績 241
12.1 檔案與檔案指針 244
12.1.1 文本檔案和二進制檔案 244
12.1.2 檔案緩衝區 245
12.1.3 檔案指針 246
12.2 檔案的當前位置指針 246
12.2.1 什麼是檔案的當前位置指針 246
12.2.2 跟蹤檔案的當前位置指針 247
12.2.3 定位檔案的當前位置指針 248
12.3 檔案的打開與關閉 249
12.3.1 檔案的打開 249
12.3.2 檔案的關閉 251
12.4 檔案的讀寫操作 251
12.4.1 字元方式檔案讀寫 251
12.4.2 字元串方式檔案讀寫 252
12.4.3 格式化方式檔案讀寫 254
12.4.4 二進制方式檔案讀寫 255
12.5 程式設計實例 256
12.5.1 實例1——檔案複製 256
12.5.2 實例2——註冊與登錄 258
習題12 260
第13章 再談程式的基本結構 262
13.1 多檔案程式 262
13.1.1 多檔案程式的構成 262
13.1.2 將源程式檔案分解為多個程式檔案模組 263
13.2 外部變數和外部函式 264
13.2.1 外部變數 264
13.2.2 外部函式 265
13.3 嵌套包含 267
13.3.1 條件編譯 267
13.3.2 保護頭檔案 270
13.4 程式設計實例——石頭、剪子、布遊戲 271
習題13 276
第14章 低級程式設計 277
引例14.1 XOR加密 277
14.1 數據表示 278
14.1.1 二進制數與八進制數和十六進制數之間的轉換 278
14.1.2 位域 279
14.2 位運算 280
14.2.1 位邏輯運算 281
14.2.2 移位運算 282
14.2.3 補位原則 283
14.2.4 位運算的套用 283
14.3 程式設計實例 284
14.3.1 實例1——快速歐幾里得算法 284
14.3.2 實例2——過濾特殊字元 285
習題14 287
第15章 基本的算法設計技術 288
15.1 蠻力法 288
15.1.1 設計思想 288
15.1.2 程式設計實例——起泡排序 289
15.2 窮舉法 291
15.2.1 設計思想 291
15.2.2 程式設計實例——假幣問題 292
15.3 遞推法 295
15.3.1 設計思想 295
15.3.2 程式設計實例——捕魚知多少 296
15.4 分治法 297
15.4.1 設計思想 297
15.4.2 程式設計實例——數字旋轉方陣 299
15.5.1 設計思想 302
15.5.2 程式設計實例——0/1背包問題 303
15.6 貪心法 305
15.6.1 設計思想 305
15.6.2 程式設計實例——埃及分數 306
習題15 308
附錄A 標準ASCII碼 310
附錄B 運算符的優先權和結合性 311
附錄C 常用庫函式 312
參考文獻 317
3.3 賦值運算 52
3.3.1 賦值運算 52
3.3.2 自增/自減運算 53
3.4 其他運算 54
3.4.1 逗號運算 54
3.4.2 取長度運算 54
3.4.3 條件運算 55
3.5 運算對象的類型轉換 55
3.5.1 自動轉換 56
3.5.2 強制轉換 57
3.6 程式設計實例 58
3.6.1 實例1——通用產品代碼UPC 58
3.6.2 實例2——瘋狂賽車 59
習題3 60
第4章 程式的基本控制結構 63
4.1 順序結構 63
引例4.1 整數的逆值 63
4.1.1 簡單的順序結構 64
4.1.2 複合語句 65
4.2 選擇結構 65
引例4.2 水仙花數 66
4.2.1 邏輯值控制的選擇結構 67
4.2.2 算術值控制的選擇結構 69
4.3 循環結構 71
引例4.3 歐幾里得算法 71
4.3.1 當型循環 72
4.3.2 直到型循環 72
4.3.3 計數型循環 73
4.3.4 循環結構的比較 74
4.3.5 循環結構的嵌套 77
4.4 其他控制語句 78
引例4.4 素數判定 78
4.4.1 break語句 79
4.4.2 continue語句 80
4.5 程式設計實例 81
4.5.1 實例1——將三個整數由小到大輸出 81
4.5.2 實例2——今年已經過去多久了 81
4.5.3 實例3——百元買百雞問題 83
4.5.4 實例4——哥德巴赫猜想 84
習題4 85
第5章 批量同類型數據的組織——數組 88
5.1 一維數組 88
引例5.1 舞林大會 88
5.1.1 一維數組的定義和初始化 89
5.1.2 一維數組的操作 92
5.2 二維數組 94
引例5.2 哥尼斯堡七橋問題 94
5.2.1 二維數組的定義和初始化 95
5.2.2 二維數組的操作 97
5.3 程式設計實例 99
5.3.1 實例1——折半查找 99
5.3.2 實例2——合併有序數組 100
5.3.3 實例3——對角線元素之和 101
5.3.4 實例4——幻方問題 103
習題5 104
第6章 程式的組裝單元——函式 107
6.1 用戶定義的函式——自定義函式 107
引例6.1 歐幾里得算法 107
6.1.1 函式定義 108
6.1.2 函式調用 110
6.1.3 函式聲明 112
6.2 系統定義的函式——庫函式 113
引例6.2 素數判定 114
6.2.1 頭檔案與檔案包含 115
6.2.2 標準輸入輸出函式 116
6.2.3 隨機函式 119
6.2.4 其他常用庫函式 120
6.3 變數的作用域 121
引例6.3 雞兔同籠問題 121
6.3.1 局部變數 122
6.3.2 全局變數 124
6.4 變數的生存期 125
引例6.4 字數統計 125
6.4.1 自動變數 126
6.4.2 靜態變數 127
6.5 程式設計實例 128
6.5.1 實例1——三角形的面積 128
6.5.2 實例2——猜數遊戲 129
習題6 131
第7章 變數的間接訪問——指針 134
7.1 指針 134
引例7.1 答疑教室 134
7.1.1 指針的概念 135
7.1.2 指針變數的定義和初始化 137
7.1.3 指針變數的操作 139
7.1.4 指針所指變數的操作 141
7.2 指針作為函式的參數 141
引例7.2 雞兔同籠問題 141
7.2.1 值傳遞方式——函式的輸入 143
7.2.2 指針傳遞方式——函式的輸出 144
7.2.3 指針傳遞方式——函式的輸入輸出 145
7.3 數組作為函式的參數 146
引例7.3 順序查找 146
7.3.1 一維數組作為函式的參數 147
7.3.2 二維數組作為函式的參數 149
7.4 程式設計實例 150
7.4.1 實例1——三個整數由小到大輸出 150
7.4.2 實例2——哥德巴赫猜想 151
7.4.3 實例3——求一元二次方程的根 152
7.4.4 實例4——簡單選擇排序 154
習題7 155
第8章 字元數據的組織——字元串 158
引例8.1 愷撒加密 158
8.1 字元串變數的定義和初始化 159
8.1.1 字元數組 160
8.1.2 字元串指針 162
8.2 字元串的操作 162
8.2.1 輸入輸出操作 162
8.2.2 賦值操作 166
8.2.3 字元串的比較 167
8.2.4 常用字元串庫函式 168
8.3 程式設計實例 168
8.3.1 實例1——字數統計 168
8.3.2 實例2——字元串匹配 169
習題8 171
第9章 自定義數據類型 174
9.1 可枚舉數據的組織——枚舉類型 174
引例9.1 行走機器人 174
9.1.1 枚舉類型的定義 176
9.1.2 枚舉變數的定義與初始化 176
9.1.3 枚舉變數的操作 178
9.2 不同類型數據的組織——結構體類型 179
引例9.2 統計入學成績 179
9.2.1 結構體類型的定義 180
9.2.2 結構體變數的定義和初始化 181
9.2.3 結構體變數的操作 183
9.3 批量不同類型數據的組織——結構體數組 185
引例9.3 統計入學成績 186
9.3.1 結構體數組的定義和初始化 187
9.3.2 結構體數組的操作 189
9.4 為自定義數據類型定義別名 190
9.5 程式設計實例 191
9.5.1 實例1——荷蘭國旗問題 191
9.5.2 實例2——最近對問題 193
習題9 195
第10章 再談函式 198
10.1 函式的嵌套調用 198
引例10.1 字元串的循環左移 198
10.1.1 函式——封裝的小程式 200
10.1.2 函式的嵌套調用 201
10.2 函式的遞歸調用 202
引例10.2 求n! 202
10.2.1 遞歸的定義 203
10.2.2 函式的遞歸調用 204
10.3 程式設計實例 206
10.3.1 實例1——公共子序列 206
10.3.2 實例2——弦截法求方程的根 208
10.3.3 實例3——漢諾塔問題 210
10.3.4 實例4——折半查找 211
習題10 213
第11章 再談指針 216
11.1 指針與數組 216
引例11.1 判斷回文串 216
11.1.1 用指針訪問一維數組 217
11.1.2 用指針訪問二維數組 219
11.1.3 指針數組 221
11.2 指針與結構體 222
引例11.2 統計入學成績 222
11.2.1 指向結構體的指針 223
11.2.2 結構體指針作為函式參數 224
11.3 動態存儲分配 225
引例11.3 發紙牌 226
11.3.1 申請和釋放存儲空間 227
11.3.2 動態數組 230
11.3.3 鍊表 232
11.4 程式設計實例 236
11.4.1 實例1——求最大字元串 236
11.4.2 實例2——進制轉換 237
習題11 239
第12章 再談輸入輸出 241
引例12.1 統計入學成績 241
12.1 檔案與檔案指針 244
12.1.1 文本檔案和二進制檔案 244
12.1.2 檔案緩衝區 245
12.1.3 檔案指針 246
12.2 檔案的當前位置指針 246
12.2.1 什麼是檔案的當前位置指針 246
12.2.2 跟蹤檔案的當前位置指針 247
12.2.3 定位檔案的當前位置指針 248
12.3 檔案的打開與關閉 249
12.3.1 檔案的打開 249
12.3.2 檔案的關閉 251
12.4 檔案的讀寫操作 251
12.4.1 字元方式檔案讀寫 251
12.4.2 字元串方式檔案讀寫 252
12.4.3 格式化方式檔案讀寫 254
12.4.4 二進制方式檔案讀寫 255
12.5 程式設計實例 256
12.5.1 實例1——檔案複製 256
12.5.2 實例2——註冊與登錄 258
習題12 260
第13章 再談程式的基本結構 262
13.1 多檔案程式 262
13.1.1 多檔案程式的構成 262
13.1.2 將源程式檔案分解為多個程式檔案模組 263
13.2 外部變數和外部函式 264
13.2.1 外部變數 264
13.2.2 外部函式 265
13.3 嵌套包含 267
13.3.1 條件編譯 267
13.3.2 保護頭檔案 270
13.4 程式設計實例——石頭、剪子、布遊戲 271
習題13 276
第14章 低級程式設計 277
引例14.1 XOR加密 277
14.1 數據表示 278
14.1.1 二進制數與八進制數和十六進制數之間的轉換 278
14.1.2 位域 279
14.2 位運算 280
14.2.1 位邏輯運算 281
14.2.2 移位運算 282
14.2.3 補位原則 283
14.2.4 位運算的套用 283
14.3 程式設計實例 284
14.3.1 實例1——快速歐幾里得算法 284
14.3.2 實例2——過濾特殊字元 285
習題14 287
第15章 基本的算法設計技術 288
15.1 蠻力法 288
15.1.1 設計思想 288
15.1.2 程式設計實例——起泡排序 289
15.2 窮舉法 291
15.2.1 設計思想 291
15.2.2 程式設計實例——假幣問題 292
15.3 遞推法 295
15.3.1 設計思想 295
15.3.2 程式設計實例——捕魚知多少 296
15.4 分治法 297
15.4.1 設計思想 297
15.4.2 程式設計實例——數字旋轉方陣 299
15.5.1 設計思想 302
15.5.2 程式設計實例——0/1背包問題 303
15.6 貪心法 305
15.6.1 設計思想 305
15.6.2 程式設計實例——埃及分數 306
習題15 308
附錄A 標準ASCII碼 310
附錄B 運算符的優先權和結合性 311
附錄C 常用庫函式 312
參考文獻 317

相關詞條

熱門詞條

聯絡我們