本書是華中科技大學“C語言程式設計”精品課的主教材。本書力圖完整、全面、清楚地介紹C語言的基本語法和語義,同時通過對一些精心提煉的算法實例進行分析和編程設計,培養學生算法設計、程式設計、調試程式的能力。全書分為上、下兩篇,共18章,另外提供了3個附錄。上篇是C語言,包括第1章至第10章,內容主要有概論、基本詞法語法規則與程式元素、基本的標準輸入與輸出、流程控制、函式與程式結構、編譯預處理、數組、指針、結構與聯合、檔案的輸入與輸出。下篇是程式設計,包括第11章至第18章,深入介紹了複雜類型的指針、遞歸、排序、線性數據結構、非線性數據結構、參數數目可變的函式與庫函式、圖形圖像處理程式設計、程式設計開發實例。為方便教學,本書配有電子課件和源程式代碼,任課教師可以登錄華信教育資源網(www.hxedu.com.cn)免費註冊下載。
基本介紹
- 中文名:高等學校規劃教材:C語言與程式設計
- 出版社:電子工業出版社
- 頁數:435頁
- 開本:16
- 品牌:電子工業出版社
- 作者:曹計昌 盧萍
- 出版日期:2013年1月1日
- 語種:簡體中文
- ISBN:9787121190391
內容簡介
圖書目錄
第1章概論1
1.1程式設計語言與程式設計1
1.2學習C語言程式設計的第一個例子1
1.2.1創建並運行第一個C程式2
1.2.2解釋分析第一個C程式3
1.3C語言的產生、發展與語言特徵4
1.3.1C語言的產生與發展4
1.3.2C語言的標準化5
1.3.3C語言的特徵6
1.4計算機系統及記憶體編址7
1.5數和字元的編碼表示8
1.5.1進位計數制9
1.5.2進位制數之間的轉換11
1.5.3數的機器碼錶示13
1.5.4字元的編碼表示14
1.6算法及其表示15
1.6.1算法的定義15
1.6.2算法的表示16
1.6.3算法的實現18
1.7學習C語言與程式設計的方法18
本章小結20
習題120
第2章基本詞法語法規則與程式元素21
2.1字元及詞法元素21
2.1.1字元集21
2.1.2詞法元素21
2.2語法規則22
2.2.1BNF範式22
2.2.2EBNF23
2.2.3語法圖23
2.3標識符、關鍵字及分隔設定24
2.3.1標識符24
2.3.2關鍵字24
2.3.3分隔設定25
2.4基本數據類型25
2.4.1數據類型的分類25
2.4.2基本類型的名字25
2.4.3字元類型26
2.4.4整型類型26
2.4.5浮點類型27
2.5常量與變數28
2.5.1文字常量28
2.5.2符號常量31
2.5.3變數定義33
2.6運算符和表達式33
2.6.1C運算符簡介33
2.6.2運算符的優先權和結合性34
2.6.3算術運算35
2.6.4關係運算35
2.6.5邏輯運算36
2.6.6自增和自減運算37
2.6.7賦值運算39
2.6.8條件運算40
2.6.9逗號運算40
2.6.10sizeof運算41
2.7位運算符和位表達式42
2.7.1按位求反(~)42
2.7.2按位與、或、加運算
(&,|,^)42
2.7.3左移和右移運算(<>)42
2.7.4位運算符套用舉例43
2.7.5列印整數各位44
2.8類型轉換45
2.8.1整數提升45
2.8.2算術轉換45
2.8.3賦值轉換46
2.8.4強制類型轉換46
2.9枚舉類型47
2.9.1枚舉類型的定義47
2.9.2用枚舉類型定義符號常量48
2.9.3.枚舉變數的聲明48
2.10新增數據類型49
2.10.1longlong類型49
2.10.2布爾類型49
2.10.3複數類型50
本章小結51
習題252
第3章基本的標準輸入與輸出54
3.1字元輸入與輸出54
3.1.1字元輸出函式putchar54
3.1.2字元輸入函式getchar55
3.2字元串輸入與輸出57
3.2.1字元串輸出函式puts57
3.2.1字元串輸入函式gets57
3.3格式化輸入與輸出58
3.3.1格式化輸出函式printf58
3.3.2格式化輸入函式scanf62
本章小結70
習題370
第4章流程控制72
4.1C語句分類72
4.2表達式語句72
4.3複合語句73
4.4if語句74
4.5switch語句77
4.6while語句80
4.7for語句84
4.8do—while語句87
4.9goto語句和標號語句92
4.10break語句、continue語句和
return語句94
4.11嵌套循環程式設計97
4.11.1嵌套循環97
4.11.2枚舉100
4.11.3篩法101
4.11.4遞推101
本章小結102
習題4102
第5章函式與程式結構104
5.1C程式的一般結構104
5.1.1結構化程式設計104
5.1.2蒙特卡羅模擬:猜數遊戲104
5.1.3C程式的結構108
5.2函式的定義與函式原型108
5.2.1函式的定義108
5.2.2函式的返回值109
5.2.3函式的聲明110
5.2.4新增關鍵字inline和_Noreturn111
5.3函式調用與參數傳遞112
5.3.1函式調用112
5.3.2參數的值傳遞114
5.4作用域與可見性115
5.4.1局部變數和全局變數115
5.4.2作用域規則117
5.4.3可見性118
5.5存儲類型118
5.5.1存儲類型auto118
5.5.2存儲類型extern119
5.5.3存儲類型static120
5.5.4存儲類型register123
5.5.5新增存儲類型_Thread_local123
本章小結124
習題5124
第6章編譯預處理126
6.1檔案包含#include126
6.2宏定義#define126
6.2.1無參宏定義127
6.2.2帶參宏定義127
6.2.3空宏參數128
6.2.4可變參數宏定義128
6.2.5通用類型宏129
6.3取消宏定義#undef130
6.4條件編譯130
6.4.1#if、#ifdef和#ifndef指令130
6.4.2defined運算符131
6.4.3條件編譯的套用132
6.5assert斷言和靜態斷言133
6.5.1assert斷言133
6.5.2靜態斷言133
6.6_func_預定義標識符134
6.7_Pragma預處理操作符134
本章小結134
習題6135
第7章數組136
7.1數組概述136
7.2一維數組136
7.2.1一維數組的聲明137
7.2.2一維數組的使用138
7.2.3一維數組的初始化138
7.2.4一維數組的存儲結構139
7.2.5一維數組的運算139
7.2.6一維數組作為函式參數140
7.3字元數組141
7.3.1字元數組的聲明和使用141
7.3.2字元數組的初始化142
7.4字元串處理函式142
7.4.1串操作函式的設計及使用143
7.4.2數字串與數值之間轉換
的函式146
7.4.3C11標準中新增的Unicode
字元集和Unicode字元串148
7.5多維數組149
7.5.1多維數組的聲明與使用150
7.5.2多維數組的存儲結構151
7.5.3多維數組的初始化152
7.5.4二維字元數組153
7.6數組的套用154
7.6.1矩陣乘法運算154
7.6.2基於分治策略的二分查找
函式155
7.6.3逆波蘭表達式的生成156
7.6.4利用值棧對逆波蘭表達式進行
求值158
本章小結160
習題7160
第8章指針162
8.1指針的概念與使用162
8.1.1指針的概念162
8.1.2指針的聲明163
8.1.3指針的使用164
8.2指針運算167
8.2.1指針的算術運算167
8.2.2指針的賦值運算和關係運算168
8.3指針作為函式的參數169
8.3.1形參指針對實參變數的影響169
8.3.2指針作為函式形參的套用171
8.4數組的指針表示171
8.4.1一維數組的指針表示172
8.4.2一維數組參數的指針表示174
8.4.3用指向數組基本元素的指針
表示多維數組175
8.4.4高精度計算——超長整數
加法運算176
8.5指針數組177
8.5.1指針數組的聲明及使用177
8.5.2多重指針182
8.6帶參數的main函式182
8.6.1命令行參數182
8.6.2帶參main函式的聲明及使用183
8.7指針函式184
8.7.1指針函式的聲明與定義184
8.7.2指針函式的使用185
8.8函式的指針185
8.8.1函式指針的聲明185
8.8.2函式指針的套用186
8.9restrict和_Atomic類型修飾符188
8.9.1restrict類型修飾符188
8.9.2_Atomic類型修飾符189
本章小結190
習題8190
第9章結構與聯合192
9.1結構概述192
9.2結構類型聲明和結構變數的聲明
及初始化192
9.2.1結構類型的聲明192
9.2.2結構變數的聲明194
9.2.3結構變數的初始化196
9.3結構類型的引用196
9.3.1結構變數的引用197
9.3.2通過成員選擇運算符“.”
訪問成員197
9.3.3嵌套結構的聲明198
9.3.4嵌套結構中結構成員的成員
訪問199
9.4結構類型的指針200
9.4.1結構指針的聲明和賦值200
9.4.2通過“*”用結構指針訪問
結構變數的成員201
9.4.3通過成員選擇運算符“?>”
訪問結構變數的成員202
9.5結構類型作為函式的參數和返
回值204
9.5.1結構成員或結構變數作為函式
的參數204
9.5.2結構成員或結構變數作為函式
的返回值205
9.5.3結構類型的指針作為函式的
參數或函式的返回值207
9.6結構數組208
9.6.1結構數組的聲明及初始化208
9.6.2結構數組的使用209
9.6.3用結構的指針引用結構數組
元素的成員210
*9.6.4結構數組作為函式的參數211
9.7聯合213
9.7.1聯合類型的定義213
9.7.2聯合變數的聲明、初始化及
聯合成員的引用213
9.8欄位結構215
9.8.1欄位結構類型的定義215
9.8.2欄位結構類型變數的聲明及
成員的引用216
9.8.3欄位結構與聯合的套用217
本章小結218
習題9218
第10章檔案的輸入與輸出220
10.1檔案概述220
10.1.1檔案的概念220
10.1.2文本檔案220
10.1.3二進制檔案221
10.1.4檔案的讀寫方式221
10.1.5C程式輸入與輸出的實現
方法222
10.2FILE指針和標準流式檔案223
10.2.1FILE結構類型223
10.2.2FILE指針223
10.2.3標準流式檔案224
10.3流式檔案的順序輸入與輸出224
10.3.1檔案的打開與關閉224
10.3.2檔案的重定向226
10.3.3基於字元的檔案讀寫227
10.3.4基於字元串的檔案讀寫229
10.3.5檔案的格式讀寫230
10.3.6檔案的直接輸入輸出233
10.3.7命令執行函式235
10.3.8C11標準中新增關於檔案操作
的語言成分235
10.4流式檔案的隨機輸入輸出237
10.4.1檔案定位函式237
10.4.2檔案的隨機讀寫238
10.5其他檔案操作函式241
10.5.1檔案訪問函式241
10.5.2檔案操作函式242
10.5.3出錯檢測處理函式243
10.6輸入輸出的底層接口243
10.6.1檔案的順序輸入輸出243
10.6.2檔案的隨機輸入輸出245
本章小結248
習題10248
下篇程式設計
第11章複雜類型的指針250
11.1指向數組的指針250
11.1.1指向數組的指針的聲明
與定義250
11.1.2用數組名間訪多維數組
的元素251
11.1.3用指向數組的指針表示多維
數組253
11.1.4多維數組參數的指針表示255
11.2用typedef定義類型表達式257
11.2.1類型表達式258
11.2.2用typedef定義類型表達式258
11.3複雜說明的解釋259
11.4複雜說明的套用260
本章小結263
習題11264
第12章遞歸265
12.1遞歸概述265
12.2遞歸函式設計266
12.2.1字元串的遞歸處理266
12.2.2漢諾塔問題267
12.2.3排列問題268
12.3分治法與快速排序269
12.4回溯法271
12.4.1解空間與算法步驟271
12.4.20—1背包問題272
12.4.3裝載問題274
12.5動態規劃276
12.5.1動態規划算法的基本步驟276
12.5.20—1背包問題的動態規劃
算法277
12.5.3挖地雷問題279
12.6經典問題的遞歸程式設計281
12.6.1填字遊戲281
12.6.2深度優先搜尋:騎士遊歷
問題283
本章小結285
習題12285
第13章排序287
13.1直接插入排序287
13.2Shell排序289
13.3歸併排序291
13.4時間複雜度293
13.5排序程式設計296
13.5.1多關鍵字的排序296
13.5.2貪心法298
13.5.3海量數據的排序299
本章小結303
習題13303
第14章線性數據結構305
14.1動態存儲分配305
14.1.1靜態數據結構和動態數據
結構305
14.1.2C語言的動態存儲分配
函式305
14.1.3對象對齊(Alignmentof
Objects)307
14.2動態數組設計308
14.3鍊表310
14.3.1自引用結構310
14.3.2動態創建結點311
14.3.3單向鍊表312
14.3.4鍊表的相關操作314
14.3.5雙向鍊表320
14.3.6十字交叉鍊表323
14.4堆疊329
14.4.1線性表與堆疊329
14.4.2用鍊表實現堆疊329
14.5佇列與廣度優先搜尋332
14.5.1佇列的概念332
14.5.2基於結構數組的循環佇列332
14.5.3用基於鍊表的佇列實現廣度
優先搜尋333
本章小結336
習題14336
第15章非線性數據結構338
15.1樹與二叉樹338
15.1.1樹與二叉樹的概念338
15.1.2二叉樹的創建與操作339
15.1.3二叉搜尋樹342
15.1.4二叉樹的套用345
15.2查找表與哈希(散列)函式347
15.2.1符號表的概念與哈希函式347
15.2.2實現簡單宏替換的查找表348
15.3圖351
15.3.1圖的概念351
15.3.2圖的存儲結構與鄰接表352
15.3.3圖的深度優先遍歷與廣度
優先遍歷354
15.3.4圖的路徑搜尋359
15.4圖的套用361
15.4.1生成樹與最小生成樹361
15.4.2基於Kruskal算法求解最小
生成樹362
15.4.3基於Prim算法求解最小生
成樹366
15.4.4最短路問題368
15.4.5基於Dijkstr算法求解單源最
短路徑369
本章小結374
習題15374
第16章參數數目可變的函式與庫函式376
16.1參數數目可變的函式設計376
16.1.1參數數目可變函式的定義376
16.1.2myprintf函式的實現377
16.2Linux下用戶自定義庫的設計
及使用380
16.2.1allocation庫的設計380
16.2.2allocation庫的接口定義381
16.2.3allocation庫函式的實現382
16.2.4生成allocation庫檔案385
16.2.5allocation庫的使用385
本章小結386
習題16386
第17章圖形圖像處理程式設計388
17.1點陣圖檔案格式388
17.1.1點陣圖圖像與調色板388
17.1.2bmp檔案格式389
17.2點陣圖檔案的操作391
17.2.1讀寫操作391
17.2.2點陣圖像素數據的訪問392
17.2.3圖像處理393
17.3OpenCV計算機視覺庫397
17.3.1VC6下安裝與配置OpenCV397
17.3.2CodeBlocks下安裝與
配置OpenCV398
17.3.3OpenCV的基本數據結構398
17.3.4常用函式398
17.4OpenCV庫函式的使用400
17.4.1圖像的讀入顯示400
17.4.2滑鼠和滑動條事件的處理400
17.4.3設計電子鐘403
本章小結407
習題17407
第18章程式設計開發實例408
18.1問題描述408
18.2問題分析409
18.2.1問題的數學模型409
18.2.2最短路徑算法411
18.3設計思路412
18.3.1用動態數組代替鍊表413
18.3.2線路序號和線路編號413
18.3.3線路名和站名的存儲413
18.3.4查找表設計414
18.3.5鄰接矩陣的生成414
18.3.6佇列的入隊和出隊操作414
18.3.7最短路徑的標記和輸出415
18.4數據結構設計415
18.4.1捷運線路信息的存儲結構415
18.4.2捷運站信息的存儲結構416
18.4.3鄰接矩陣的存儲結構416
18.4.4輔助存儲單元416
18.5算法設計416
18.5.1程式處理主流程416
18.5.2數據檔案的輸入處理417
18.5.3快速最短路徑算法SPFA418
18.6程式實現418
18.7軟體測試424
本章小結427
習題18427
附錄1ASCII字元編碼表428
附錄2鍵盤編碼表429
附錄3C庫函式432
參考文獻436