《新概念C程式設計大學教程(第3版)》是2017年1月清華大學出版社出版的圖書,作者是張基溫。
基本介紹
- 中文名:新概念C程式設計大學教程(第3版)
- 作者:張基溫
- 出版時間:2017年1月
- 出版社:清華大學出版社
- ISBN:9787302439943
- 定價:49 元
內容簡介,圖書目錄,
內容簡介
本書是一本“以計算思維訓練為核心,以能力培養為目標”的C語言程式設計教材,基於“程式設計 = 算法思維 + 語言藝術 + 工程規範”的知識和能力框架和“前期以培養解題思路為主,語法知識夠用就行;後期補充必要的語法細節”的教學策略編寫。全書共9單元可分為4個部分。
第1部分是針對C程式設計的初級訓練:第1單元介紹進行C語言程式設計首先應當掌握的一些基本概念和方法;第2、3單元在第1單元的基礎上介紹判斷結構和重複結構,第4單元介紹窮舉、疊代、遞歸和模擬,奠定算法基礎。
第2部分是在第1部分的基礎上進行數據類型的擴展:第5單元介紹數組,第6單元介紹3種可定製數據結構——構造體、共用體和枚舉,第7單元介紹指針及其套用。
第3部分只有第8單元一單元,介紹分治、回溯、貪心策略和動態規劃,作為算法設計進階,可以使讀者的程式設計能力提升到較高水平。
第4部分用第9單元一單元介紹一些可能用得著的有關內容,包括外部變數、內聯函式、帶參宏定義、檔案和位操作。
這樣的結構可以滿足多種不同層次的教和學的需求,併兼顧自學。
作者在編寫本書時力求概念準確、難點分散、例題經典、習題豐富、題型全面、注重效果,並以C99作為藍本,可以作為高等學校各專業的新一代程式設計課程教材,也可供從事程式設計相關領域的人員自學或參考。
圖書目錄
第1單元 C程式啟步 1
1.1 一個簡單的計算器程式設計 1
1.1.1 用偽代碼描述的簡單計算器程式算法 1
1.1.2 將偽代碼描述的算法逐步細化為C程式 2
1.1.3 C語言程式的編譯、連結與執行 4
1.2 數據類型、標識符與聲明 6
1.2.1 數據類型 6
1.2.2 C語言標識符規則 6
1.2.3 聲明 7
1.3 表達式 8
1.3.1 字面量 8
1.3.2 數據實體 8
1.3.3 含有操作符的表達式及其求值規則 10
1.3.4 C語言的實現定義行為和未定義行為 13
1.4 函式 13
1.4.1 用函式組織程式 13
1.4.2 函式定義、函式調用與函式返回 15
1.4.3 函式聲明 16
1.4.4 main函式 17
1.4.5 庫函式與頭檔案 17
1.4.6 printf函式的基本用法 18
1.4.7 scanf函式的基本用法 19
1.5 程式測試 22
1.5.1 程式中的語法錯誤和邏輯錯誤 22
1.5.2 程式運行中的異常與錯誤 22
1.5.3 程式測試及其觀點 22
1.5.4 程式的靜態測試與動態測試 23
1.5.5 設計用戶友好的程式 23
1.6 知識連結A:整數類型 24
1.6.1 有符號整數類型與無符號整數類型 24
1.6.2 標準整數類型與擴展整數類型 25
1.6.3 宏與整數類型的極值宏 26
1.6.4 整數常量使用的3種進制 27
1.6.5 整數常量的標識 27
1.7 知識連結B:浮點類型 28
1.7.1 浮點類型的值的特性:取值範圍與精度 28
1.7.2 浮點數據的捨入模式 29
1.7.3 浮點類型數據的操作限制 30
1.7.4 浮點類型常量的書寫格式 30
1.7.5 _Complex類型和_Imaginary類型 31
1.8 知識連結C:字元類型 31
1.8.1 字元編碼概述 31
1.8.2 char類型的基本特點 32
1.8.3 轉義字元 33
1.8.4 用scanf和printf輸入與輸出字元 33
1.8.5 用getchar和putchar輸入與輸出字元 34
習題1 35
第2單元 選擇程式設計 42
2.1 可選擇計算類型的計算器程式算法分析 42
2.1.1 粗略算法分析 42
2.1.2 計算函式calculate的算法分析 43
2.1.3 判等操作符與關係操作符 44
2.2 if-else型選擇結構 44
2.2.1 用if-else實現的calculate函式 44
2.2.2 if-else結構的特點 45
2.2.3 if-else if結構 46
2.2.4 瘸腿if-else嵌套結構 47
2.2.5 邏輯操作符與邏輯表達式 48
2.2.6 條件表達式 49
2.2.7 良好的程式書寫風格 50
2.3 選擇結構的測試 51
2.3.1 白箱測試法 51
2.3.2 使用double類型數據的calculate代碼 52
2.3.3 等價分類法 53
2.4 switch型選擇結構 56
2.4.1 基於整數值匹配的選擇結構——switch結構 56
2.4.2 一個字元分類程式 57
2.4.3 用switch結構實現的calculate函式 59
2.4.4 switch結構與if-else結構的比較 60
2.5 知識連結D:變數的訪問屬性 61
2.5.1 變數的生存期與標識符的作用域 61
2.5.2 局部變數 63
2.6 知識連結E:#include指令與const限定符 66
2.6.1 #define指令 66
2.6.2 const限定符 67
2.7 知識連結F:左值表達式與右值表達式 68
2.7.1 左值表達式與右值表達式的概念 69
2.7.2 左值表達式的套用 70
習題2 71
第3單元 重複程式設計 82
3.1 可連續計算的計算器算法分析 82
3.1.1 初步算法 82
3.1.2 算法細化 82
3.1.3 重複結構的C語言實現 83
3.2 while結構 83
3.2.1 while結構的基本原理 83
3.2.2 採用while結構的可連續型計算器主函式 84
3.2.3 逗號操作符 85
3.3 do-while結構 86
3.3.1 do-while結構的基本原理 86
3.3.2 採用do-while結構的可連續型計算器主函式 86
3.4 for結構 87
3.4.1 for結構的基本原理 87
3.4.2 採用for結構的可連續型計算器主函式 87
3.4.3 計數型重複結構 89
3.4.4 複合賦值操作符與增值、自減操作符 93
3.5 重複結構的程式測試 94
3.5.1 基於路徑覆蓋的重複結構測試 94
3.5.2 邊值分析法與重複結構測試 94
3.5.3 基於因果分析的程式測試 96
3.6 break與continue 98
3.6.1 break與continue語法概要 98
3.6.2 實例:求素數 99
3.7 知識連結G:表達式的副作用與序列點 101
3.7.1 表達式的副作用 101
3.7.2 序列點及其對表達式求值順序的影響 102
3.7.3 副作用編程對策 104
3.8 知識連結H:算術數據類型轉換 105
3.8.1 算術表達式中的數據類型轉換 105
3.8.2 普通算術轉換中的“提升拉齊”規則 105
3.8.3 傳送轉換中的數據類型轉換 107
3.8.4 數據的顯式類型轉換 108
3.8.5 數據類型轉換風險 109
習題3 113
第4單元 算法基礎 121
4.1 窮舉 121
4.1.1 搬磚問題 122
4.1.2 推斷名次 124
習題4.1 128
4.2 疊代與遞推 132
4.2.1 用二分疊代法求方程在指定區間的根 133
4.2.2 猴子吃桃子問題 136
4.2.3 用輾轉相除法求兩個正整數的最大公因子 138
習題4.2 141
4.3 遞歸 144
4.3.1 階乘的遞歸計算 144
4.3.2 漢諾塔 147
4.3.3 台階問題 150
習題4.3 151
4.4 模擬算法 152
4.4.1 產品隨機抽樣 153
4.4.2 用蒙特卡洛法求的近似值 156
4.4.3 事件步長法——中子擴散問題 157
4.4.4 時間步長法——鹽水池問題 159
習題4.4 163
第5單元 數組 166
5.1 一維數組 166
5.1.1 數組類型的特徵 166
5.1.2 數組的定義 167
5.1.3 數組的初始化 168
5.1.4 下標變數 169
5.1.5 變長數組與常量數組 170
5.2 排序與查找 171
5.2.1 直接選擇排序 171
5.2.2 冒泡排序 173
5.2.3 二分查找 176
5.3 二維數組 177
5.3.1 二維數組的概念 177
5.3.2 二維數組的初始化 178
5.3.3 訪問二維數組元素 180
5.4 字元串 181
5.4.1 字元串字面量 181
5.4.2 字元數組與C字元串變數 182
5.4.3 字元串的輸入與輸出 183
5.4.4 字元串操作的庫函式 186
習題5 189
第6單元 可定製數據類型 195
6.1 構造體類型 195
6.1.1 構造體類型的特徵與定製 195
6.1.2 用typedef定義類型的別名 196
6.1.3 構造體變數 197
6.1.4 構造體變數的分量及其操作 200
6.1.5 構造體數組 201
6.1.6 複合字面量 204
6.2 共用體類型 205
6.2.1 共用體類型的定製及其變數的定義 205
6.2.2 共用體類型與構造體類型的比較 206
6.2.3 共用體變數的套用舉例 208
6.3 枚舉類型 210
6.3.1 枚舉類型及其定義 210
6.3.2 枚舉變數及其聲明 211
6.3.3 對枚舉變數和枚舉元素的操作 211
6.3.4 用枚舉為類提供整型符號常量名稱 212
習題6 212
第7單元 指針 220
7.1 指針類型與指針變數 220
7.1.1 指針及其聲明 220
7.1.2 同類型指針間的賦值與判等操作 221
7.1.3 指針的遞引用 223
7.1.4 void指針 224
7.1.5 用const限定指針 224
習題7.1 225
7.2 數組與指針 230
7.2.1 數組名具有退化的左值性 230
7.2.2 下標表達式的指針性質 231
7.2.3 指針與字元串 233
7.2.4 二維數組與指針 235
習題7.2 237
7.3 函式與指針 243
7.3.1 指針作為函式參數 243
7.3.2 帶參主函式 250
7.3.3 返回指針值的函式 251
7.3.4 函式類型與指向函式的指針 252
習題7.3 258
7.4 指向構造體的指針與鍊表 262
7.4.1 指向構造體類型變數的指針 262
7.4.2 鍊表及其特點 263
7.4.3 構建鍊表 264
習題7.4 266
7.5 動態存儲分配 270
7.5.1 申請需要的存儲空間 270
7.5.2 釋放一個指針指向的存儲空間 272
7.5.3 修改一個指針指向的存儲空間大小 273
7.5.4 構建動態鍊表 273
7.5.5 帶有彈性數組成員的構造體 277
習題7.5 278
第8單元 算法設計進階* 280
8.1 分治策略 280
8.1.1 快速排序 280
8.1.2 腳踏車帶人問題 283
習題8.1 286
8.2 回溯策略 288
8.2.1 迷宮問題 289
8.2.2 八皇后問題 292
習題8.2 294
8.3 貪心策略 296
8.3.1 旅行費用問題 296
8.3.2 刪數問題 299
習題8.3 301
8.4 動態規劃 303
8.4.1 動態規劃概述 303
8.4.2 點數值三角形的最優路徑 305
8.4.3 背包問題 307
習題8.4 311
第9單元 語海拾貝 314
9.1 外部變數 314
9.1.1 外部變數及其定義 314
9.1.2 外部變數的連結性 314
9.1.3 外部變數的風險 319
9.2 帶參宏 319
9.2.1 帶參宏的基本定義格式 319
9.2.2 使用帶參宏的注意事項 320
9.2.3 帶參宏與函式的比較 321
9.3 內聯函式 322
9.3.1 內聯函式的概念 322
9.3.2 內聯函式的定義 323
9.3.3 內聯函式的限制 323
9.4 數據檔案 324
9.4.1 數據檔案及其分類 324
9.4.2 FILE類型及其指針 325
9.4.3 數據檔案操作的一般過程 326
9.4.4 程式示例 330
9.5 位操作與位段 331
9.5.1 按位邏輯運算 332
9.5.2 移位運算 333
9.5.3 位段 334
習題9 336
附錄A C語言運算符的優先權和結合方向 344
附錄B C語言的關鍵字 345
附錄C 格式化輸出函式printf的格式 346
C.1 printf格式參數的結構 346
C.2 printf格式符 346
C.3 長度修飾符 347
C.4 域寬與精度說明 348
C.5 格式前綴修飾符 348
附錄D 格式化輸入函式scanf的格式 349
D.1 scanf指針參數 349
D.2 scanf格式參數的結構 349
D.2.1 格式參數字元串的結構 349
D.2.2 基本格式符和長度修正 349
D.2.3 欄位寬度 350
D.3 scanf的停止與返回 351
D.4 數值數據的輸入控制 351
D.5 字元型數據的輸入控制 351
D.5.1 在格式欄位前添加空格使格式欄位可以跳過空白字元 351
D.5.2 用掃描集控制字元數組的讀入 351
附錄E 編譯預處理命令 352
E.1 宏定義 352
E.2 檔案包含 352
E.3 條件編譯 352
附錄F C標準庫頭檔案 353
附錄G C語言常用的標準庫函式 354
G.1 數學函式 354
G.2 字元函式和字元串函式 355
G.3 輸入與輸出函式 356
G.4 動態記憶體分配函式 357
G.5 退出程式函式 358
G.6 數值轉換函式 358
G.7 時間和日期函式 358
附錄H C99、C89與K&R C 主要內容的比較 360
參考文獻 361