前 言
計算機(jī)程序設(shè)計語言現(xiàn)今已有數(shù)百種,常用的也有數(shù)十種,但很少有哪一種語言像C語言那樣充滿活力,流行近半個世紀(jì)經(jīng)久不衰;也很少有哪一種語言像C語言那樣在中國如此普及。國家計算機(jī)等級考試中,各級考試均離不開C語言的身影;國內(nèi)高等院校幾乎都把計算機(jī)文化基礎(chǔ)和C語言作為理工科學(xué)生步入計算機(jī)領(lǐng)域的"敲門磚",C語言程序設(shè)計已成為理工科學(xué)生必備的技能之一。
C語言是20世紀(jì)70年代初期推出的編譯型程序設(shè)計語言。經(jīng)過近半個世紀(jì)的發(fā)展,C語言表現(xiàn)出了強(qiáng)大的生命力,已經(jīng)從早期在少數(shù)小型機(jī)機(jī)種上使用的算法語言,發(fā)展成了當(dāng)今在各類平臺上普遍使用的通用程序設(shè)計語言。因?yàn)镃語言具有強(qiáng)大的處理功能,特別是在某些方面可以替代匯編語言,所以熟練掌握C語言是現(xiàn)代計算機(jī)工作者應(yīng)具備的基本條件,也是學(xué)習(xí)更高層次面向?qū)ο蟮腃 語言的必備基礎(chǔ)。
在近半個世紀(jì)的發(fā)展過程中,C語言的體系日臻完善,功能不斷增強(qiáng)。與此相應(yīng),各種新型的C編譯系統(tǒng)相繼問世,C語言已從早期的"傳統(tǒng)模式"發(fā)展為當(dāng)前的"現(xiàn)代模式"。
鑒于目前流行的C語言編譯系統(tǒng)大多數(shù)是以ANSI C89為基礎(chǔ)開發(fā)的,所以本書以C89為基礎(chǔ)并結(jié)合當(dāng)前最常用的VC集成開發(fā)環(huán)境進(jìn)行介紹,同時兼顧過去20年非常流行的Turbo C集成環(huán)境。總而言之,本書的宗旨在于向讀者呈現(xiàn)一本內(nèi)容新穎、系統(tǒng)全面、按現(xiàn)代編程風(fēng)格介紹C語言程序設(shè)計的書籍。
本書共分為11章,各章的主要內(nèi)容說明如下。
第1章介紹C語言的基礎(chǔ)。考慮到計算機(jī)零基礎(chǔ)讀者的需要,本章適量增加了一些C語言預(yù)備知識。
第2章以VC為背景,介紹運(yùn)行C語言程序的步驟與方法,并通過典型案例,介紹C語言程序的調(diào)試方法。
第3章介紹C語言的基本數(shù)據(jù)類型、常量、變量以及C語言的各種運(yùn)算符與表達(dá)式。
第4章從結(jié)構(gòu)化程序設(shè)計的角度,介紹C程序的流程設(shè)計,同時融入算法的概念。
第5章介紹最簡單的構(gòu)造類型--數(shù)組。
第6章介紹各種類型的函數(shù),以及函數(shù)間數(shù)據(jù)傳遞的方法。
第7章介紹編譯預(yù)處理。
第8章討論C語言最重要的概念--指針及其特性。
第9章介紹C語言的另一種構(gòu)造類型--結(jié)構(gòu)體與共用體,同時,還介紹枚舉類型和用typedef定義既有類型的方法。
第10章從實(shí)用出發(fā),介紹用C語言處理文件的方法。
第11章為項目實(shí)踐,用一個大案例貫穿本書的主要知識點(diǎn)。書后的附錄列出了ASCII碼表、C語言關(guān)鍵字、常用庫函數(shù)以及運(yùn)算符的優(yōu)先級與結(jié)合性。
此處提請讀者注意:全書中緊隨程序代碼后的是程序的運(yùn)行結(jié)果截圖。在各截圖標(biāo)題欄中顯示的文件名及路徑僅是作者調(diào)試程序時使用的臨時文件名和路徑。
本書作者在多年從事C語言教學(xué)和軟件開發(fā)的基礎(chǔ)上,參考了國內(nèi)外有關(guān)的C語言著作,參考了因特網(wǎng)上諸多的優(yōu)秀程序,并參照了近幾年來一直延用的《2013年計算機(jī)二級C語言程序設(shè)計考試大綱》,完成了編著工作。因此,本書既可作為普通高等院校及大專院校的教材使用,又可供參加各類計算機(jī)考試的人員學(xué)習(xí)和參考。
本書由天津工業(yè)大學(xué)的楊連賀教授、天津市信息安全測評中心的趙玉玲、天津廣播電視大學(xué)的丁剛副教授主編,池明文、李俊榮為副主編。在本書的編寫過程中,還得到了天津大學(xué)軟件學(xué)院的劉石英副研究員、高翔副研究員、曹軍老師、沈士強(qiáng)老師的熱情幫助和指導(dǎo)。天津農(nóng)學(xué)院計算機(jī)與信息工程學(xué)院的靳潤昭教授、煙臺大學(xué)計算機(jī)與控制工程學(xué)院的賀利堅副教授、西北工業(yè)大學(xué)計算機(jī)學(xué)院的張彥春副教授提供了不少案例,天津工業(yè)大學(xué)計算機(jī)科學(xué)與軟件學(xué)院的碩士研究生董禹龍和房超在程序調(diào)試方面也做了不少工作,在此一并向他們表示衷心的感謝。
限于作者的經(jīng)驗(yàn)和水平,書中的錯誤與不足之處在所難免,希望得到專家和讀者的批評指正。
作 者
2017年2月于天津工業(yè)大學(xué)
目 錄
第1章 C語言基礎(chǔ).... 1
1.1 計算機(jī)語言的概念... 2
1.2 C語言的發(fā)展和特點(diǎn)... 3
1.2.1 概述... 3
1.2.2 C語言的發(fā)展歷史... 4
1.2.3 C語言的特點(diǎn)... 5
1.3 計算機(jī)中數(shù)的表示及進(jìn)制轉(zhuǎn)換... 6
1.3.1 數(shù)制的概念... 6
1.3.2 數(shù)碼、基數(shù)與位權(quán)... 6
1.3.3 各種進(jìn)制之間的轉(zhuǎn)換... 7
1.4 字節(jié)和位的概念... 9
1.5 整數(shù)的表示方法原碼、反碼
和補(bǔ)碼... 10
1.5.1 整數(shù)的原碼表示... 10
1.5.2 整數(shù)的反碼表示... 10
1.5.3 整數(shù)的補(bǔ)碼表示... 10
1.6 書寫程序時應(yīng)遵循的規(guī)則... 11
1.7 C語言程序的結(jié)構(gòu)... 11
1.7.1 源程序結(jié)構(gòu)... 11
1.7.2 C語言的字符集... 13
1.7.3 C語言的詞匯... 14
1.8 簡單的C程序舉例... 15
1.9 運(yùn)行C語言程序的步驟和方法... 17
第2章 VC環(huán)境下C程序的運(yùn)行
和調(diào)試.... 19
2.1 在VC下運(yùn)行一個C程序... 20
2.1.1
啟動VC.. 20
2.1.2
編輯程序... 20
2.1.3
編譯程序... 21
2.1.4
運(yùn)行程序... 22
2.2 在VC下調(diào)試C程序的方法... 23
2.2.1
VC調(diào)試功能簡介... 23
2.2.2
使用VC調(diào)試C程序的方法... 26
第3章 數(shù)據(jù)描述.... 31
3.1 C語言的數(shù)據(jù)類型... 32
3.2 常量和變量... 33
3.2.1 常量和符號常量... 33
3.2.2 變量... 34
3.3 整型數(shù)據(jù)... 34
3.3.1 整型常量的表示方法... 34
3.3.2 整型變量... 36
3.4 實(shí)型數(shù)據(jù)... 40
3.4.1 實(shí)型常量的表示方法... 40
3.4.2 實(shí)型變量... 41
3.4.3 實(shí)型常數(shù)的類型... 42
3.5 字符型數(shù)據(jù)... 42
3.5.1 字符常量... 42
3.5.2 轉(zhuǎn)義字符... 43
3.5.3 字符變量... 44
3.5.4 字符數(shù)據(jù)在內(nèi)存中的存儲形式
及使用方法... 44
3.5.5 字符串常量... 45
3.6 為變量賦初值... 46
3.7 算術(shù)運(yùn)算符和算術(shù)表達(dá)式... 46
3.7.1 C語言的運(yùn)算符簡介... 47
3.7.2 算術(shù)運(yùn)算符和算術(shù)表達(dá)式... 47
3.8 賦值運(yùn)算符和賦值表達(dá)式... 50
3.9 逗號運(yùn)算符和逗號表達(dá)式... 52
3.10 各類數(shù)值型數(shù)據(jù)之間的混合運(yùn)算... 53
3.11 本章小結(jié)... 56
習(xí)題... 57
第4章 C程序的流程設(shè)計.... 59
4.1 C語句概述... 60
4.2 賦值語句... 62
4.3 數(shù)據(jù)輸入輸出的概念及在C語言中
的實(shí)現(xiàn)... 63
4.4 字符數(shù)據(jù)的輸入輸出... 63
4.4.1 putchar函數(shù)(字符輸出函數(shù)) 63
4.4.2 getchar函數(shù)(鍵盤輸入函數(shù)) 64
4.5 格式輸入與輸出... 65
4.5.1 printf函數(shù)(格式輸出函數(shù)) 65
4.5.2 scanf函數(shù)(格式輸入函數(shù)) 68
4.6 結(jié)構(gòu)化程序設(shè)計的方法... 74
4.7 順序結(jié)構(gòu)程序設(shè)計... 76
4.7.1 順序結(jié)構(gòu)的程序... 76
4.7.2 順序結(jié)構(gòu)程序的案例實(shí)訓(xùn)... 76
4.8 選擇結(jié)構(gòu)程序設(shè)計... 77
4.8.1 關(guān)系運(yùn)算符和關(guān)系表達(dá)式... 77
4.8.2 邏輯運(yùn)算符和邏輯表達(dá)式... 79
4.8.3 if語句... 81
4.8.4 switch語句... 89
4.8.5 分支結(jié)構(gòu)程序的案例實(shí)訓(xùn)... 91
4.9 循環(huán)結(jié)構(gòu)程序的設(shè)計... 94
4.9.1 概述... 94
4.9.2 goto語句以及用goto語句
構(gòu)成的循環(huán)... 95
4.9.3 while語句... 95
4.9.4 do-while語句... 98
4.9.5 for語句... 100
4.9.6 循環(huán)的嵌套... 103
4.9.7 幾種循環(huán)的比較... 103
4.9.8 break語句和continue語句... 104
4.9.9 循環(huán)結(jié)構(gòu)程序的案例實(shí)訓(xùn)... 106
4.10 本章小結(jié)... 110
習(xí)題... 113
第5章 數(shù)組.... 117
5.1 一維數(shù)組的定義和引用... 118
5.1.1 一維數(shù)組的定義方式... 118
5.1.2 一維數(shù)組元素的引用... 119
5.1.3 一維數(shù)組的初始化... 121
5.1.4 一維數(shù)組應(yīng)用舉例... 122
5.2 二維數(shù)組的定義和引用... 123
5.2.1 二維數(shù)組的定義... 123
5.2.2 二維數(shù)組元素的引用... 124
5.2.3 二維數(shù)組的初始化... 126
5.2.4 二維數(shù)組程序舉例... 127
5.3 字符數(shù)組... 128
5.3.1 字符數(shù)組的定義... 128
5.3.2 字符數(shù)組的初始化... 128
5.3.3 字符數(shù)組的引用... 129
5.3.4 字符串及其結(jié)束標(biāo)志... 129
5.3.5 字符數(shù)組的輸入輸出... 130
5.3.6 字符串處理函數(shù)... 132
5.4 案例實(shí)訓(xùn)... 135
5.5 本章小結(jié)... 138
習(xí)題... 139
第6章 函數(shù).... 143
6.1 概述... 144
6.2 函數(shù)定義的一般形式... 145
6.3 函數(shù)的參數(shù)和函數(shù)的值... 147
6.3.1 形參和實(shí)參... 147
6.3.2 函數(shù)的返回值... 149
6.4 函數(shù)的調(diào)用與被調(diào)用函數(shù)的聲明... 150
6.4.1 函數(shù)調(diào)用的一般形式... 150
6.4.2 函數(shù)調(diào)用的方式... 150
6.4.3 被調(diào)用函數(shù)的聲明和函數(shù)
原型... 152
6.5 函數(shù)的嵌套調(diào)用... 153
6.6 函數(shù)的遞歸調(diào)用... 155
6.7 數(shù)組作為函數(shù)參數(shù)... 157
6.8 局部變量和全局變量... 163
6.8.1 局部變量... 163
6.8.2 全局變量... 165
6.9 變量的存儲類別... 167
6.9.1 動態(tài)存儲方式與靜態(tài)存儲
方式... 167
6.9.2 auto變量... 168
6.9.3 用static聲明局部變量... 168
6.9.4 register變量... 170
6.9.5 用extern聲明外部變量... 170
6.10 內(nèi)部函數(shù)和外部函數(shù)... 172
6.10.1 內(nèi)部函數(shù)... 172
6.10.2 外部函數(shù)... 172
6.10.3 建立包含多個文件的程序... 174
6.11 案例實(shí)訓(xùn)... 177
6.12 本章小結(jié)... 181
習(xí)題... 183
第7章 編譯預(yù)處理.... 189
7.1 概述... 190
7.2 宏定義... 190
7.2.1 無參宏的定義... 190
7.2.2 帶參宏定義... 193
7.3 文件包含... 199
7.4 條件編譯... 200
7.5 案例實(shí)訓(xùn)... 202
7.6 本章小結(jié)... 203
習(xí)題... 204
第8章 指針.... 207
8.1 指針的基本概念... 208
8.2 變量的指針和指向變量的指針
變量... 209
8.2.1 定義一個指針變量... 209
8.2.2 指針變量的引用... 210
8.2.3 指針變量作為函數(shù)參數(shù)... 214
8.2.4 關(guān)于指針變量幾個問題的
進(jìn)一步說明... 218
8.3 數(shù)組的指針和指向數(shù)組的指針
變量... 221
8.3.1 指向數(shù)組元素的指針... 222
8.3.2 通過指針引用數(shù)組元素... 223
8.3.3 數(shù)組名與指針變量作為函數(shù)的
參數(shù)... 227
8.3.4 指向多維數(shù)組的指針和指針
變量... 235
8.4 字符串的指針和指向字符串的指針
變量... 239
8.4.1 字符串的表示形式... 239
8.4.2 字符串指針變量與字符數(shù)組的
區(qū)別... 244
8.5 函數(shù)指針變量... 244
8.6 指針型函數(shù)... 246
8.7 指針數(shù)組和指向指針的指針... 247
8.7.1 指針數(shù)組的概念... 247
8.7.2 指向指針的指針... 251
8.7.3 main函數(shù)的參數(shù)... 253
8.8 有關(guān)指針的數(shù)據(jù)類型和指針運(yùn)算
小結(jié)... 254
8.8.1 有關(guān)指針的數(shù)據(jù)類型小結(jié)... 254
8.8.2 指針運(yùn)算小結(jié)... 255
8.8.3 void指針類型... 256
8.9 案例實(shí)訓(xùn)... 256
8.10 本章小結(jié)... 258
習(xí)題... 259
第9章 結(jié)構(gòu)體與共用體.... 263
9.1 結(jié)構(gòu)體類型的定義... 264
9.2 結(jié)構(gòu)體變量的說明... 265
9.3 結(jié)構(gòu)體變量成員的引用方法... 267
9.4 結(jié)構(gòu)體變量的賦值... 268
9.5 結(jié)構(gòu)體變量的初始化... 268
9.6 結(jié)構(gòu)體數(shù)組的定義... 269
9.7 結(jié)構(gòu)體指針變量的說明和使用... 271
9.7.1 指向結(jié)構(gòu)體變量的指針... 271
9.7.2 指向結(jié)構(gòu)體數(shù)組的指針... 273
9.7.3 結(jié)構(gòu)體指針變量作為函數(shù)
參數(shù)... 274
9.8 動態(tài)存儲分配... 276
9.9 用指針處理鏈表... 278
9.9.1 鏈表概述... 278
9.9.2 鏈表的建立和輸出... 279
9.10 共用體... 288
9.10.1 共用體的定義... 288
9.10.2 共用體的引用... 289
9.11 枚舉類型... 290
9.11.1 枚舉類型的定義和枚舉變量
的說明... 290
9.11.2 枚舉類型變量的賦值
和使用... 290
9.12 用typedef定義已有類型... 292
9.13 案例實(shí)訓(xùn)... 293
9.14 本章小結(jié)... 295
習(xí)題... 298
第10章 文件的輸入輸出.... 303
10.1 文件概述... 304
10.2 文件指針... 305
10.3 文件的打開與關(guān)閉... 305
10.3.1 文件的打開(fopen函數(shù)) 305
10.3.2 文件的關(guān)閉(fclose函數(shù)) 307
10.4 文件的順序讀寫... 307
10.4.1 字符讀寫函數(shù)fgetc
和fputc. 307
10.4.2 字符串讀寫函數(shù)fgets
和fputs. 311
10.4.3 數(shù)據(jù)塊讀寫函數(shù)fread
和fwrite. 313
10.4.4 格式化讀寫函數(shù)fscanf
和fprintf 314
10.4.5 文件結(jié)束檢測函數(shù)feof 316
10.5 文件的隨機(jī)讀寫... 316
10.5.1 文件定位函數(shù)... 317
10.5.2 文件隨機(jī)讀寫... 317
10.6 文件讀寫的出錯檢測... 318
10.7 案例實(shí)訓(xùn)... 319
10.8 本章小結(jié)... 321
習(xí)題... 321
第11章 項目實(shí)踐.... 325
11.1 題目要求... 326
11.2 系統(tǒng)分析... 326
11.3 系統(tǒng)設(shè)計... 326
11.3.1 總體設(shè)計... 326
11.3.2 詳細(xì)設(shè)計... 327
11.4 系統(tǒng)實(shí)施... 334
11.5 關(guān)于項目實(shí)踐的幾點(diǎn)說明... 345
附錄A ASCII代碼表.... 347
附錄B C語言中的關(guān)鍵字.... 349
附錄C C語言的常用庫函數(shù).... 351
附錄D 運(yùn)算符的優(yōu)先級與結(jié)合性.... 359
參考文獻(xiàn).... 361