C語言從入門到精通, 4/e
內容描述
本書以零基礎入門為宗旨,用範例引導讀者學習,深入淺出地介紹了C語言的相關知識和實戰技能。
本書第Ⅰ篇【基礎知識】主要講解步入C語言的世界—Hello C、C程序的結構、C語言的基本構成元素、變量、數制、數據類型、運算符和表達式、算法、順序結構與選擇結構、循環結構與轉向語句、數組以及字符數組和字符串等;第Ⅱ篇【核心技術—函數】主要講解函數、變量的作用範圍和存儲類型、庫函數、結構體和聯合體、枚舉等;第Ⅲ篇【高級應用—指針及文件】主要介紹指針、指針與數組、指針與函數、指針與字符串、指針與結構體、指針的高級應用與技巧以及文件等;第Ⅳ篇【數據結構及C語言中的常用算法】主要介紹數據結構、C語言中的高級算法、數學問題算法、排序問題算法、查找問題算法以及算法競賽實例等;第Ⅴ篇【趣味解題】主要介紹歌手比賽評分系統、哥德巴赫猜想、打印日歷、背包問題、火車車廂重排、商人過河以及K階斐波那契數列的實現等。
本書提供了與圖書內容全程同步的教學錄像。此外,還贈送了大量相關的學習資料,以便讀者擴展學習。
本書適合任何想學習C語言的讀者,無論你是否從事電腦相關行業、是否接觸過C語言,均可通過學習本書快速掌握C語言的開發方法和技巧。
目錄大綱
第0章學習攻略
0.1編程的魔力002
0.2 C語言的起源及特點002
0.3 C語言的用途004
0.4 C語言實現的人機交互004
0.5 C語言的學習方法005
第Ⅰ篇基礎知識
第1章步入C語言的世界——Hello C
1.1 C語言的開發環境009
1.1.1 C語言常用的開發環境009
1.1.2 Code::Blocks開發環境010
1.1.3手機編譯器011
1.2開始C編程—我的第一個C程序012
1.2.1程序編寫及運行流程012
1.2.2在Code::Blocks中開發C程序013
1.2.3在手機編譯器中開發C程序015
1.3高手點撥016
1.4實戰練習016
第2章C程序的結構
2.1引例018
2.2聲明區018
2.2.1頭文件018
2.2.2函數聲明019
2.2.3變量聲明019
2.3主函數020
2.4函數定義區020
2.5註釋021
2.6書寫代碼的規則021
2.7高手點撥022
2.8實戰練習022
第3章C語言的基本構成元素
3.1標識符和關鍵字024
3.1.1標識符024
3.1.2關鍵字024
3.2常量024
3.3常量的類別025
3.3.1數值常量025
3.3.2字符常量026
3.3.3字符串常量028
3.3.4符號常量028
3.4綜合應用——常量與符號常量028
3.5高手點撥029
3.6實戰練習030
第4章變量
4.1變量概述032
4.1.1變量的定義032
4.1.2變量的定義與聲明033
4.2變量的初始化和賦值033
4.3變量的輸入和輸出034
4.3.1格式化輸出函數——printf() 034
4.3.2格式控制符035
4.3.3格式化輸入函數——scanf() 040
4.4字符的輸入和輸出042
4.4.1字符輸出函數——putchar() 043
4.4.2字符輸入函數——getchar() 043
4.5綜合應用——對變量的操作044
4.6高手點撥046
4.7實戰練習046
第5章計算機中的數制系統
5.1二進制048
5.2八進制049
5.3十進制049
5.4十六進制050
5.5數制間的轉換050
5.6綜合應用——數制轉換051
5.7高手點撥052
5.8實戰練習052
第6章數據的種類——數據類型
6.1數據類型的分類054
6.1.1基本類型054
6.1.2構造類型054
6.1.3指針類型054
6.1.4空類型054
6.2整型055
6.3字符型057
6.4浮點型059
6.5類型轉換060
6.5.1隱式轉換060
6.5.2顯式轉換061
6.6綜合應用——數據類型轉換062
6.7高手點撥063
6.8實戰練習064
第7章C語言中的運算符和表達式
7.1運算符和表達式066
7.1.1運算符066
7.1.2表達式066
7.2算術運算符和表達式067
7.2.1算術運算符067
7.2.2算術表達式067
7.2.3應用舉例067
7.3關係運算符和表達式069
7.3.1關係運算符069
7.3.2關係表達式069
7.3.3應用舉例069
7.4邏輯運算符和表達式070
7.4.1邏輯運算符070
7.4.2邏輯表達式071
7.4.3應用舉例071
7.5條件運算符和表達式073
7.6賦值運算符和表達式074
7.6.1賦值運算符074
7.6.2賦值表達式074
7.6.3應用舉例075
7.7自增、自減運算符076
7.8逗號運算符和表達式077
7.9位運算符078
7.9.1按位與運算符078
7.9.2按位或運算符079
7.9.3按位異或運算符079
7.9.4按位取反運算符080
7.9.5左移運算符080
7.9.6右移運算符081
7.9.7位運算賦值運算符082
7.9.8位運算應用082
7.10運算符的優先級和結合性085
7.10.1算術運算符085
7.10.2關係運算符085
7.10.3邏輯運算符085
7.10.4賦值運算符085
7.11綜合應用——條件運算符的應用086
7.12高手點撥087
7.13實戰練習088
第8章程序的靈魂——算法
8.1算法概述090
8.1.1算法的定義090
8.1.2算法的特性090
8.1.3簡單算法舉例——解方程091
8.2如何表示一個算法092
8.2.1自然語言表示算法092
8.2.2流程圖表示算法094
8.2.3 NS流程圖表示算法098
8.2.4偽代碼表示算法100
8.2.5計算機語言表示算法101
8.3結構化程序設計方法101
8.4衡量程序質量的標準102
8.5綜合應用——求解一元二次方程的根103
8.6高手點撥104
8.7實戰練習104
第9章順序結構與選擇結構
9.1語句106
9.1.1表達式語句106
9.1.2控制語句106
9.1.3空語句和復合語句106
9.1.4函數調用語句107
9.2順序結構107
9.3選擇結構109
9.3 .1選擇結構的定義109
9.3.2二分支選擇結構——if語句109
9.3.3二分支選擇結構——if-else語句111
9.3.4二分支選擇結構——if-else的嵌套形式112
9.3.5多分支選擇結構——switch語句116
9.4綜合應用—計算獎金118
9.5高手點撥119
9.6實戰練習120
第10章循環結構與轉向語句
10.1循環結構122
10.1.1循環結構的定義122
10.1.2 for語句123
10.1.3 while語句126
10.1.4 do-while語句127
10.1.5循環的嵌套129
10.2轉向語句132
10.2.1 goto語句132
10.2.2 break語句133
10.2.3 continue語句135
10.3綜合應用——簡單計算器的設計136
10.4高手點撥138
10.5實戰練習138
第11章數組
11.1數組概述140
11.2一維數組140
11.2.1一維數組的定義140
11.2 .2一維數組的初始化142
11.2.3一維數組元素的引用143
11.2.4一維數組的應用舉例145
11.3二維數組147
11.3.1二維數組的定義148
11.3.2二維數組的初始化148
11.3.3二維數組元素的引用149
11.3.4二維數組的應用舉例149
11.4綜合應用——楊輝三角151
11.5高手點撥152
11.6實戰練習153
第12章字符數組和字符串
12.1字符數組概述156
12.2字符數組156
12.2.1字符數組的定義156
12.2.2字符數組的初始化156
12.2.3字符數組的引用157
12.2 .4字符數組的輸入與輸出157
12.3字符串158
12.3.1字符串和字符數組159
12.3.2字符串的輸入和輸出160
12.3.3字符串應用舉例162
12.4綜合應用——自動分類字符164
12.5高手點撥165
12.6實戰練習166
第Ⅱ篇核心技術——函數
第13章函數
13.1函數概述169
13.1.1什麼是函數169
13.1.2函數的分類170
13.2函數功能171
13.3函數的返回值及類型173
13.3 .1函數的返回值173
13.3.2函數返回值的類型174
13.4函數的參數及傳遞方式177
13.4.1函數的參數177
13.4.2函數參數的傳遞方式179
13.4.3帶參數的主函數182
13.5函數的調用183
13.5.1函數調用方式184
13.5.2函數的聲明185
13.5.3函數的嵌套調用187
13.5.4函數的遞歸調用188
13.6內部函數和外部函數193
13.6.1內部函數193
13.6.2外部函數193
13.7綜合應用——用截弦法求方程的根195
13.8高手點撥196
13.9實戰練習197
第14章變量的作用範圍和存儲類型
14.1變量的作用範圍200
14.1.1局部變量200
14.1.2全局變量201
14.2變量的存儲類型203
14.2.1自動類型204
14.2.2寄存器類型204
14.2. 3靜態類型205
14.2.4外部類型207
14.3綜合應用——根據日期判斷是該年第幾天208
14.4高手點撥209
14.5實戰練習210
第15章庫函數
15.1 C標準函數庫212
15.2數學函數212
15.2.1 對值函數213
15.2.2冪函數和開平方函數213
15.2.3指數函數和對數函數214
15.2.4三角函數214
15.2.5取整函數和取餘函數215
15.3字符串處理函數216
15.3.1字符串長度函數216
15.3.2字符串連接函數216
15.3.3字符串複製函數217
15.3.4字符串比較函數218
15.3.5字符串查找函數219
15.3.6字符串填充函數220
15.4字符處理函數220
15.4.1字符類型判斷函數221
15.4.2字符大小寫轉換函數222
15.5數據類型轉換和存儲管理函數222
15.5 .1數據類型轉換函數222
15.5.2存儲管理函數223
15.6隨機函數225
15.6.1初識隨機函數225
15.6.2使用隨機函數226
15.7日期和時間處理函數227
15.8診斷函數228
15.9其他函數229
15.9.1 exit()函數229
15.9.2 qsort()函數230
15.10綜合應用——猜數字遊戲231
15.11高手點撥233
15.12實戰練習233
第16章結構體和聯合體
16.1結構體236
16.1.1結構體類型的定義236
16.1.2結構體變量的定義236
16.1.3結構體變量的初始化237
16.1.4結構體變量的引用238
16.2結構體數組238
16.2.1結構體數組的定義239
16.2.2結構體數組的初始化239
16.2.3結構體數組元素的引用240
16.3結構體與函數241
16.3.1結構體變量作為函數的參數——傳值調用方式241
16.3.2結構體作為函數的返回值242
16.4聯合體243
16.4.1聯合體類型的定義243
16.4.2聯合體變量的定義244
16.4.3聯合體變量的初始化244
16.4.4聯合體變量的引用246
16.5結構體和聯合體的區別與聯繫247
16.6綜合應用——計算學生平均成績247
16.7高手點撥249
16.8實戰練習249
第17章枚舉
17.1枚舉類型252
17.1.1枚舉類型的定義252
17.1.2枚舉類型的應用253
17.2高手點撥254
17.3實戰練習254
第Ⅲ篇級應用——指針及文件
第18章指針
18.1指針概述257
18.1.1指針類型的變量和定義257
18.1.2指針所指向變量的類型257
18.1.3指針的值257
18.1.4指針所佔內存257
18.2指針的算術運算258
18.2.1指針與整數的運算258
18.2.2指針與指針的運算259
18.3 &和運算符260
18.4指針表達式262
18.5綜合應用——使用指針進行排序262
18.6高手點撥263
18.7實戰練習263
第19章指針與數組
19.1數組指針266
19.2數組指針作為函數參數266
19.3指針與字符數組267
19.4指針數組與指針的指針267
19.5綜合應用——報數遊戲(約瑟夫環) 269
19.6高手點撥270
19.7實戰練習270
第20章指針與函數
20.1函數指針272
20.1.1函數指針的定義272
20.1.2函數指針的賦值272
20.1.3通過函數指針調用函數272
20.2指針函數273
20.3指向函數的指針作為函數參數275
20.4綜合應用——根據當年第幾天輸出該天的日期276
20.5高手點撥277
20.6實戰練習278
第21章指針與字符串
21.1字符串指針280
21.1.1字符串指針的定義280
21.1.2字符串指針的應用281
21.2字符串指針作為函數參數284
21.3字符串指針與字符數組的區別285
21.4綜合應用——“回文”問題286
21.5實戰練習287
第22章指針與結構體
22.1結構體指針290
22.1.1結構體指針的定義290
22.1.2結構體指針的初始化290
22.1.3使用指針訪問結構體成員290
22.1.4給結構體指針賦值291
22.2指向結構體數組的指針292
22.3結構體指針作為函數參數294
22.4綜合應用——利用結構體創建單鍊錶295
22.5高手點撥296
22.6實戰練習296
第23章指針的級應用與技巧
23.1指向指針的指針298
23.2 void指針299
23.3內存操作301
23.4指針的傳遞304
23.5綜合應用——數值的降序排列304
23.6高手點撥305
23.7實戰練習306
第24章文件
24.1文件概述308
24.1.1文件類型308
24.1.2 C如何操作文件——文件指針308
24.1.3文件緩衝區309
24.2文件的打開和關閉309
24.2.1文件的打開函數——fopen() 309
24.2.2文件的關閉函數——fclose( ) 310
24.2.3文件結束檢測函數——feof() 311
24.3文件的順序讀寫311
24.3.1文本文件中字符的輸入/輸出311
24.3.2文本文件中字符串的輸入/輸出313
24.3.3文本文件中數據的格式化輸入/輸出315
24.3.4二進製文件的輸入/輸出——數據塊讀寫317
24.4文件的隨機讀寫319
24.5綜合應用——文件操作320
24.6高手點撥321
24.7實戰練習322
第Ⅳ篇數據結構及C語言中的常用算法
第25章數據管理者——數據結構
25.1數據結構概述325
25.1.1邏輯結構325
25.1.2存儲結構326
25.1.3數據的運算326
25.2線性表326
25.2.1線性表的定義326
25.2.2線性表的主要操作327
25.2.3順序表327
25.2.4單鍊錶329
25.3棧332
25.3.1棧的定義332
25.3.2棧的主要操作333
25.3.3順序棧333
25.3.4鍊式棧333
25.4隊列334
25.4.1隊列的定義334
25.4.2隊列的主要操作334
25.4.3順序隊列334
25.4.4鏈隊列335
25.5樹和二叉樹335
25.5.1樹和二叉樹的定義336
25.5.2二叉樹的主要操作336
25.5.3二叉樹的存儲表示336
25.5.4二叉樹的遍歷338
25.6圖338
25.6.1圖的定義338
25.6.2圖的主要操作338
25.6.3圖的存儲表示338
25.6.4圖的遍歷339
25.7綜合應用——鍊錶的反轉342
25.8高手點撥343
25.9實戰練習344
第26章C語言中的級算法
26.1模擬算法346
26.2簡單動態規劃347
26.3用遞歸實現回溯算法350
26.4 短路徑算法352
26.4.1只有五行的算法——Floyd-Warshall 352
26.4.2 Dijkstra算法——單源短邊352
26.4.3 Bellman-Ford算法——解決負權邊353
26.4.4 Bellman-Ford的隊列優化算法353
26.4.5 短路徑算法對比分析353
26.5分治算法356
26.6貪心算法358
26.7綜合應用——鏢局運鏢359
26.8高手點撥361
26.9實戰練習361
第27章數學問題算法
27.1質因數分解364
27.2 *大公約數的歐幾里得算法365
27.3加法原理與乘法原理366
27.4排列與組合367
27.5綜合應用——進站方案368
27.6高手點撥369
27.7實戰練習370
第28章排序問題算法
28.1插入排序法372
28.2選擇排序法373
28.3冒泡排序法375
28.4快速排序法376
28.5桶排序法378
28.6高手點撥379
28.7實戰練習380
第29章查找問題算法
29.1順序查找法382
29.2折半查找法384
29.3高手點撥386
29.4實戰練習386
第30章算法競賽實例
30.1 Hilbert曲線388
30.2四色問題390
30.3跳馬問題391
30.4生成全部排列及其應用392
30.5貪吃蛇遊戲393
30.6幻方394
30.7高精度計算395
30.8高手點撥396
30.9實戰練習396
第Ⅴ篇趣味解題
第31章歌手比賽評分系統
31.1問題描述399
31.2問題分析及實現399
31.2.1問題分析399
31.2.2問題實現399
31.2.3程序運行403
31.3開發過程常見問題及解決方案406
第32章哥德巴赫猜想
32.1問題描述408
32.2問題分析及實現408
32.2.1問題分析408
32.2.2問題實現408
32.2.3程序運行410
32.3開發過程常見問題及解決方案410
第33章打印日曆
33.1問題描述412
33.2問題分析及實現412
33.2.1問題分析412
33.2.2問題實現412
33.2.3程序運行413
33.3開發過程常見問題及解決方案414
第34章背包問題
34.1問題描述416
34.2問題分析及實現416
34.2.1問題分析416
34.2.2問題實現416
34.2.3程序運行419
34.3開發過程常見問題及解決方案419
第35章火車車廂重排
35.1問題描述422
35.2問題分析及實現422
35.2.1問題分析422
35.2.2問題實現422
35.2.3程序運行425
35.3開發過程常見問題及解決方案426
第36章商人過河
36.1問題描述428
36.2問題分析及實現428
36.2.1問題分析428
36.2 .2問題實現428
36.2.3程序運行430
36.3開發過程常見問題及解決方案430
第37章K階斐波那契數列的實現
37.1問題描述432
37.2問題分析及實現432
37.2.1問題分析432
37.2. 2問題實現432
37.2.3程序運行433
37.3開發過程常見問題及解決方案434
作者介紹
李嵐,工學碩士,*級工程師,現執教於河南工業大學信息科學與工程學院,在學校常年承擔程序設計基礎課程的教學任務,對C語言的知識結構及應用有深入了解,能夠準確把握學生在學習C語言過程中的主要問題和困惑。
主要研究方向為軟件工程、信息系統,有豐富的MIS系統開發經驗,主編或者參編教材5本,獲河南省教育廳教學成果二等獎2項,獲河南省科技進步三等獎2項。