《C語言程序設計》共分14章,主要內容包括C語言概述,基本數據類型、運算符與表達式,順序結構程序設計,選擇結構程序設計,循環結構程序設計,數組,函數,編譯預處理,指針,結構體、共用體及枚舉類型,文件,C++基礎,VC++6.0開發環境及程序測試與調試,上機實驗內容等;各章后均附有大量習題。書后附有完整的ASCII代碼對照表、C語言中的關鍵字、運算符優先級和結合方向、常用庫函數。
《C語言程序設計》內容豐富、新穎,圖文并茂,通俗易懂,實用性強,可作為高等學校非計算機專業的計算機基礎課教材,也可作為應用計算機人員的學習參考書。
《C語言程序設計》是根據教育部高等學校計算機科學與技術教學指導委員會編制的《關于進一步加強高等學校計算機基礎教學的意見暨計算機基礎課程教學基本要求(試行)》中有關“C語言程序設計”課程的教學要求和大綱編寫的,屬于較高要求的C語言版本,同時兼顧了全國計算機等級考試二級C的筆試和機試。《C語言程序設計》考慮到初學者的認知規律,選材新穎,既注意了知識的系統性、完整性,又兼顧了實用性;文字敘述深入淺出。概念清晰,通俗易懂,每章都配有導讀、小結,便于自學;同時用大量的典型實例化解各章的難點,突出編程解決問題的思想和方法,注重能力培養和思維訓練。《C語言程序設計》包括理論教學內容和實驗指導,實驗內容與理論教學內容的章節相對應,并介紹了程序調試與測試。河南省精品課程配套教材,教學改革結晶,一線教師智慧,內容系統完整,案例典型豐富,訓練思維能力,掌握編程藝術。
C語言是國際上廣泛流行的一種面向過程的計算機高級語言,其歷史悠久,發展相當迅速。后來發展起來的c++、Java、c群等語言,無不是在其基礎上進行擴充或改造的。C語言與其他高級語言相比,形式簡潔,數據類型豐富,表達能力強,運算豐富,程序設計靈活,可讀性和可移植性好,目標程序效率高,既具有低級語言的特點,又具有完善的模塊化結構,.體現了結構化程序設計的思想,適合于培養良好的編程風格和優秀的程序設計技術的訓練。它是繼PASCAL語言之后的又一門優秀的課程教學語言,并且是教學需要與實際應用相結合的一門語言。C語言具有很強的處理功能,不僅用于開發系統軟件,也可用于開發應用軟件。
學習C語言,起初會覺得要記的東西太多,這是由于它太靈活了。但是學到一定程度,就會嘗到甜頭,就會體會出C語言的特色。C語言中的指針是一個核心,是今后開發工作中的得力助手,因為在使用C/C++的實際工作中指針無處不見,很多參數完全就是指針化的。雖然Java從安全性方面考慮摒棄了指針,但從性能上來說,卻得不償失。要學好C語言,就要透徹理解概念,輔之以大量編程訓練和上機實驗。只靠看書學不好c語言,要積極實踐,善于思考,結合具體的項目(哪怕是很小的項目)學用相長。堅持下去,就會成功。
第1章 C語言概述 1
1.1 C語言的發展及特點 1
1.1.1 C語言的發展 1
1.1.2 C語言的特點 2
1.2 C語言程序的基本結構 3
1.3 算法及其描述 6
1.3.1 算法的概念 6
1.3.2 算法的描述方法 7
1.4 程序設計方法 11
1.4.1 程序設計的一般步驟 11
1.4.2 結構化程序設計方法 12
本章小結 13
習題 14
第2章 基本數據類型、運算符與表達式 15
2.1 C語言的數據類型 15
2.2 常量和變量 16
2.2.1 常量 16
2.2.2 變量 17
2.3 整型數據 18
2.3.1 整型常量的表示 18
2.3.2 整型變量 18
2.3.3 整型常量的類型 20
2.4 實型數據 20
2.4.1 實型常量的表示 20
2.4.2 實型變量 21
2.4.3 實型常量的類型 22
2.5 字符型數據 22
2.5.1 字符型常量 22
2.5.2 字符變量 24
2.6 算術運算符與算術表達式 24
2.6.1 基本算術運算符 25
2.6.2 算術表達式及算術運算符的優先級和結合性 25
2.6.3 自增、自減運算符 26
2.7 賦值運算符與賦值表達式 27
2.7.1 賦值運算符 27
2.7.2 復合賦值運算符 27
2.7.3 賦值表達式 28
2.8 逗號運算符與逗號表達式 28
2.9 位運算符 28
2.9.1 位運算符 28
2.9.2 位運算復合賦值運算符 30
2.10 數據類型轉換與計算類型長度運算符 30
2.10.1 自動類型轉換 30
2.10.2 強制類型轉換 32
2.10.3 計算類型長度運算符 32
本章小結 33
習題 33
第3章 順序結構程序設計 36
3.1 C語言語句概述 36
3.1.1 簡單語句 36
3.1.2 復合語句 37
3.2 字符數據的輸入/輸出 37
3.2.1 字符輸出函數(putchar) 38
3.2.2 字符輸入函數(getchar) 38
3.3 格式化輸入/輸出函數 39
3.3.1 格式輸出函數(printf) 39
3.3.2 格式輸入函數(scanf) 42
3.4 順序結構程序設計舉例 45
本章小結 46
習題 46
第4章 選擇結構程序設計 50
4.1 關系運算符和關系表達式 50
4.1.1 關系運算符 50
4.1.2 關系表達式 51
4.2 邏輯運算符和邏輯表達式 51
4.2.1 邏輯運算符 51
4.2.2 邏輯表達式 52
4.3 if語句及其構成的選擇結構 53
4.3.1 if語句的形式 53
4.3.2 if語句的嵌套 55
4.3.3 條件運算符和條件表達式 56
4.4 switch語句及其構成的選擇結構 58
4.4.1 switch語句的形式 58
4.4.2 在switch語句中使用break語句 59
4.5 選擇結構程序設計舉例 60
本章小結 62
習題 62
第5章 循環結構程序設計 67
5.1 概述 67
5.2 while語句 68
5.3 do-while語句 69
5.4 for語句 71
5.5 break語句和continue語句 73
5.5.1 break語句 73
5.5.2 continue語句 73
5.6 循環的嵌套 74
5.7 循環結構程序設計舉例 75
本章小結 78
習題 78
第6章 數組 85
6.1 一維數組 85
6.1.1 一維數組的定義 85
6.1.2 一維數組元素的引用 86
6.1.3 一維數組的存儲與初始化 87
6.1.4 一維數組程序設計舉例 88
6.2 二維數組與多維數組 89
6.2.1 二維數組的定義 89
6.2.2 二維數組元素的引用 90
6.2.3 二維數組的初始化 91
6.2.4 二維數組程序設計舉例 92
6.2.5 多維數組概述 93
6.3 字符數組與字符串 93
6.3.1 字符數組的定義 93
6.3.2 字符數組的初始化 93
6.3.3 字符數組元素的引用 94
6.3.4 字符串與字符數組 94
6.3.5 字符串處理函數 96
6.3.6 字符數組程序設計舉例 97
本章小結 100
習題 100
第7章 函數 106
7.1 模塊化程序設計 106
7.1.1 模塊化程序設計概念 106
7.1.2 函數概述 107
7.2 函數的定義 108
7.2.1 函數定義的一般形式 108
7.2.2 函數的返回 109
7.3 函數的調用 109
7.3.1 函數調用的一般方式 109
7.3.2 函數參數的傳遞 110
7.3.3 函數的聲明 111
7.3.4 函數的嵌套調用 111
7.4 函數的遞歸調用 112
7.5 數組作為函數參數 114
7.5.1 數組元素作函數實參 115
7.5.2 數組名作為函數參數 115
7.5.3 多維數組名作為函數參數 116
7.6 變量的作用域 117
7.6.1 局部變量 117
7.6.2 全局變量 118
7.7 變量的存儲類別 119
7.7.1 變量的生存期 119
7.7.2 局部變量的存儲類別 120
7.7.3 全局變量的生存期與作用域 121
7.8 內部函數和外部函數 123
本章小結 124
習題 124
第8章 編譯預處理 131
8.1 宏定義 131
8.1.1 無參宏定義 131
8.1.2 帶參宏定義 133
8.2 條件編譯 137
8.3 文件包含 139
本章小結 141
習題 141
第9章 指針 143
9.1 地址和指針的概念 143
9.2 指針變量 144
9.2.1 指針變量的定義與賦值 144
9.2.2 指針變量的引用 145
9.3 指針與數組 147
9.3.1 指針與一維數組 147
9.3.2 指針與二維數組 150
9.4 指針與字符串 153
9.4.1 指向字符數組的指針變量 153
9.4.2 指向字符串常量的指針變量 153
9.5 指針與函數 155
9.5.1 指針作為函數的參數 155
9.5.2 指向函數的指針(函數指針) 158
9.5.3 返回指針值的函數(指針函數) 160
9.6 指針數組和多級指針 161
9.6.1 指針數組的定義 161
9.6.2 指針數組與字符串 162
9.6.3 多級指針 163
9.6.4 指針數組作為函數參數 163
9.6.5 帶參main函數 164
本章小結 165
習題 166
第10章 結構體、共用體及枚舉類型 173
10.1 結構體變量的定義 173
10.1.1 結構體類型的定義 173
10.1.2 結構體變量的定義 174
10.2 結構體變量的引用和初始化 175
10.2.1 結構體變量的引用 175
10.2.2 結構體變量的初始化 176
10.3 結構體數組 176
10.3.1 結構體數組的定義 176
10.3.2 結構體數組的初始化 177
10.3.3 結構體數組的引用 177
10.4 結構體指針變量 178
10.4.1 指向結構體變量的指針 178
10.4.2 指向結構體數組的指針 179
10.5 結構體與函數 180
10.5.1 結構體變量作為函數參數 180
10.5.2 返回結構體類型數據的函數 181
10.5.3 結構體指針作為函數參數 182
10.6 位段結構體 182
10.6.1 位段結構體類型及其變量的定義 182
10.6.2 位域的引用 183
10.7 鏈表 184
10.7.1 鏈表概述 184
10.7.2 內存動態管理 185
10.7.3 創建鏈表 186
10.7.4 順序訪問鏈表中的結點 187
10.7.5 在鏈表中插入結點 187
10.7.6 在鏈表中刪除結點 190
10.8 共用體 192
10.8.1 共用體類型及其變量的定義 192
10.8.2 共用體變量的引用 193
10.9 枚舉類型 194
10.9.1 枚舉類型和枚舉變量的定義 194
10.9.2 枚舉類型變量的賦值和使用 195
10.10 用typedef定義類型 196
本章小結 196
習題 197
第11章 文件 202
11.1 文件概述 202
11.1.1 文件的概念 202
11.1.2 文件的分類 202
11.2 文件類型指針和文件位置指針 204
11.2.1 文件類型指針 204
11.2.2 文件位置指針 204
11.3 文件的打開和關閉 204
11.3.1 文件打開函數 205
11.3.2 文件關閉函數 206
11.4 文件的讀寫 207
11.4.1 讀寫一個字符的函數 207
11.4.2 塊讀寫函數 208
11.4.3 其他讀寫函數 210
11.5 文件的定位和出錯檢測 211
11.5.1 文件的定位函數 211
11.5.2 出錯檢測函數 212
本章小結 213
習題 213
第12章 C++基礎 218
12.1 概述 218
12.1.1 C++的發展歷程 218
12.1.2 面向對象程序設計 219
12.2 C++對C的擴充 220
12.2.1 C++的輸入/輸出 220
12.2.2 重載函數與缺省參數的函數 222
12.2.3 變量的引用 223
12.2.4 內聯函數 224
12.2.5 作用域運算符 225
12.2.6 new和delete 225
12.3 類與對象 226
12.3.1 類的定義 226
12.3.2 對象 228
12.3.3 構造函數 229
12.3.4 析構函數 231
12.4 繼承與派生 231
12.4.1 繼承與派生的方式 231
12.4.2 派生類的三種繼承方式 232
12.4.3 派生類的構造和析構函數 234
12.5 多態性與虛函數 236
12.5.1 多態性 236
12.5.2 虛函數 237
本章小結 239
習題 239
第13章 VC++ 6.0開發環境及程序測試與調試 242
13.1 VC++ 6.0的主窗口界面 242
13.2 編輯C語言源程序文件 243
13.2.1 新建C源程序文件 244
13.2.2 編輯已存在的文件 246
13.3 編譯、連接和運行程序 246
13.3.1 編譯 247
13.3.2 連接 248
13.3.3 運行 249
13.4 建立和運行多個文件的方法 249
13.5 程序測試與調試 251
13.5.1 程序測試 251
13.5.2 程序調試 253
13.6 常見編譯出錯信息 255
第14章 上機實驗內容 260
14.1 上機實驗總目的和要求 260
14.1.1 上機實驗總目的 260
14.1.2 上機實驗總要求 260
14.2 實驗一 基本數據類型、運算符與表達式 261
14.2.1 實驗目的和要求 261
14.2.2 實驗內容及操作步驟 261
14.2.3 選做題 263
14.3 實驗二 順序和選擇程序設計 263
14.3.1 實驗目的和要求 263
14.3.2 實驗內容及操作步驟 263
14.3.3 選做題 265
14.4 實驗三 循環程序設計 266
14.4.1 實驗目的和要求 266
14.4.2 實驗內容及操作步驟 266
14.4.3 選做題 269
14.5 實驗四 數組 269
14.5.1 實驗目的和要求 269
14.5.2 實驗內容及操作步驟 269
14.5.3 選做題 270
14.6 實驗五 函數(1) 271
14.6.1 實驗目的和要求 271
14.6.2 實驗內容及操作步驟 271
14.6.3 選做題 273
14.7 實驗六 函數(2)與編譯預處理 274
14.7.1 實驗目的和要求 274
14.7.2 實驗內容及操作步驟 274
14.7.3 選做題 275
14.8 實驗七 指針 275
14.8.1 實驗目的和要求 275
14.8.2 實驗內容及操作步驟 275
14.8.3 選做題 276
14.9 實驗八 結構體、共用體與枚舉類型 277
14.9.1 實驗目的和要求 277
14.9.2 實驗內容及操作步驟 278
14.9.3 選做題 280
14.10 實驗九 文件 281
14.10.1 實驗目的和要求 281
14.10.2 實驗內容及操作步驟 281
14.10.3 選做題 282
14.11 實驗十 C++基礎 282
14.11.1 實驗目的和要求 282
14.11.2 實驗內容及操作步驟 282
14.11.3 選做題 283
14.12 實驗十一 綜合程序設計 283
14.12.1 實驗目的和要求 283
14.12.2 實驗內容及步驟 284
14.12.3 選做題 284
附錄Ⅰ ASCII代碼對照表 285
附錄Ⅱ C語言中的關鍵字 286
附錄Ⅲ 運算符優先級和結合方向 287
附錄Ⅳ 常用庫函數 289
參考文獻 294
(3)結構內不存在“死循環”(無終止的循環),在有限時間內必能結束執行過程。已經證明,由以上三種基本結構順序組成的算法結構,可以解決任何復雜的問題。由這三種基本結構所構成的算法屬于“結構化”的算法,這種設計方法也稱為結構化程序設計方法,主要有以下三個要求。(1)結構化程序的控制結構只能由順序、分支和循環三種基本結構構成(當然也可以由這三種基本結構進行組合形成新的結構,但必須要滿足基本結構所要求的三個條件)。(2)整個程序是由若干個這三種結構的程序塊串聯起來的。因為這三種結構都只有一個人口和一個出口,所以可以把它們串聯起來。
(3)整個程序只有一個人口和出口。
“結構化”的目的是為了使程序更容易閱讀,更容易理解。在程序中,每一個基本結構就是一個程序塊,如果把它比作一顆珠子,整個程序就是一串項鏈。當閱讀“結構化”的程序時,人的思維過程剛好和計算機中程序運行的步驟相同,閱讀程序就好像閱讀一篇按時間順序寫的小說,當然容易理解程序“正在做什么”和“做了些什么”。相反,如果程序流向跳來跳去,有多個人口和出口,就好像你在看意識流小說,時間上前后交錯,地點上忽東忽西,情節上支離破碎,不易閱讀和理解。