零基礎學C語言(第4版)

康莉 李寬

  • 出版商: 機械工業
  • 出版日期: 2020-05-25
  • 定價: $474
  • 售價: 7.9$374
  • 貴賓價: 7.5$356
  • 語言: 簡體中文
  • 頁數: 395
  • 裝訂: 平裝
  • ISBN: 711165496X
  • ISBN-13: 9787111654964
  • 相關分類: C 程式語言
  • 立即出貨 (庫存 < 3)

買這商品的人也買了...

商品描述

本書分為“C語言基礎”“一窺C語言門徑”“C語言進階”
“C語言程序設計實例與面試題解析”四篇,系統全面地介紹了C語言各個方面的知識,
從最簡單的“Hello World”程序寫起,逐步深化、細化,第一篇。
書中對每個知識和技術要點都給出了翔實的示例及代碼分析。
和其他書籍中羅列代碼的做法不同,本書中的代碼力求短小精悍,
直擊要點,避免了細枝末節對讀者思維的干擾。
在講解知識點的同時輔以筆者多年的C語言編程經驗解析,可加深讀者的理解。

目錄大綱

前言
第一篇C語言基礎
第1章踏上征程前的思想動員1
1.1為什麼選擇C語言1
1.2如何學好C語言3
1.3語言概述3
1.3.1什麼是語言3
1.3.2什麼是機器語言3
1.3 .3什麼是彙編語言4
1.3.4面向過程的語言5
1.3.5什麼是C語言5
1.4程序的開發週期5
1.4.1編輯C源代碼6
1.4.2編譯C源代碼6
1.4.3連接目標文件7
1.4.4編譯連接過程示例7
1.4.5運行程序9
1.5 C、C++、VC++的區別和開發環境9
1.6小結11
1.7習題11

第2章跟我寫Hello World 13
2.1了解需求才能創建程序13
2.2認識Code::Blocks開發環境13
2.2.1為什麼選擇Code::Blocks 14
2.2.2啟動Code::Blocks 14
2.2.3新建Hello World項目14
2.2.4定義新項目15
2.2.5添加源代碼到項目16
2.2.6調試器設置16
2.2.7開始編輯代碼17
2.3編譯運行18
2.4調試排錯(debug) 19
2.4.1 debug的由來19
2.4.2設置斷點20
2.4.3調試運行20
2.5第一個程序容易出現的錯誤21
2.5.1包含命令include 21
2.5 .2關鍵字main 22
2.5.3表示代碼行結束的分號22
2.6小結22
2.7習題22

第3章分解Hello World——最簡單C程序的組成24
3.1 C程序的構成24
3.2 C程序的註釋25
3.3 C程序必須有的main函數26
3.4調用函數在屏幕上顯示文字27
3.5 #include預處理器指示符28
3.5.1函數聲明及其作用28
3.5.2試驗尋找#include的作用29
3.5.3 # include的作用30
3.6計算1+1的程序實例31
3.7數據從哪裡來,又到哪裡去——變量32
3.7.1變量在內存中的表現形式32
3.7.2編譯器使用變量符號表32
3.7. 3變量及其使用33
3.8自己設計C函數35
3.8.1在main函數中計算3個整數的平均數35
3.8.2在main函數中分3次計算3個整數的平均數36
3.8.3自編函數實現計算3個整數的平均數36
3.8.4如何自編寫函數37
3.8.5觀察總結函數聲明和函數定義的意義38
3.9語句構成程序39
3.10優秀程序員的代碼風格40
3.11小結40
3.12習題41

第4章常量、變量及數據類型42
4.1計算機是如何表示數據的42
4.1.1二進制、八進制、十六進制42
4.1.2表示數據的字節和位44
4.1.3內存是存儲數據的房間45
4.2數據類型46
4.2.1整數類型46
4.2.2整數的有符號和無符號48
4.2.3實數類型50
4.2.4字符類型50
4.2.5數據類型總結51
4.3常量51
4.3.1直接常量和符號常量52
4.3.2符號常量的優點53
4.3.3直接常量的書寫格式54
4.3.4轉義字符55
4.3.5字符串57
4.4變量58
4.4.1變量的聲明58
4.4.2變量聲明的意義59
4.4.3標識符和關鍵字60
4.4.4變量在內存中佔據的空間和變量的值62
4.4.5為變量賦初值64
4.4.6變量使用時常見的錯誤65
4.5幾個與變量相關的經典算法66
4.5.1累加和累乘66
4.5.2交換兩個變量的值68
4.6小結69
4.7習題69

第5章用屏幕和鍵盤交互——簡單的輸出和輸入71
5.1輸入—處理—輸出:這就是程序71
5.2向屏幕輸出— —printf()函數詳解72
5.2.1 printf()函數的一般形式72
5.2.2 printf()函數的輸出原理73
5.2.3格式控製字符串的一般形式74
5.2.4輸出帶符號的整數%d 75
5.2.5設置最小寬度的輸出75
5.2.6長整型輸出%ld 76
5.2.7輸出八進制形式76
5.2.8輸出十六進制的形式77
5.2.9輸出十進制的unsigned型數據77
5.2. 10輸出字符78
5.2.11輸出字符串%s 79
5.2.12輸出實型數據%f 81
5.2.13輸出指數形式的實數82
5.2.14自動選擇%f或者%e形式輸出%g 83
5.2.15 printf()函數的幾點說明83
5.3字符輸出putchar()和字符串輸出puts() 84
5.3.1字符輸出函數84
5.3.2字符串輸出函數85
5.4接收鍵盤輸入——scanf()函數詳解86
5.4.1 scanf()函數的一般形式86
5.4.2 scanf()函數的輸入原理87
5.4.3多數據輸入分隔規則89
5.4.4控制輸入的格式字符90
5.4.5 scanf()函數的使用說明91
5.4.6使用scanf()函數的注意事項93
5.5字符輸入函數getchar() 95
5.6輸入和輸出程序舉例96
5.7小結98
5.8習題99

第6章程序的基本構成——運算符和表達式100
6.1認識C中的運算符和表達式100
6.1.1運算符和表達式100
6.1.2操作數、運算符和表達式101
6.1.3 C運算符簡介102
6.2算術運算符和算術表達式102
6.2.1基本的算術運算符103
6.2. 2 ++自增、--自減運算符104
6.2.3算術表達式和運算符的優先級及結合性106
6.3逗號運算符和逗號表達式107
6.3.1逗號表達式的一般形式107
6.3. 2逗號表達式的優先級和結合性108
6.4關係運算符和關係表達式109
6.4.1關係運算符的種類109
6.4.2關係表達式的一般形式109
6.5邏輯運算符和邏輯表達式110
6.5.1邏輯運算符111
6.5.2邏輯真值表111
6.6賦值運算符和賦值表達式112
6.6.1賦值表達式112
6.6.2複合運算符113
6.7強制類型轉換和自動類型轉換113
6.7.1強制類型轉換113
6.7.2自動類型轉換115
6.8運算符的優先級116
6.8.1優先級、結合性匯總116
6.8.2 sizeof運算117
6.9取地址運算符117
6.10小結118
6.11習題118

第7章程序的最小獨立單元——語句120
7.1 5種語句類型120
7.1.1表達式語句120
7.1.2函數調用語句122
7.1.3空語句122
7.1.4複合語句(塊語句) 122
7.1.5流程控制語句123
7.2結構化程序設計123
7.2.1什麼是算法123
7.2.2算法的表示123
7.2.3算法的偽代碼表示124
7.2.4算法的流程圖表示124
7.2.5 3種控制結構124
7.2.6算法示例125
7.3小結125
7.4習題126

第8章條件判斷——分支結構127
8.1 if語句127
8.1.1判斷表達式127
8.1.2花括號和if結構體128
8.2 if...else結構129
8.2.1關鍵在else 129
8.2.2 if...else結構體130
8.3多分支語句和分支語句嵌套131
8.3.1多分支131
8.3.2多分支if結構133
8.3.3分支語句嵌套134
8.4 switch結構135
8.4.1一般形式135
8.4.2為什麼叫開關語句137
8.4.3 default語句138
8.4.4 if結構和switch結構之比較139
8.4.5 switch結構的常見錯誤與解決方法139
8.5小結140
8.6習題141

第9章一遍又一遍——循環結構142
9.1構造循環142
9.1.1循環的條件142
9.1.2當型循環和直到型循環143
9.2 while和do...while循環結構143
9.2.1語法規則144
9.2.2代碼塊145
9.2.3 while語句的常見錯誤145
9.2.4 do...while語句的常見錯誤146
9.3 for循環結構147
9.3.1基本形式147
9.3.2表達式省略149
9.3.3循環終止和步長150
9.3.4 for語句的常見錯誤150
9.4循環嵌套151
9.4.1嵌套示例151
9.4.2嵌套的效率152
9.4.3循環嵌套程序的常見錯誤153
9.5與循環密切相關的流程轉向控制語句154
9.5.1用break跳出循環154
9.5.2用continue重來一次155
9.5.3用goto實現跳轉156
9.6小結157
9.7習題157

第二篇一窺C語言門徑
第10章同一類型多個元素的集合——簡單數組159
10.1什麼是數組159
10.1.1數組是一大片連續內存空間159
10.1.2數組元素的訪問160
10.2一維數組160
10.2.1一維數組的聲明160
10.2.2一維數組元素的訪問161
10.2.3一維數組的初始化162
10.2.4不合法的數組操作163
10.3二維數組164
10.3.1二維數組的聲明164
10.3.2二維數組的初始化164
10.3.3二維數組應用舉例165
10.4更高維的數組166
10.4.1高維數組的聲明和元素訪問166
10.4.2初始化166
10.4.3多維數組在內存中是如何排列元素的167
10.5小結168
10.6習題168

第11章寫程序就是寫函數——函數入門170
11.1什麼是函數170
11.1.1函數的由來170
11.1.2 C語言中的函數170
11.2自定義函數171
11.2.1函數定義語法171
11.2.2函數定義範例172
11.2.3不要重複定義173
11.3函數調用與返回173
11.3.1形參和實參174
11.3.2傳址調用175
11.3.3函數返回176
11.4告訴編譯器有這麼一個函數177
11.4.1函數聲明的語法177
11.4 .2聲明不同於定義179
11.4.3標準庫函數的聲明180
11.5函數的調用過程180
11.6小結180
11.7習題180

第12章C語言難點——指針初探182
12.1計算機中的內存182
12.1.1內存地址182
12.1.2內存中保存的內容183
12.1.3地址就是指針183
12.2指針的定義183
12.2.1指針變量的聲明183
12.2.2指針變量的初始化184
12.2.3指針變量的值185
12.2.4取地址操作符& 185
12.2.5指針變量佔據一定的內存空間185
12.2.6指向指針的指針186
12.2.7指針變量常見的錯誤分析與解決186
12.3使用指針187
12.3.1運算符* 188
12.3.2指針的類型和指針所指向的類型189
12.3.3同類型指針的賦值189
12.3.4 void指針190
12.3.5指針的類型和指針所指向的類型不同190
12.4指針的運算192
12.4.1算術運算之“指針+整數”或“指針-整數” 192
12.4.2指針-指針193
12.4.3指針的大小比較194
12.5指針表達式與左值194
12.5.1指針與整型194
12.5.2指針與左值195
12.5.3指針與const 195
12.6動態內存分配196
12.6.1動態分配的好處196
12.6.2 malloc與free函數197
12.6.3 calloc與free 198
12.6.4 free函數與指針199
12.6.5內存洩漏199
12.6.6釋放已經釋放了的內存會出問題200
12.7小結200
12.8習題200

第13章字符串及字符串操作202
13.1 C風格字符串202
13.1.1 C風格字符串的聲明202
13.1.2 C風格字符串在內存中的表示202
13.2字符數組的輸入輸出203
13.2.1字符數組的聲明203
13.2.2字符數組可以進行整體輸入輸出204
13.2 .3使用gets()函數讀取整行205
13.2.4訪問字符數組中某個元素205
13.2.5使用puts()函數實現字符串的輸出206
13.2.6使用字符數組的常見問題206
13.3字符串處理函數207
13.3.1理解:數組名是常指針208
13.3.2 strlen()函數與size_t 210
13.3.3字符串複製函數strcpy() 211
13.3.4字符串比較函數strcmp() 212
13.3.5字符串連接函數strcat() 213
13.3.6全轉換為大寫形式213
13.3.7鍊式操作214
13.4小結214
13.5習題215

第14章結構體、共用體、枚舉和typedef 216
14.1結構體216
14.1.1結構體的定義216
14.1.2聲明結構體變量217
14.1.3初始化結構變量218
14.1.4訪問結構體成員218
14.1.5結構體定義的位置219
14.1.6結構體變量賦值219
14.2特殊結構體220
14.2.1結構體嵌套220
14.2.2匿名結構體223
14.3共用體224
14.3.1什麼是共用體224
14.3.2共用體的定義224
14.3.3聲明共用體變量225
14.3.4共用體變量的初始化225
14.3.5共用體成員訪問225
14.3.6共用體賦值226
14.4結構體和共用體的內存差異226
14.4.1結構體變量和共用體變量內存形式的不同227
14.4.2結構體變量的內存大小227
14.4.3字節對齊228
14.4.4 zuikuan基本類型228
14.4.5共用體的大小229
14.5枚舉類型230
14.5.1什麼是枚舉類型230
14.5.2枚舉類型的定義230
14.5.3聲明枚舉變量231
14.5.4枚舉常量是什麼231
14.5.5使用枚舉時常見的錯誤232
14.6給類型取個別名——typedef 233
14.6.1 typedef基本用法233
14.6.2 #define用法233
14.7小結234
14.8習題234

第15章如何節省內存——位運算235
15.1什麼是位運算235
15.1.1開燈關燈235
15.1.2改變狀態235
15.1.3計算機中的數據存儲形式236
15.2位邏輯運算符237
15.2.1位取反操作237
15.2.2位與運算237
15.2.3位或運算237
15.2.4位異或238
15.2.5實例分析238
15.3移位運算239
15.3.1基本形式239
15.3.2移位舉例239
15.3.3移位和乘以2 241
15.4小結241
15.5習題241

第三篇C語言進階主題
第16章存儲不僅僅局限於內存——文件243
16.1什麼是文件243
16.1 .1文件243
16.1.2流244
16.1.3重定向244
16.1.4文件的處理形式——緩衝區和非緩衝區245
16.1.5文件的存儲形式——文本形式和二進制形式245
16.2 C語言如何使用文件245
16.2.1文件型指針245
16.2.2文件操作的步驟246
16.3文件的打開與關閉246
16.3.1用於打開文件的fopen()函數247
16.3.2打開是否成功248
16.3.3用於關閉文件的fclose()函數249
16.4文件的讀寫249
16.4.1讀寫的相對參照249
16.4.2如何判斷文件已經結束249
16.4.3字符讀寫函數fgetc()和fputc() 250
16.4.4字符串讀寫函數fgets()和fputs() 251
16.4.5塊讀寫函數fread()和fwrite() 253
16.4.6格式化文件輸入輸出fprintf()與fscanf() 256
16.5文件的定位258
16.5.1移動指針到文件開頭rewind() 258
16.5.2移動指針到當前位置ftell() 258
16.5.3移動指針fseek() 258
16.6小結260
16.7習題260

第17章靈活卻難以理解——指針進階262
17.1指針與數組262
17.1.1數組名指針262
17.1.2使用數組名常指針表示數組元素263
17.1.3指向數組元素的指針變量263
17.1.4指向數組的指針變量264
17.1.5指針數組265
17.1.6指針與數組的常見問題266
17.2指針、結構體和結構體數組266
17.2.1兩種訪問形式266
17.2.2聲明創建一個結構體數組267
17.2.3結構體數組的初始化267
17.2.4結構體數組的使用268
17.2.5指向結構體數組的指針268
17.3函數指針269
17.3.1函數名指針269
17.3 .2指向函數的指針270
17.3.3函數指針類型272
17.3.4函數指針作函數參數273
17.3.5函數指針數組274
17.3.6指向函數指針的指針275
17.4小結275
17.5習題276

第18章更深入的理解——函數進階277
18.1參數傳遞的副本機制277
18.1.1傳值調用的副本277
18.1.2傳址調用的副本機制278
18.2函數返回值的副本機制281
18.2.1 return局部變量為什麼合法281
18.2.2返回指針申請動態內存282
18.2.3不要返回指向棧內存的指針282
18.2. 4返回指向只讀存儲區的指針283
18.3函數與結構體283
18.3.1結構體變量的傳值和傳址調用283
18.3.2結構體變量的成員作為函數參數284
18.3.3返回結構體的函數285
18.3.4返回結構體指針的函數286
18.4函數與數組286
18.4.1數組元素作為函數參數286
18.4.2數組名作為函數參數287
18.4.3多維數組名作為函數參數289
18.4.4數組名作函數參數時的退化290
18.5遞歸290
18.5.1遞歸流程290
18.5.2遞歸兩要素292
18.5.3效率VS可讀性293
18.6帶參數的主函數294
18.7小結295
18.8習題295

第19章生存期、作用域與可見域297
19.1內存分配297
19.1.1內存分區297
19.1.2變量的存儲類別298
19.1.3生存期299
19.1.4作用域與可見域299
19.2 auto變量299
19.2.1定義格式300
19.2.2作用域和生存期300
19.2.3 auto變量的屏蔽準則301
19.2.4重複定義302
19.2.5 auto變量的初始化和特點302
19.3 register變量303
19.3.1定義格式303
19.3.2使用舉例303
19.4 extern變量304
19.4.1全局變量定義304
19.4.2全局變量聲明305
19.4.3可見域306
19.4.4全局變量的屏蔽準則307
19.4.5全局變量的利與弊309
19.5 static變量309
19.5.1定義格式309
19.5.2靜態局部變量310
19.5.3靜態全局變量311
19.5.4靜態局部變量和靜態全局變量的區別312
19.5.5 extern變量和static變量的初始化312
19.6函數的作用域與可見域312
19.6.1內部函數313
19.6.2外部函數314
19.7結構體定義的作用域與可見域314
19.7.1定義位置與可見域314
19.7.2允許重複定義315
19.8常見的有關變量存儲的錯誤316
19.9小結318
19.10習題318

第20章編譯及預處理320
20.1編譯流程320
20.1 .1編輯321
20.1.2預處理321
20.1.3編譯321
20.1.4連接322
20.2程序錯誤322
20.2.1錯誤分類323
20.2.2編譯錯誤323
20.2.3連接錯誤323
20.2.4邏輯錯誤323
20.2. 5排錯324
20.3預處理命令之宏定義324
20.3.1宏定義324
20.3.2不帶參數的宏定義324
20.3.3帶參數的宏定義326
20.3.4 #define定義常量與const常量328
20.3.5文件包含329
20.3.6條件編譯330
20.3.7宏函數331
20.4小結332
20.5習題333

第21章數據結構334
21.1鍊錶334
21.1.1鍊錶的結構334
21.1.2創建鍊錶並遍歷輸出335
21.1 .3鍊錶的插入338
21.1.4鍊錶結點的刪除341
21.1.5鍊錶的逆置342
21.1.6鍊錶的銷毀344
21.1.7鍊錶的綜合實例344
21.1.8循環鍊錶349
21.1.9雙鍊錶349
21.2棧和隊列352
21.2.1棧的定義353
21.2.2棧的分類353
21.2.3棧的操作353
21.2.4函數與棧356
21.2.5隊列356
21.3自定義類型359
21.4小結361
21.5習題362

第四篇C語言程序設計實例與面試題解析
第22章面試題解析363
22.1基礎知識363
22.1.1指針自增自減有什麼不同363
22.1.2什麼是遞歸364
22.1.3宏定義與操作符的區別364
22.1.4引用與值傳遞的區別364
22.1.5指針和引用有什麼區別364
22.1.6什麼是棧364
22.1.7 main函數執行前還會執行什麼代碼364
22.1.8 static有什麼用途365
22.1.9定義int **a[3][4],則變量佔用的內存空間為多少365
22.1.10什麼是預編譯365
22.1.11 int (*s[10 ])(int)表示什麼意義365
22.1.12結構體與共同體有何區別365
22.2算法和思維邏輯知識366
22.2.1 100美元哪裡去了366
22.2.2將16升水平均分給四個人366
22.2. 3算出小王買了幾瓶啤酒、幾瓶飲料367
22.2.4找出不同的蘋果367
22.2.5找出不同的球368
22.2.6猜自己的帽子顏色368
22.2.7 3筐水果各是什麼370
22.2.8最後剩下的是誰370
22.2.9聰明的商人371
22.2.10紅球和白球371
22.2.11烏龜賽跑372
22.2.12投硬幣372
附錄ASCII編碼表373