C語言從誕生之日起就一直保持著旺盛的生命力,在不斷地發(fā)展壯大、日臻完善,已經成為目前使用最廣泛的編程語言之一。與其他高級語言相比,C語言處理功能豐富,表達能力強,使用靈活方便,執(zhí)行程序效率高,可移植性強;具有豐富的數(shù)據(jù)類型和運算符,語句非常簡單,源程序簡潔清晰;可以直接處理硬件系統(tǒng)和對外圍設備接口進行控制。同時C語言是一種結構化的程序設計語言,支持自頂向下、逐步求精的結構化程序設計技術。另外,C語言程序的函數(shù)結構也為實現(xiàn)程序的模塊化設計提供了強有力的保障。因此雖然有C++、Java這樣的后繼者,但到目前為止,它們依然沒有取代C的跡象。尤其C99標準發(fā)布以后,C語言的旺盛生命力再次得到了保持和延續(xù)。
本教材的編寫者全部是長期在各高等學校教學一線、承擔“C語言程序設計”課程的教學任務的大學教師,這些老師有豐富的教學經驗,并長期從事C語言編程工作,并有著將自己積累的“C語言程序設計”經驗介紹給大家的強烈愿望,因為在教學實踐中,作者感受最深的就是,學習者普遍反映C語言難學難懂,而事實上,學習者感覺難的部分往往并不是C語言的核心內容,學習的過程就是一個學習者與教師、學習者與教材交互的過程,只要遵照一定的學習規(guī)律,這個交互過程并不難達成。學習者應該明白選擇一本交互性好的教材是至關重要的。不可否認,一些經典的C語言教材在教學中所起的巨大作用。但是,傳統(tǒng)教材過細的內容組織也讓學習者迷失了方向。另外,本教材也特別強調實踐能力的培養(yǎng),學習者首先應該學會用適當?shù)木幊坦ぞ呔幹啤⒄{試程序。學習者在編程實踐中不斷遇到問題、不斷解決問題,自然就會明白許多細節(jié)。本教材主張,在介紹核心語法的基礎上,以培養(yǎng)動手編程能力為首要目標,把那些煩瑣煩心的內容留待以后慢慢研究。
本教材共分13章,將C語言的內容由淺入深、層次分明地講述給讀者。把編譯預處理從一般教材的第7章提前到了第3章,讓讀者更早地接觸到相關的內容,以方便在編程中使用。
第1章“程序設計基礎”介紹了程序設計的基本知識,詳細闡述了軟件的編制方法,使學習者對軟件的編制有一個概念上的認識和理解,并能將這些方法應用于后續(xù)章節(jié)的學習中,同時對計算思維的概念進行簡單的介紹。
第2章“數(shù)據(jù)類型、運算符與表達式”介紹了C語言的中的變量與常量、基本數(shù)據(jù)類型,常用的運算符及表達式的運算方式。最后詳細地講述了不同類型數(shù)據(jù)之間的轉換。
第3章“編譯預處理”介紹了C語言中編譯預處理的相關命令,包括宏定義和宏替換、文件包含(又稱頭文件)、條件編譯。
第4章“選擇結構”介紹了分支結構的相關語法,使學習者能夠解決分支結構所涉及的問題。
第5章“循環(huán)結構”介紹了循環(huán)結構的相關語法,使學習者能夠解決循環(huán)結構所涉及的問題。
第6章“函數(shù)”介紹了函數(shù)的相關知識,重點介紹了基本使用方法、函數(shù)參數(shù)的傳值調用和傳址調用,使學習者能夠綜合使用函數(shù)參數(shù)的傳值調用和傳址調用來解決實際問題。
第7章“數(shù)組”介紹了C語言中數(shù)值型一維數(shù)組和二維數(shù)組的相關知識,使學習者能夠熟練使用函數(shù)來解決數(shù)組的相關問題。
第8章“字符數(shù)組與字符串”介紹了字符串與字符數(shù)組的相關知識,使學習者能夠處理與字符串和字符數(shù)組相關的問題。
第9章“結構和聯(lián)合”介紹了結構和聯(lián)合的基本概念,使學生能夠綜合使用數(shù)組、指針以及結構和聯(lián)合來解決一些實際問題。
第10章“文件”介紹了文件的概念以及處理文件問題所涉及到的函數(shù),使學生在掌握常用文件函數(shù)的基礎上來解決一些實際問題。
第11章“指針與鏈表”介紹了指針的高級使用,使學習者能夠處理涉及指針數(shù)組、函數(shù)指針和指針函數(shù)的相關問題,同時,介紹了單鏈表的概念、創(chuàng)建、操作、輸出等。
第12章“位運算”介紹了位運算的相關知識,使學生對位運算有一個較為系統(tǒng)的認識并能夠使用所學的位運算知識解決相關問題。
第13章“從C到C++”介紹了C與C++在基本操作上的區(qū)別,以使讀者對C++的基本操作有初步的了解。
在本教材的編寫過程中參考了許多同行的著作,有的甚至還不方便列在參考目錄中,作者在此一并表達感謝之情。以上各部分都可以獨立教學,自成體系。教師可根據(jù)情況適當取舍。感謝鄭州輕工業(yè)學院和電子工業(yè)出版社的大力支持。
本書由鄭州輕工業(yè)學院的尚展壘、王鵬遠、陳嫄玲等編著,參加本書編寫的還有鄭州輕工業(yè)學院的蘇虹、李萍,其中尚展壘任主編,王鵬遠、陳嫄玲、蘇虹、李萍任副主編。第1、5章由陳嫄玲編寫,第2、6章由蘇虹編寫,第3、9、12章由尚展壘編寫,第4、8章由李萍編寫,第7、10、11、13章和附錄由王鵬遠編寫。在組織編寫的過程中,尚展壘負責本書的審稿工作,王鵬遠負責本書的統(tǒng)稿工作。
如果您能夠愉快地讀完本教材,并告之身邊的朋友,原來C語言并不難學,那就是作者最大的欣慰。盡管作者盡了最大努力,也有良好而負責任的態(tài)度,但是由于作者學識所限,難免存在缺點和錯誤,從而影響寫作目的,因此,懇請各位讀者批評指正,以在再版時修訂。
編著者
尚展壘,鄭州輕工業(yè)學院教授,實驗室主任,兼任河南省高等學校計算機教育研究會副秘書長。多次獲得科研及教學成果獎,出版教材多部,發(fā)表核心期刊論文十余篇。
第1章 程序設計基礎 1
1.1 程序設計與計算思維 1
1.2 算法 5
1.3 軟件的編制步驟 11
1.4 C程序設計語言的產生與特點 12
1.5 簡單程序設計 13
1.5.1 C語言的字符集 13
1.5.2 簡單C程序舉例 15
1.6 錯誤解析 18
本章小結 18
習題1 18
第2章 數(shù)據(jù)類型、運算符與表達式 20
2.1 數(shù)據(jù)類型 20
2.1.1 變量與常量 21
2.2.2 整型數(shù)據(jù) 23
2.2.3 實型數(shù)據(jù) 26
2.2.4 字符型數(shù)據(jù) 27
2.3 運算符與表達式 31
2.3.1 C運算符簡介 31
2.3.2 算術運算符和算術表達式 32
2.3.3 關系運算符與關系表達式 33
2.3.4 邏輯運算符與邏輯表達式 34
2.3.5 賦值運算符和賦值表達式 35
2.3.6 逗號運算符和逗號表達式 38
2.3.7 自增、自減運算符 39
2.3.8 條件運算符和條件表達式 39
2.4 不同類型數(shù)據(jù)之間的轉換 40
2.5 錯誤解析 42
本章小結 43
習題2 44
第3章 編譯預處理 46
3.1 宏定義 46
3.1.1 符號常量(不帶參數(shù))的宏定義 47
3.1.2 帶參數(shù)的宏定義 48
3.1.3 取消宏定義(#undef) 50
3.2 文件包含 51
3.3 條件編譯 52
3.4 錯誤解析 53
本章小結 54
習題3 54
第4章 選擇結構 56
4.1 if語句 56
4.1.1 if語句中的條件表示 56
4.1.2 if語句的三種形式 57
4.1.3 復合語句在分支語句中的應用 62
4.1.4 if語句的嵌套 63
4.1.5 條件運算符與條件表達式 65
4.2 switch語句 66
4.3 應用程序舉例 70
4.4 錯誤解析 72
本章小結 73
習題4 74
第5章 循環(huán)結構 79
5.1 while語句 79
5.2 for語句 84
5.3 do…while語句 89
5.4 多重循環(huán)結構 93
5.5 break語句和continue語句 98
5.5.1 break語句 98
5.5.2 continue語句 99
5.6 應用程序舉例 101
5.7 錯誤解析 109
本章小結 113
習題5 114
第6章 函數(shù) 116
6.1 函數(shù)的基本概念 116
6.1.1 模塊化程序設計 116
6.1.2 C程序的一般結構 117
6.1.3 函數(shù)的定義 118
6.2 函數(shù)的使用 120
6.2.1 函數(shù)的調用 120
6.2.2 函數(shù)的參數(shù)傳遞 123
6.3 函數(shù)的傳址引用 125
6.3.1 地址的存儲與使用 125
6.3.2 指針說明和指針對象的引用 126
6.4 變量的存儲類型及作用域 129
6.4.1 變量的存儲類型 130
6.4.2 局部變量與全局變量 131
6.5 函數(shù)的遞歸調用 134
6.5.1 遞歸的基本思想 134
6.5.2 最大公約數(shù) 135
6.5.3 最近共同祖先 136
6.6 錯誤解析 137
習題6 138
第7章 數(shù)組 140
7.1 一維數(shù)組的定義及使用 140
7.1.1 一維數(shù)組的定義 140
7.1.2 一維數(shù)組的引用 142
7.1.3 一維數(shù)組的初始化 144
7.1.4 程序舉例 147
7.2 一維數(shù)組與指針運算 152
7.2.1 一維數(shù)組的數(shù)組名 152
7.2.2 一維數(shù)組的下標與指針 153
7.2.3 作為函數(shù)參數(shù)的一維數(shù)組的數(shù)組名 157
7.3 二維數(shù)組的定義及使用 162
7.3.1 二維數(shù)組的定義 162
7.3.2 二維數(shù)組元素的引用 163
7.3.3 二維數(shù)組的初始化 164
7.3.4 二維數(shù)組應用舉例 166
7.4 二維數(shù)組與指針運算 168
7.4.1 二維數(shù)組的數(shù)組名 168
7.4.2 二維數(shù)組的下標與指針 168
7.4.3 作為函數(shù)參數(shù)的二維數(shù)組的數(shù)組名 170
7.5 使用內存動態(tài)分配實現(xiàn)動態(tài)數(shù)組 175
7.5.1 動態(tài)內存分配的步驟 176
7.5.2 動態(tài)內存分配函數(shù) 176
7.6 錯誤解析 178
本章小結 179
習題7 180
第8章 字符數(shù)組與字符串 182
8.1 字符數(shù)組 182
8.1.1 字符數(shù)組的定義 182
8.1.2 字符數(shù)組的初始化 183
8.1.3 字符數(shù)組的賦值 183
8.2 字符串 184
8.2.1 字符串常量 184
8.2.2 利用字符串對字符數(shù)組初始化 184
8.2.3 字符數(shù)組與字符串的輸入、輸出 185
8.2.4 字符串處理函數(shù) 189
8.2.5 字符指針 191
8.3 字符數(shù)組與字符串應用舉例 194
8.4 錯誤解析 198
本章小結 201
習題8 201
第9章 結構和聯(lián)合 204
9.1 結構的聲明與引用 204
9.1.1 結構的聲明 204
9.1.2 結構的引用 207
9.2 結構數(shù)組的聲明、引用和初始化 208
9.2.1 結構數(shù)組的聲明與引用 208
9.2.2 結構數(shù)組的初始化 209
9.3 聯(lián)合 211
9.3.1 聯(lián)合的定義 211
9.3.2 聯(lián)合變量的說明 212
9.3.3 聯(lián)合變量的賦值和使用 212
9.4 應用程序舉例 215
9.5 錯誤解析 217
本章小結 218
習題9 218
第10章 文件 220
10.1 文件概述 220
10.2 文件的使用 221
10.2.1 文件的聲明 222
10.2.2 文件的打開與關閉 222
10.2.3 文件的寫/讀 224
10.3 隨機文件的讀/寫 233
10.4 應用程序舉例 235
10.5 錯誤解析 240
本章小結 241
習題10 241
第11章 指針與鏈表 243
11.1 數(shù)組、地址與指針 243
11.1.1 數(shù)組、地址與指針的關系 243
11.1.2 一維數(shù)組中的地址與指針 244
11.1.3 二維數(shù)組中的地址與指針 246
11.2 指針數(shù)組與指向指針的指針 248
11.2.1 指針數(shù)組 248
11.2.2 指向指針的指針 251
11.3 指針數(shù)組作為main()函數(shù)的參數(shù) 253
11.3 指向函數(shù)的指針―函數(shù)指針 254
11.4 指針作為函數(shù)的返回值―指針函數(shù) 256
11.5 鏈表 258
11.5.1 鏈表的概念 258
11.5.2 鏈表的實現(xiàn) 258
11.5.3 單向鏈表的操作 259
11.5.4 鏈表輸出函數(shù) 261
11.6 應用程序舉例 262
11.7 常見錯誤及解決辦法 263
本章小結 265
習題11 267
第12章 位運算 270
12.1 位運算的概念 270
12.1.1 字節(jié)與位 270
12.1.2 補碼 271
12.2 二進制位運算 272
12.2.1 二進制位運算 272
12.2.2 位復合賦值運算符 279
12.3 應用程序舉例 279
12.4 錯誤解析 280
本章小結 280
習題12 280
第13章 從C語言到C++語言 282
13.1 盡量用const和inline而不用#define 282
13.2 盡量用<iostream>而不用<stdio.h> 284
13.3 盡量用new和delete而不用malloc和free 286
13.4 盡量使用C++語言風格的注釋 287
13.5 錯誤解析 287
本章小結 288
習題13 288
附錄A 常見的C關鍵字 289
附錄B C運算符的優(yōu)先級與結合性 290
附錄C 常用字符與ASCII碼對照表 291
附錄D 常用ANSI C 標準庫函數(shù) 293
參考文獻 300