內容簡介
本教材共12章,第1章闡述計算機的基本工作原理,並重點介紹了與C語言程式密切相關的計算機基礎知識;第2章介紹了C語言的核心內容;第3章著重介紹了基本數據類型、表達式和運算符;第4章介紹了結構化程式控制流程,重點介紹了三種基本控制結構;第5章探討了函式的作用以及函式的設計;第6章討論了指針和數組;第7章討論了遞歸函式;第8章討論了結構、聯合、位運算和枚舉;第9章闡述了預處理器的使用;第10章介紹了檔案的基本操作;第11章做了一些C語言高級話題的討論;第12章對C99和C89標準的主要不同作了對比。
本教材取材新穎,內容豐富,可讀性強,考慮到初學者的需求,特別增加了計算機基礎知識一章。本教材圍繞編程能力展開,線索清楚,尤其避免了學習者在學習初期陷入語法細節的煩惱。同時,考慮到讀者學習時的心理適應性,對一些枯燥的內容作了適當的處理。
本教材面向初學者,立足C99標準,全面系統地介紹了C語言各要素及C語言程式設計技術,重點介紹與C89兼容的內容。對C89和C99的主要不同用專門章節進行了論述。
本教材引入了C語言核心內容的概念,並按照以核心內容為主的思想組織教材。本教材意圖從總體結構入手,慢慢深入細節。本教材的另一特點是引入了程式缺陷的內容,它並不見得蒐集得很全,但是這部分內容不管對初學者還是對那些長期編程的人都很有用。
本教材可作為高等學校計算機類、非計算機類本科教材,亦可供有需要的人員自學使用。
圖書目錄
第1章基礎知識1
1.1計算機系統2
1.1.1計算機的硬體系統3
1.1.2計算機的軟體系統6
1.2計算機的基本工作原理7
1.2.1存儲程式的原理7
1.2.2記憶體地址的概念8
1.2.3C程式的記憶體分區9
1.3計算機語言12
1.3.1機器語言12
1.3.2彙編語言12
1.3.3高級語言13
1.4數據在計算機內的表示13
1.4.1計數制13
1.4.2不同進位計數制之間的轉換15
1.4.3數值信息在計算機中的表示18
1.4.4二進制算術運算和邏輯運算22
1.4.5ASCII碼25
1.5算法和數據結構27
1.5.1算法及其特點27
1.5.2數據結構28
1.5.3傳統流程圖表示算法28
1.6C語言標準簡介29
1.7C和C++的不同30
1.8C語言編程風格簡介30
習題31
第2章C語言的基本要素33
2.1C語言程式的開發過程34
2.2第一個C語言程式34
2.2.1C語言程式的注釋37
2.2.2main( )函式及其返回值38
2.2.3函式參數和返回值38
2.2.4函式體39
2.2.5C程式的運行過程40
2.3變數定義、算術表達式、賦值語句和while語句42
C語言程式設計(C99版)目錄2.3.1變數定義語句44
2.3.2賦值語句46
2.3.3算術表達式46
2.3.4while循環語句46
2.3.5顯示輸出函式printf( )47
2.4for循環語句48
2.5常量50
2.5.1用#define定義宏50
*2.5.2用const定義常量52
2.6字元的輸入和輸出操作52
2.6.1字元輸入輸出函式52
2.6.2檔案複製55
2.6.3字元計數58
2.6.4行計數61
2.6.5單詞計數63
2.7函式65
2.8函式參數——複製傳值68
2.9字元數組和字元指針71
2.9.1字元數組71
2.9.2字元指針75
2.10整型數組76
2.11外部變數及變數的作用域81
***2.12實例研究:尋找質數84
*2.13程式陷阱87
習題88
第3章變數名、數據類型、運算符和表達式91
3.1C語言的變數命名91
3.1.1字元集91
3.1.2關鍵字92
3.1.3變數命名92
3.2C語言的基本數據類型及其大小93
3.3常量及其類型94
3.3.1字元常量95
3.3.2整型常量97
3.3.3實型常量97
3.3.4字元串常量98
*3.3.5枚舉常量100
*3.3.6使用const限定的常量101
3.4變數類型及其定義102
3.4.1基本數據類型變數及其定義102
3.4.2變數的初始化105
3.5運算符和表達式105
3.5.1表達式和表達式的值106
3.5.2賦值運算符、賦值表達式和賦值語句106
3.5.3算術運算符及其表達式107
3.5.4自增和自減算術運算符及其表達式109
3.5.5關係運算符及其表達式114
3.5.6邏輯運算符及其表達式114
3.5.7逗號運算符及其表達式115
3.5.8條件運算符及其表達式116
3.5.9位運算符及其表達式117
3.5.10複合賦值運算符及其表達式120
3.6運算符的優先權和求值順序123
3.7類型轉換125
***3.8實例研究:求質數的快速篩法131
*3.9程式陷阱134
習題138
第4章C程式基本控制結構141
4.1程式的基本結構141
4.1.1語句和塊的概念141
4.1.2三種基本結構142
4.2順序結構程式設計142
4.2.1數據輸入輸出在C語言中的實現方法142
4.2.2順序結構程式實例143
4.3選擇結構程式設計143
4.3.1if…else…語句144
4.3.2else if語句145
4.3.3switch語句147
4.4循環結構程式設計150
4.4.1while 循環語句150
4.4.2for 循環語句150
4.4.3do…while循環語句154
4.4.4break、continue和goto語句156
***4.5實例研究:尋找名人158
*4.6程式陷阱161
習題162
第5章函式165
5.1C語言的程式模組165
5.2函式概念166
5.2.1函式基礎166
5.2.2函式的現代定義形式171
*5.2.3函式的傳統定義形式172
5.2.4函式返回語句return172
5.2.5函式返回非整數174
5.2.6函式原型177
**5.2.7內聯函式(inline關鍵字)177
5.3外部變數、內部變數及其作用域178
*5.3.1外部變數和內部變數178
5.3.2變數的作用域規則191
*5.3.3頭檔案的設計193
5.4變數的存儲類型196
5.4.1自動型變數196
5.4.2靜態型變數196
5.4.3暫存器型變數198
5.4.4外部型變數198
5.4.5塊結構199
5.4.6變數的存儲類型及其作用域總結199
5.5變數的初始化201
*5.6變數的連線202
*5.7自頂向下程式設計202
***5.8實例研究203
5.8.1洗牌和發牌模擬203
5.8.2尋求一一函式205
*5.9程式陷阱208
習題210
第6章數組和指針211
6.1指針和地址212
6.2指針和函式參數214
6.3指針和數組219
6.4地址運算223
6.5字元指針和函式227
6.6指針數組和指向指針的指針230
6.6.1指針數組230
*6.6.2指向指針的指針234
6.6.3指針數組的初始化236
6.7多維數組237
6.7.1二維數組的定義、初始化及引用237
*6.7.2二維數組作為形式參數240
**6.7.3指針數組與多維數組的比較242
***6.8實例研究243
6.8.1兌換錢問題243
6.8.2最長公共子序列245
*6.9程式陷阱248
習題253
第7章遞歸255
7.1遞歸問題求解255
**7.2回溯法259
7.3分而治之算法263
***7.4實例研究264
7.4.1漢諾塔問題264
7.4.2迷宮問題266
*7.5程式陷阱269
習題270
第8章結構、聯合、位運算和枚舉類型273
8.1結構273
8.1.1概述273
8.1.2結構的聲明273
8.1.3結構類型變數的引用276
8.1.4結構變數的初始化278
8.1.5結構數組279
8.1.6指向結構類型的指針285
8.2聯合289
8.2.1聯合的概念289
8.2.2聯合的定義290
8.2.3聯合變數的說明290
8.2.4聯合變數的賦值和使用291
8.3枚舉類型293
8.4類型定義:typedef298
8.5位運算符299
8.5.1位運算符介紹300
*8.5.2位運算綜合舉例305
**8.6位段308
8.6.1位段的定義和位段變數的說明308
8.6.2位段的使用310
***8.7實例研究313
8.7.1石頭、剪刀、布遊戲313
8.7.2最短路徑問題319
*8.8程式陷阱323
習題324
第9章預處理命令325
9.1概述325
9.2檔案包含325
9.3宏定義326
9.3.1無參宏定義326
9.3.2帶參宏定義329
*9.3.3取消宏#undef335
9.4條件編譯335
9.4.1第1種形式:#ifdef、#else和#endif335
9.4.2第2種形式:#if、#else和#endif337
9.4.3第3種形式:#ifndef、#else和#endif338
*9.5宏assert339
***9.6實例研究340
9.6.1碰運氣遊戲340
9.6.2編輯字元串346
*9.7程式陷阱351
習題352
第10章檔案353
10.1檔案概念353
10.2檔案指針354
10.3檔案的打開與關閉354
10.3.1檔案打開的函式fopen( )354
10.3.2檔案關閉的函式fclose( )356
10.4檔案檢測函式356
10.5檔案操作函式357
10.5.1字元讀寫函式:fgetc( )/fputc( )357
10.5.2字元串讀寫函式:fgets( )/fputs( )360
10.5.3數據塊讀寫函式:fread( )/fwrite( )363
10.5.4格式化讀寫函式:fscanf( )/fprintf( )367
10.6隨機讀寫檔案370
***10.7實例研究374
10.7.1檔案加密算法374
10.7.2檔案分割算法379
*10.8程式陷阱386
習題386
第11章高級話題387
**11.1變長參數列表387
**11.2命令行參數389
**11.3編譯多個源檔案程式的說明390
**11.4用exit( )退出程式的執行391
**11.5運態記憶體分配與釋放393
11.5.1運態記憶體分配函式: malloc( )393
11.5.2運態記憶體釋放函式:free( )393
11.5.3運態記憶體處理實例:線性鍊表393
**11.6指針的深入討論397
11.6.1數組名和指針變數作函式參數397
11.6.2指向函式的指針變數398
11.6.3返回指針的函式400
*11.7格式化輸出與輸入討論401
11.7.1格式化輸出函式printf( )401
11.7.2格式化輸入函式scanf ( )404
**11.8實例研究:生物基因序列407
*11.9程式陷阱417
習題418
**第12章C89與C99419
12.1C99增加的屬性419
12.1.1inline內聯函式420
12.1.2restrict限定的指針420
12.1.3新的內建數據類型421
12.2C99改變了的屬性422
12.3C99刪除了的屬性426
附錄AC程式的基本開發過程429
A.1安裝程式429
A.2建立一個工程429
附錄BASCII表433
附錄C運算符表435
附錄D常見標準庫函式437
附錄E輸入輸出格式控制符451
附錄FC程式設計編程風格指導453
附錄G四川大學計算機學院國家示範性軟體學院C語言考研試題舉例455
附錄H辭彙表459
參考文獻465