本書主要介紹C語言基礎知識、程序的控制結構、C語言中的構造型數據類型、指針和鏈表、文件的使用及C語言的特點等內容。
本書包含微課視頻
C語言從誕生之日起就一直保持著旺盛的生命力,在不斷地發展壯大、日臻完善,已經成為目前使用最廣泛的編程語言之一。與其他高級語言相比,C語言處理功能豐富,表達能力強,使用靈活方便,執行程序效率高,可移植性強;具有豐富的數據類型和運算符,語句非常簡單,源程序簡潔清晰;可以直接處理硬件系統和對外圍設備接口進行控制。同時C語言是一種結構化的程序設計語言,支持自頂向下、逐步求精的結構化程序設計技術。另外,C語言程序的函數結構也為實現程序的模塊化設計提供了強有力的保障。因此雖然有C++、Java這樣的后繼者,但到目前為止,它們依然沒有取代C的跡象。尤其C99標準發布以后,C語言的旺盛生命力再次得到了保持和延續。
本教材的編寫者全部是長期在各高等學校教學一線、承擔“C語言程序設計”課程的教學任務的大學教師,這些老師有豐富的教學經驗,并長期從事C語言編程工作,并有著將自己積累的“C語言程序設計”經驗介紹給大家的強烈愿望,因為在教學實踐中,作者感受最深的就是,學習者普遍反映C語言難學難懂,而事實上,學習者感覺難的部分往往并不是C語言的核心內容,學習的過程就是一個學習者與教師、學習者與教材交互的過程,只要遵照一定的學習規律,這個交互過程并不難達成。學習者應該明白選擇一本交互性好的教材是至關重要的。不可否認,一些經典的C語言教材在教學中所起的巨大作用。但是,傳統教材過細的內容組織也讓學習者迷失了方向。另外,本教材也特別強調實踐能力的培養,學習者首先應該學會用適當的編程工具編制、調試程序。學習者在編程實踐中不斷遇到問題、不斷解決問題,自然就會明白許多細節。本教材主張,在介紹核心語法的基礎上,以培養動手編程能力為首要目標,把那些煩瑣煩心的內容留待以后慢慢研究。
本教材共分13章,將C語言的內容由淺入深、層次分明地講述給讀者。把編譯預處理從一般教材的第7章提前到了第3章,讓讀者更早地接觸到相關的內容,以方便在編程中使用。
第1章“程序設計基礎”介紹了程序設計的基本知識,詳細闡述了軟件的編制方法,使學習者對軟件的編制有一個概念上的認識和理解,并能將這些方法應用于后續章節的學習中,同時對計算思維的概念進行簡單的介紹。
第2章“數據類型、運算符與表達式”介紹了C語言的中的變量與常量、基本數據類型,常用的運算符及表達式的運算方式。最后詳細地講述了不同類型數據之間的轉換。
第3章“編譯預處理”介紹了C語言中編譯預處理的相關命令,包括宏定義和宏替換、文件包含(又稱頭文件)、條件編譯。
第4章“選擇結構”介紹了分支結構的相關語法,使學習者能夠解決分支結構所涉及的問題。
第5章“循環結構”介紹了循環結構的相關語法,使學習者能夠解決循環結構所涉及的問題。
第6章“函數”介紹了函數的相關知識,重點介紹了基本使用方法、函數參數的傳值調用和傳址調用,使學習者能夠綜合使用函數參數的傳值調用和傳址調用來解決實際問題。
第7章“數組”介紹了C語言中數值型一維數組和二維數組的相關知識,使學習者能夠熟練使用函數來解決數組的相關問題。
第8章“字符數組與字符串”介紹了字符串與字符數組的相關知識,使學習者能夠處理與字符串和字符數組相關的問題。
第9章“結構和聯合”介紹了結構和聯合的基本概念,使學生能夠綜合使用數組、指針以及結構和聯合來解決一些實際問題。
第10章“文件”介紹了文件的概念以及處理文件問題所涉及到的函數,使學生在掌握常用文件函數的基礎上來解決一些實際問題。
第11章“指針與鏈表”介紹了指針的高級使用,使學習者能夠處理涉及指針數組、函數指針和指針函數的相關問題,同時,介紹了單鏈表的概念、創建、操作、輸出等。
第12章“位運算”介紹了位運算的相關知識,使學生對位運算有一個較為系統的認識并能夠使用所學的位運算知識解決相關問題。
第13章“從C到C++”介紹了C與C++在基本操作上的區別,以使讀者對C++的基本操作有初步的了解。
在本教材的編寫過程中參考了許多同行的著作,有的甚至還不方便列在參考目錄中,作者在此一并表達感謝之情。以上各部分都可以獨立教學,自成體系。教師可根據情況適當取舍。感謝鄭州輕工業學院和電子工業出版社的大力支持。
本書由鄭州輕工業學院的尚展壘、王鵬遠、陳嫄玲等編著,參加本書編寫的還有鄭州輕工業學院的蘇虹、李萍,其中尚展壘任主編,王鵬遠、陳嫄玲、蘇虹、李萍任副主編。第1、5章由陳嫄玲編寫,第2、6章由蘇虹編寫,第3、9、12章由尚展壘編寫,第4、8章由李萍編寫,第7、10、11、13章和附錄由王鵬遠編寫。在組織編寫的過程中,尚展壘負責本書的審稿工作,王鵬遠負責本書的統稿工作。
如果您能夠愉快地讀完本教材,并告之身邊的朋友,原來C語言并不難學,那就是作者最大的欣慰。盡管作者盡了最大努力,也有良好而負責任的態度,但是由于作者學識所限,難免存在缺點和錯誤,從而影響寫作目的,因此,懇請各位讀者批評指正,以在再版時修訂。
編著者
尚展壘,鄭州輕工業學院教授,實驗室主任,兼任河南省高等學校計算機教育研究會副秘書長。多次獲得科研及教學成果獎,出版教材多部,發表核心期刊論文十余篇。
第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章 數據類型、運算符與表達式 20
2.1 數據類型 20
2.1.1 變量與常量 21
2.2.2 整型數據 23
2.2.3 實型數據 26
2.2.4 字符型數據 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 不同類型數據之間的轉換 40
2.5 錯誤解析 42
本章小結 43
習題2 44
第3章 編譯預處理 46
3.1 宏定義 46
3.1.1 符號常量(不帶參數)的宏定義 47
3.1.2 帶參數的宏定義 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章 循環結構 79
5.1 while語句 79
5.2 for語句 84
5.3 do…while語句 89
5.4 多重循環結構 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章 函數 116
6.1 函數的基本概念 116
6.1.1 模塊化程序設計 116
6.1.2 C程序的一般結構 117
6.1.3 函數的定義 118
6.2 函數的使用 120
6.2.1 函數的調用 120
6.2.2 函數的參數傳遞 123
6.3 函數的傳址引用 125
6.3.1 地址的存儲與使用 125
6.3.2 指針說明和指針對象的引用 126
6.4 變量的存儲類型及作用域 129
6.4.1 變量的存儲類型 130
6.4.2 局部變量與全局變量 131
6.5 函數的遞歸調用 134
6.5.1 遞歸的基本思想 134
6.5.2 最大公約數 135
6.5.3 最近共同祖先 136
6.6 錯誤解析 137
習題6 138
第7章 數組 140
7.1 一維數組的定義及使用 140
7.1.1 一維數組的定義 140
7.1.2 一維數組的引用 142
7.1.3 一維數組的初始化 144
7.1.4 程序舉例 147
7.2 一維數組與指針運算 152
7.2.1 一維數組的數組名 152
7.2.2 一維數組的下標與指針 153
7.2.3 作為函數參數的一維數組的數組名 157
7.3 二維數組的定義及使用 162
7.3.1 二維數組的定義 162
7.3.2 二維數組元素的引用 163
7.3.3 二維數組的初始化 164
7.3.4 二維數組應用舉例 166
7.4 二維數組與指針運算 168
7.4.1 二維數組的數組名 168
7.4.2 二維數組的下標與指針 168
7.4.3 作為函數參數的二維數組的數組名 170
7.5 使用內存動態分配實現動態數組 175
7.5.1 動態內存分配的步驟 176
7.5.2 動態內存分配函數 176
7.6 錯誤解析 178
本章小結 179
習題7 180
第8章 字符數組與字符串 182
8.1 字符數組 182
8.1.1 字符數組的定義 182
8.1.2 字符數組的初始化 183
8.1.3 字符數組的賦值 183
8.2 字符串 184
8.2.1 字符串常量 184
8.2.2 利用字符串對字符數組初始化 184
8.2.3 字符數組與字符串的輸入、輸出 185
8.2.4 字符串處理函數 189
8.2.5 字符指針 191
8.3 字符數組與字符串應用舉例 194
8.4 錯誤解析 198
本章小結 201
習題8 201
第9章 結構和聯合 204
9.1 結構的聲明與引用 204
9.1.1 結構的聲明 204
9.1.2 結構的引用 207
9.2 結構數組的聲明、引用和初始化 208
9.2.1 結構數組的聲明與引用 208
9.2.2 結構數組的初始化 209
9.3 聯合 211
9.3.1 聯合的定義 211
9.3.2 聯合變量的說明 212
9.3.3 聯合變量的賦值和使用 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 數組、地址與指針 243
11.1.1 數組、地址與指針的關系 243
11.1.2 一維數組中的地址與指針 244
11.1.3 二維數組中的地址與指針 246
11.2 指針數組與指向指針的指針 248
11.2.1 指針數組 248
11.2.2 指向指針的指針 251
11.3 指針數組作為main()函數的參數 253
11.3 指向函數的指針―函數指針 254
11.4 指針作為函數的返回值―指針函數 256
11.5 鏈表 258
11.5.1 鏈表的概念 258
11.5.2 鏈表的實現 258
11.5.3 單向鏈表的操作 259
11.5.4 鏈表輸出函數 261
11.6 應用程序舉例 262
11.7 常見錯誤及解決辦法 263
本章小結 265
習題11 267
第12章 位運算 270
12.1 位運算的概念 270
12.1.1 字節與位 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運算符的優先級與結合性 290
附錄C 常用字符與ASCII碼對照表 291
附錄D 常用ANSI C 標準庫函數 293
參考文獻 300