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