C語言處理功能豐富,表達(dá)能力強(qiáng),使用靈活方便,執(zhí)行程序效率高,可移植性強(qiáng);具有豐富的數(shù)據(jù)類型和運(yùn)算符,語句非常簡(jiǎn)單,源程序簡(jiǎn)潔清晰;可以直接處理硬件系統(tǒng)和對(duì)外圍設(shè)備接口進(jìn)行控制。C語言是一種結(jié)構(gòu)化的程序設(shè)計(jì)語言,支持自頂向下、逐步求精的結(jié)構(gòu)化程序設(shè)計(jì)技術(shù)。本書詳細(xì)介紹了C語言程序設(shè)計(jì)的基本原理和方法。全書共分14章,主要介紹了程序設(shè)計(jì)的基礎(chǔ)知識(shí),C語言的語法基礎(chǔ),程序的控制結(jié)構(gòu),函數(shù)的概念及使用要點(diǎn),數(shù)組、結(jié)構(gòu)、聯(lián)合、鏈表等復(fù)合數(shù)據(jù)結(jié)構(gòu)的使用,數(shù)據(jù)文件的使用以及位運(yùn)算等內(nèi)容。
本書適合作為高等學(xué)校各專業(yè)程序設(shè)計(jì)課程教材,也可供自學(xué)的讀者使用。
書中的實(shí)例都是經(jīng)過編者精心挑選和設(shè)計(jì)的,具有新穎性、代表性、典型性,并且全部在Microsoft VisualStudio 2010下調(diào)試通過。
C語言從誕生之日起就一直保持著旺盛的生命力,并且不斷地發(fā)展壯大、日臻完善,已經(jīng)成為目前使用zui廣泛的編程語言之一。與其他高級(jí)語言相比,C語言處理功能豐富,表達(dá)能力強(qiáng),使用靈活方便,執(zhí)行程序效率高,可移植性強(qiáng);具有豐富的數(shù)據(jù)類型和運(yùn)算符,語句非常簡(jiǎn)單,源程序簡(jiǎn)潔清晰;可以直接處理硬件系統(tǒng)和對(duì)外圍設(shè)備接口進(jìn)行控制。C語言是一種結(jié)構(gòu)化的程序設(shè)計(jì)語言,支持自頂向下、逐步求精的結(jié)構(gòu)化程序設(shè)計(jì)技術(shù)。另外,C語言程序的函數(shù)結(jié)構(gòu)也為實(shí)現(xiàn)程序的模塊化設(shè)計(jì)提供了強(qiáng)有力的保障。因此,縱然有C 、Java和Python這樣的后繼者,但到目前為止,它們依然沒有取代C的跡象。本書的編者全部是一直工作于高等學(xué)校教學(xué)一線,承擔(dān)C語言程序設(shè)計(jì)課程教學(xué)多年的大學(xué)教師,有豐富的教學(xué)經(jīng)驗(yàn),長(zhǎng)期從事C語言編程工作,并有著將自己積累的C語言程序設(shè)計(jì)經(jīng)驗(yàn)介紹給大家的強(qiáng)烈愿望。在教學(xué)實(shí)踐中,作者感受zui深的就是,學(xué)習(xí)者普遍反映C語言難學(xué)難懂,而事實(shí)上,學(xué)習(xí)者感覺難的部分往往并不是C語言的核心內(nèi)容。學(xué)習(xí)的過程就是一個(gè)學(xué)習(xí)者與教師、學(xué)習(xí)者與教材交互的過程,有一本好的教材,再遵照一定的學(xué)習(xí)規(guī)律,這個(gè)交互過程就能很好地完成。本書參考多個(gè)高等院校程序設(shè)計(jì)課程教學(xué)大綱,與教育部高等學(xué)校大學(xué)計(jì)算機(jī)課程教學(xué)指導(dǎo)委員會(huì)的要求保持高度一致,章節(jié)結(jié)構(gòu)合理,內(nèi)容層次分明,從認(rèn)識(shí)、了解、掌握、應(yīng)用等幾個(gè)層次精心組織內(nèi)容,由淺入深,循序漸進(jìn),便于學(xué)生掌握知識(shí)要點(diǎn)。書中的實(shí)例都是經(jīng)過編者精心挑選和設(shè)計(jì)的,具有新穎性、代表性、典型性,并且全部在Microsoft Visual Studio 2010下調(diào)試通過。本書在介紹核心語法的基礎(chǔ)上,以培養(yǎng)編程能力為首要目標(biāo),把那些煩瑣的細(xì)節(jié)問題留待以后慢慢研究。本書共分14章,將C語言的內(nèi)容由淺入深、層次分明地給讀者娓娓道來。每個(gè)章節(jié)既有邏輯清晰的語法講解,又有豐富的編程實(shí)例,非常適合編程初學(xué)者思維模式的培養(yǎng)及訓(xùn)練。本書主要內(nèi)容如下:第1章程序設(shè)計(jì)基礎(chǔ)介紹了程序設(shè)計(jì)的基本知識(shí)、結(jié)構(gòu)化程序設(shè)計(jì)方法以及軟件編制步驟等,使讀者對(duì)軟件的編制有一個(gè)概念上的認(rèn)識(shí)和理解,并能將這些方法應(yīng)用于后續(xù)章節(jié)的學(xué)習(xí)中。第2章C語言的基本數(shù)據(jù)類型介紹了C語言的基本知識(shí),重點(diǎn)闡述了各數(shù)據(jù)類型的特點(diǎn)及變量的聲明方法,使讀者掌握變量、地址、存儲(chǔ)數(shù)據(jù)之間的關(guān)系。第3章運(yùn)算符與表達(dá)式介紹了C語言的各類運(yùn)算符及表達(dá)式的語法要求及運(yùn)算規(guī)則,使讀者能在編程時(shí)選用適合的表達(dá)式。第4章編譯預(yù)處理與標(biāo)準(zhǔn)庫函數(shù)介紹了C語言中編譯預(yù)處理的相關(guān)命令,包括宏定義、文件包含、條件編譯,以及C語言標(biāo)準(zhǔn)的庫函數(shù)分類和常用的數(shù)學(xué)庫函數(shù)、隨機(jī)函數(shù)等。第5章選擇結(jié)構(gòu)介紹了選擇結(jié)構(gòu)的相關(guān)語法及應(yīng)用實(shí)例,使讀者能夠使用選擇結(jié)構(gòu)解決編程時(shí)所涉及的相關(guān)問題。第6章循環(huán)結(jié)構(gòu)介紹了循環(huán)結(jié)構(gòu)的相關(guān)語法及應(yīng)用實(shí)例,使讀者能夠靈活使用循環(huán)結(jié)構(gòu)解決編程時(shí)所涉及的相關(guān)問題。第7章函數(shù)介紹了函數(shù)的相關(guān)知識(shí),重點(diǎn)介紹了函數(shù)的基本使用方法、函數(shù)參數(shù)的傳值調(diào)用和傳址調(diào)用,使讀者能夠綜合使用函數(shù)參數(shù)的傳值調(diào)用和傳址調(diào)用來解決實(shí)際問題。第8章數(shù)組介紹了C語言中數(shù)值型一維數(shù)組和二維數(shù)組的相關(guān)知識(shí),使讀者能夠在編程中熟練使用數(shù)組解決相關(guān)問題。第9章字符數(shù)組與字符串介紹了字符數(shù)組與字符串的相關(guān)知識(shí),使讀者能夠處理與字符數(shù)組和字符串相關(guān)的問題。第10 章結(jié)構(gòu)和聯(lián)合介紹了結(jié)構(gòu)和聯(lián)合的基本概念,使讀者能夠綜合使用數(shù)組、指針以及結(jié)構(gòu)和聯(lián)合來解決一些實(shí)際問題。第11章文件介紹了文件的概念以及處理文件問題所涉及的函數(shù),使讀者在掌握常用文件函數(shù)的基礎(chǔ)上來解決一些實(shí)際問題。第12 章指針與鏈表介紹了指針的高級(jí)使用,使讀者能夠處理涉及指針數(shù)組、函數(shù)指針和指針函數(shù)的相關(guān)問題,同時(shí),介紹了鏈表的概念、創(chuàng)建、輸出等,使讀者學(xué)會(huì)用鏈表來解決一些實(shí)際問題。第13章位運(yùn)算介紹了位運(yùn)算的相關(guān)知識(shí),使讀者能夠?qū)ξ贿\(yùn)算有一個(gè)較為系統(tǒng)的認(rèn)識(shí)并能夠使用所學(xué)的位運(yùn)算知識(shí)解決相關(guān)問題。第14章從C到C 介紹C和C 在基本操作上的區(qū)別,使讀者對(duì)C 的基本操作有初步的了解。以上各部分都可以獨(dú)立教學(xué),自成體系,教師可根據(jù)情況適當(dāng)取舍。在本書的編寫過程中參考了許多同行的著作,在此一并表達(dá)感謝之情。感謝鄭州輕工業(yè)大學(xué)和中國(guó)鐵道出版社的大力支持,感謝各位編輯的辛苦工作,正由于各位領(lǐng)導(dǎo)的幫助和支持,才使本書得以成書付印。本書由鄭州輕工業(yè)大學(xué)的尚展壘、陳嫄玲、王鵬遠(yuǎn)、蘇虹、程靜、張凱、李萍編著,其中尚展壘、陳嫄玲、王鵬遠(yuǎn)任主編,蘇虹、程靜、張凱任副主編,參加編寫的還有李萍老師。各章編著分工如下:第1、6章由陳嫄玲編著,第2、3章由蘇虹編著,第4、7章由程靜編著,第5、11章由李萍編著,第10、12章由尚展壘編著,第8、14章和附錄由王鵬遠(yuǎn)編著,第9、13章由張凱編著。在組織編著過程中,尚展壘負(fù)責(zé)本書的架構(gòu)計(jì)劃,陳嫄玲和王鵬遠(yuǎn)負(fù)責(zé)本書的統(tǒng)稿工作。如果您能夠愉快地讀完本書,并告之身邊的朋友,原來C語言并不難學(xué),那就是編者zui大的欣慰。盡管編者盡了zui大努力,也有良好而負(fù)責(zé)任的態(tài)度,但是由于學(xué)識(shí)所限,加之時(shí)間倉促,書中難免存在不妥和疏漏之處,懇請(qǐng)各位讀者批評(píng)指正,以便再版時(shí)更正。編 者2018年10月
尚展壘,鄭州輕工業(yè)大學(xué)教師。
陳嫄玲,鄭州輕工業(yè)大學(xué)教師。
王鵬遠(yuǎn),鄭州輕工業(yè)大學(xué)教師。
蘇虹,鄭州輕工業(yè)大學(xué)教師。
第1 章 程序設(shè)計(jì)基礎(chǔ).1
1.1 程序設(shè)計(jì)與計(jì)算思維...................... 1
1.1.1 程序............... 2
1.1.2 程序設(shè)計(jì)語言 2
1.1.3 計(jì)算思維........ 5
1.2 算法 6
1.2.1 算法的概念.... 6
1.2.2 算法的特征.... 8
1.2.3 算法的描述.... 8
1.3 結(jié)構(gòu)化程序設(shè)計(jì)和模塊化結(jié)構(gòu)......11
1.3.1 結(jié)構(gòu)化程序設(shè)計(jì)...................11
1.3.2 模塊化結(jié)構(gòu)...13
1.4 軟件的編制步驟....13
1.4.1 確定軟件開發(fā)需求...............13
1.4.2 軟件設(shè)計(jì)與開發(fā)...................14
1.4.3 文檔整理.......14
1.4.4 軟件維護(hù).......15
1.5 C 程序設(shè)計(jì)語言的產(chǎn)生與特點(diǎn)......15
1.5.1 C 程序設(shè)計(jì)語言的歷史........15
1.5.2 C 程序設(shè)計(jì)語言的特點(diǎn)........16
1.6 簡(jiǎn)單程序設(shè)計(jì)........17
1.6.1 一個(gè)簡(jiǎn)單的C 程序...............17
1.6.2 C 語言的字符集...................18
1.6.3 簡(jiǎn)單程序設(shè)計(jì)舉例...............20
1.7 本章常見錯(cuò)誤及解決方法.............22
1.8 本章小結(jié)................22
習(xí)題 .......22
第2 章 C 語言的基本數(shù)據(jù)類型..........25
2.1 基本數(shù)據(jù)類型........25
2.2 變量與常量........... 26
2.2.1 變量............. 27
2.2.2 常量............. 31
2.3 變量或數(shù)據(jù)類型所占內(nèi)存空間的計(jì)算................... 32
2.3.1 信息編碼的存儲(chǔ).................. 32
2.3.2 用sizeof( )運(yùn)算符計(jì)算變量
和數(shù)據(jù)類型的內(nèi)存空間....... 33
2.4 整型數(shù)據(jù)............... 34
2.4.1 整型常量...... 34
2.4.2 整型變量...... 34
2.4.3 整型數(shù)據(jù)的輸入與輸出....... 36
2.5 實(shí)型數(shù)據(jù)............... 38
2.5.1 實(shí)型常量...... 38
2.5.2 實(shí)型變量...... 38
2.5.3 實(shí)型數(shù)據(jù)的輸入與輸出....... 40
2.6 字符型數(shù)據(jù)........... 41
2.6.1 字符常量...... 41
2.6.2 字符變量...... 43
2.6.3 字符數(shù)據(jù)的輸入與輸出....... 44
2.6.4 字符數(shù)據(jù)應(yīng)用舉例.............. 46
2.7 指針類型............... 46
2.7.1 變量的內(nèi)存地址.................. 46
2.7.2 指針的定義與初始化........... 47
2.7.3 指針的應(yīng)用舉例.................. 48
2.8 不同類型數(shù)據(jù)之間的轉(zhuǎn)換............ 49
2.8.1 自動(dòng)類型轉(zhuǎn)換...................... 49
2.8.2 強(qiáng)制類型轉(zhuǎn)換...................... 50
2.9 數(shù)據(jù)輸出............... 51
2.9.1 printf( )函數(shù)中常用的格式說明.......52
2.9.2 printf( )函數(shù)應(yīng)用舉例...........53
2.10 數(shù)據(jù)輸入..............54
2.10.1 scanf( )函數(shù)中常用格式的說明............54
2.10.2 scanf( )函數(shù)應(yīng)用舉例.........55
2.11 本章常見錯(cuò)誤及解決方法...........56
2.12 本章小結(jié)..............57
習(xí)題 .......58
第3 章 運(yùn)算符與表達(dá)式....................60
3.1 C 運(yùn)算符簡(jiǎn)介........60
3.2 算術(shù)運(yùn)算符和算術(shù)表達(dá)式.............61
3.3 關(guān)系運(yùn)算符與關(guān)系表達(dá)式.............63
3.4 邏輯運(yùn)算符與邏輯表達(dá)式.............64
3.5 賦值運(yùn)算符和賦值表達(dá)式.............65
3.6 逗號(hào)運(yùn)算符和逗號(hào)表達(dá)式.............69
3.7 自增、自減運(yùn)算符.70
3.8 條件運(yùn)算符和條件表達(dá)式.............71
3.9 本章常見錯(cuò)誤及解決方法.............72
3.10 本章小結(jié)..............73
習(xí)題 .......74
第4 章 編譯預(yù)處理與標(biāo)準(zhǔn)庫函數(shù)......76
4.1 宏定義....................77
4.1.1 符號(hào)常量(不帶參數(shù))的宏定義...........77
4.1.2 帶參數(shù)的宏定義...................78
4.1.3 取消宏定義...81
4.2 文件包含................81
4.3 條件編譯................82
4.4 C 標(biāo)準(zhǔn)庫函數(shù)........84
4.4.1 C 標(biāo)準(zhǔn)函數(shù)庫的分類............84
4.4.2 常用數(shù)學(xué)庫函數(shù)...................85
4.4.3 隨機(jī)函數(shù)......86
4.5 本章常見錯(cuò)誤及解決方法.............88
4.6 本章小結(jié)................89
習(xí)題 .......90
第5 章 選擇結(jié)構(gòu)......92
5.1 if 語句....................92
5.1.1 if 語句中的條件表示........... 92
5.1.2 if 語句的三種形式............... 93
5.1.3 復(fù)合語句在分支語句中的應(yīng)用............. 98
5.1.4 if 語句的嵌套...................... 99
5.1.5 條件運(yùn)算符與條件表達(dá)式.........101
5.2 switch 語句..........102
5.3 應(yīng)用程序舉例......105
5.4 本章常見錯(cuò)誤及解決方法...........108
5.5 本章小結(jié)..............109
習(xí)題 .....109
第6 章 循環(huán)結(jié)構(gòu).... 115
6.1 while 語句............115
6.2 for 語句................121
6.3 do…while 語句....126
6.4 多重循環(huán)結(jié)構(gòu)......131
6.5 break 語句和continue 語句.........135
6.5.1 break 語句...135
6.5.2 continue 語句......................137
6.6 應(yīng)用程序舉例......139
6.7 本章常見錯(cuò)誤及解決辦法...........148
6.8 本章小結(jié)..............153
習(xí)題 .....155
第7 章 函數(shù)........... 157
7.1 C 程序與函數(shù)概述.......................157
7.1.1 模塊化程序設(shè)計(jì).................157
7.1.2 C 程序的一般結(jié)構(gòu)..............158
7.2 函數(shù)的定義與調(diào)用.......................159
7.2.1 函數(shù)的定義.159
7.2.2 函數(shù)的調(diào)用.161
7.2.3 函數(shù)的參數(shù)傳遞.................165
7.3 函數(shù)的傳址引用..167
7.3.1 地址的存儲(chǔ)與使用.............167
7.3.2 指針說明和指針對(duì)象的引用............168
7.4 局部變量與全局變量...................172
7.4.1 局部變量....173
7.4.2 全局變量....174
7.5 變量的存儲(chǔ)類型..176
7.5.1 存儲(chǔ)類型區(qū)分符.................177
7.5.2 自動(dòng)變量....177
7.5.3 外部變量....178
7.5.4 靜態(tài)變量....179
7.5.5 寄存器變量.180
7.5.6 存儲(chǔ)類型小結(jié).....................180
7.6 函數(shù)的嵌套與遞歸調(diào)用...............181
7.6.1 函數(shù)的嵌套調(diào)用.................181
7.6.2 函數(shù)的遞歸調(diào)用.................182
7.6.3 函數(shù)遞歸調(diào)用舉例.............183
7.7 內(nèi)部函數(shù)與外部函數(shù)...................186
7.7.1 內(nèi)部函數(shù)....186
7.7.2 外部函數(shù)....187
7.8 本章常見錯(cuò)誤及解決方法...........188
7.9 本章小結(jié)..............189
習(xí)題 .....192
第8 章 數(shù)組........... 194
8.1 一維數(shù)組的定義及使用...............194
8.1.1 一維數(shù)組的定義.................194
8.1.2 一維數(shù)組的引用.................197
8.1.3 一維數(shù)組的初始化.............198
8.1.4 程序舉例....202
8.2 一維數(shù)組與指針運(yùn)算...................207
8.2.1 一維數(shù)組的數(shù)組名.............207
8.2.2 一維數(shù)組的下標(biāo)與指針......208
8.2.3 作為函數(shù)參數(shù)的一維數(shù)組
的數(shù)組名.....212
8.3 二維數(shù)組的定義及使用...............217
8.3.1 二維數(shù)組的定義.................217
8.3.2 二維數(shù)組元素的引用.........218
8.3.3 二維數(shù)組的初始化.............218
8.3.4 二維數(shù)組應(yīng)用舉例.............220
8.4 二維數(shù)組與指針運(yùn)算...................223
8.4.1 二維數(shù)組的數(shù)組名.............223
8.4.2 二維數(shù)組的下標(biāo)與指針......223
8.4.3 作為函數(shù)參數(shù)的二維數(shù)組的數(shù)組名.....225
8.5 使用內(nèi)存動(dòng)態(tài)分配實(shí)現(xiàn)動(dòng)態(tài)數(shù)組......................229
8.5.1 動(dòng)態(tài)內(nèi)存分配的步驟..........230
8.5.2 動(dòng)態(tài)內(nèi)存分配函數(shù).............230
8.6 本章常見錯(cuò)誤及解決方法...........233
8.7 本章小結(jié)..............234
習(xí)題 .....235
第9 章 字符數(shù)組與字符串.............. 237
9.1 字符數(shù)組..............237
9.1.1 字符數(shù)組的定義.................237
9.1.2 字符數(shù)組的初始化.............238
9.1.3 字符數(shù)組的賦值.................238
9.2 字符串..................239
9.2.1 字符串常量.239
9.2.2 利用字符串對(duì)字符數(shù)組初始化.........239
9.2.3 字符數(shù)組與字符串的輸入/輸出............240
9.2.4 字符串處理函數(shù).................244
9.2.5 字符指針.....246
9.3 字符數(shù)組與字符串應(yīng)用舉例......................250
9.4 本章常見錯(cuò)誤及解決方法...........254
9.5 本章小結(jié)..............256
習(xí)題 .....256
第10 章 結(jié)構(gòu)和聯(lián)合....................... 260
10.1 結(jié)構(gòu)的聲明與引用.....................260
10.1.1 結(jié)構(gòu)的聲明.......................260
10.1.2 結(jié)構(gòu)的引用.......................263
10.1.3 結(jié)構(gòu)與指針.......................265
10.2 結(jié)構(gòu)數(shù)組的聲明、引用和初始化................266
10.2.1 結(jié)構(gòu)數(shù)組的聲明與引用....266
10.2.2 結(jié)構(gòu)數(shù)組的初始化...........267
10.3 結(jié)構(gòu)和函數(shù)........269
10.4 結(jié)構(gòu)數(shù)組作為函數(shù)的參數(shù).........270
10.5 聯(lián)合...................272
10.5.1 聯(lián)合的定義.......................272
10.5.2 聯(lián)合變量的說明...............273
10.5.3 聯(lián)合變量的賦值和使用....274
10.6 應(yīng)用程序舉例....276
10.7 本章常見錯(cuò)誤及解決方法.........278
10.8 本章小結(jié)............279
習(xí)題 .....279
第11 章 文件.......... 282
11.1 文件概述............282
11.2 文件的使用........283
11.2.1 文件的聲明.......................284
11.2.2 文件的打開與關(guān)閉...........284
11.2.3 文件的讀寫.......................286
11.3 隨機(jī)文件的讀/寫.......................296
11.4 應(yīng)用程序舉例....297
11.5 本章常見錯(cuò)誤及解決方法.........303
11.6 本章小結(jié)............304
習(xí)題 .....304
第12 章 指針與鏈表....................... 306
12.1 數(shù)組、地址與指針.....................306
12.1.1 數(shù)組、地址與指針的關(guān)系...........306
12.1.2 一維數(shù)組中的地址與指針...........307
12.1.3 二維數(shù)組中的地址與指針...........309
12.2 指針數(shù)組與指向指針的指針.....311
12.2.1 指針數(shù)組...311
12.2.2 指向指針的指針...............316
12.3 指向函數(shù)的指針函數(shù)指針....318
12.4 指針作為函數(shù)的返回值指針函數(shù)............320
12.5 鏈表...................322
12.5.1 鏈表的概念.......................322
12.5.2 鏈表的實(shí)現(xiàn).......................322
12.5.3 單向鏈表的操作...............323
12.6 應(yīng)用程序舉例....328
12.7 本章常見錯(cuò)誤及解決方法.........329
12.8 本章小結(jié)............331
習(xí)題 .....332
第13 章 位運(yùn)算...... 335
13.1 位運(yùn)算的概念....335
13.1.1 字節(jié)與位...335
13.1.2 補(bǔ)碼..........336
13.2 二進(jìn)制位運(yùn)算....337
13.2.1 二進(jìn)制位運(yùn)算...................337
13.2.2 位復(fù)合賦值運(yùn)算符...........344
13.3 應(yīng)用程序舉例....344
13.4 本章常見錯(cuò)誤及解決方法.........345
13.5 本章小結(jié)............345
習(xí)題 .....346
第14 章 從C 到C ...................... 348
14.1 盡量用const 和inline 而不用#define................348
14.2 盡量用而不用
.............350
14.3 盡量用new 和delete 而不用malloc( )和free( ) .......................352
14.4 盡量使用C 風(fēng)格的注釋.........353
14.5 本章常見錯(cuò)誤及解決方法.........354
14.6 本章小結(jié)............354
習(xí)題 ...354
附錄A C 語言的關(guān)鍵字................... 355
附錄B C 語言運(yùn)算符的優(yōu)先級(jí)與
結(jié)合性........ 356
附錄C 常用字符與ASCII 碼
對(duì)照表........ 357
附錄D 常用ANSI C 標(biāo)準(zhǔn)庫
函數(shù)............ 359
參考文獻(xiàn)................... 366