本書以Visual C++ 6.0為工具, 介紹C語言程序設計的有關技術與相關應用以及結構化程序程序設計的基本思想與基本方法, 內容包括C語言概述、編程基礎、控制結構、數組、函數、指針、構造類型、文件操作、類型定義與編譯預處理、應用系統 (程序) 設計與實現, 并附有大量的各類習題以及相應的實驗指導。
本書結合教學實踐與經驗,遵循程序設計與案例教學的基本思想,以Visual C++ 6.0為工具,以應用為導向,以實用為原則,以能力提升為目標,以典型代碼、經典實例、完整案例為依托,按照由淺入深、循序漸進的方式,精心設計,合理安排,全面介紹了C語言程序設計的有關技術與相關應用以及結構化程序設計的基本思想與基本方法。全書實例翔實,案例豐富,編排合理,循序漸進,結構清晰,內容主要包括C語言概述、編程基礎、控制結構、數組、函數、指針、構造類型、文件操作、類型定義與編譯預處理、應用系統(程序)設計與實現等。各章均有“本章要點”“學習目標”與“本章小結”,既便于抓住重點、明確目標,也利于溫故知新、總結提高。書中的諸多內容亦設有相應的“說明”“注意”“提示”等知識點,以便于讀者的理解與提高,并為其帶來“原來如此”“豁然開朗”的美妙感覺。此外,各章均安排有大量的各類習題,以利于讀者的及時檢測、理解掌握。書末還附有全面的實驗指導,便于讀者的上機實踐、練習提高。
本書內容全面,緊扣基礎,面向應用,解析到位,語言流暢,通俗易懂,準確嚴謹,頗具特色,集系統性、條理性于一身,融實用性、技巧性于一體,注重算法設計與應用開發能力的培養,可充分滿足課程教學的實際需要,適合各個層面、各種水平的讀者,既可作為各高校本科或高職高專計算機、電子商務、信息管理與信息系統及相關專業高級語言程序設計、程序設計基礎、C語言程序設計等課程的教材或教學參考書,也可作為C語言程序設計人員的技術參考書以及初學者的自學教程。
C語言是目前國內外廣泛使用的一種計算機高級語言,也是當今諸多高校普遍開設的第一門程序設計教學語言。作為一種面向過程的結構化程序設計語言,C語言對于結構化程序設計基本思想與方法的學習來說是極其有利的。正因如此,各高校計算機、電子商務、信息管理與信息系統及相關專業程序設計方面的教學大多選用C語言作為入門語言,以利于學生切實掌握程序設計的基本方法與技術,有效提升學生的編程技能以及分析解決實際問題的能力,并為后續有關語言的學習與實際應用的開發奠定良好的基礎。
本書結合教學實踐與經驗,遵循程序設計與案例教學的基本思想,以VisualC++6.0為工具,以應用為導向,以實用為原則,以能力提升為目標,以典型代碼、經典實例、完整案例為依托,按照由淺入深、循序漸進的方式,精心設計,合理安排,全面介紹了C語言程序設計的有關技術與相關應用以及結構化程序設計的基本思想與基本方法。全書實例翔實,案例豐富,編排合理,循序漸進,結構清晰,內容主要包括C語言概述、編程基礎、控制結構、數組、函數、指針、構造類型、文件操作、類型定義與編譯預處理、應用系統(程序)設計與實現等。各章均有“本章要點”“學習目標”與“本章小結”,既便于抓住重點、明確目標,也利于溫故知新、總結提高。書中的諸多內容亦設有相應的“說明”“注意”“提示”等知識點,以便于讀者的理解與提高,并為其帶來“原來如此”“豁然開朗”的美妙感覺。此外,各章均安排有大量的各類習題,以利于讀者的及時檢測、理解掌握。書末還附有全面的實驗指導,便于讀者的上機實踐、練習提高。
本書內容全面,緊扣基礎,面向應用,解析到位,語言流暢,通俗易懂,準確嚴謹,頗具特色,集系統性、條理性于一身,融實用性、技巧性于一體,注重算法設計與應用開發能力的培養,可充分滿足課程教學的實際需要,適合各個層面、各種水平的讀者,既可作為各高校本科或高職高專計算機、電子商務、信息管理與信息系統及相關專業高級語言程序設計、程序設計基礎、C語言程序設計等課程的教材或教學參考書,也可作為C語言程序設計人員的技術參考書以及初學者的自學教程。
本書的寫作與出版,得到了清華大學出版社的大力支持與幫助,在此表示衷心感謝。在緊張的寫作過程中,自始至終也得到了家人、同事的理解與支持,在此一并深表謝意。
由于作者經驗不足、水平有限,且時間較為倉促,書中不妥之處在所難免,懇請廣大讀者多加指正、不吝賜教,并將寶貴的意見或建議反饋至作者的電子郵箱。
編者
第1章 C語言概述 1
1.1 C語言簡介 2
1.2 C語言的基本語法 4
1.3 C語言程序的基本結構 10
1.4 C語言程序的編輯與運行 15
本章小結 18
習題 19
第2章 編程基礎 23
2.1 數據類型 24
2.2 常量 26
2.3 變量 30
2.3.1 變量的定義 30
2.3.2 變量的初始化與賦值 30
2.3.3 變量的作用域 31
2.4 運算符與表達式 32
2.4.1 算術運算 32
2.4.2 賦值運算 34
2.4.3 關系運算 36
2.4.4 邏輯運算 38
2.4.5 條件運算 40
2.4.6 字長運算 41
2.4.7 位運算 42
2.4.8 逗號運算 44
2.5 數據類型轉換 45
2.5.1 自動類型轉換 45
2.5.2 強制類型轉換 46
2.6 格式化輸入與輸出函數 47
2.6.1 格式化輸入函數 47
2.6.2 格式化輸出函數 50
2.7 單字符輸入與輸出函數 53
本章小結 55
習題 55
第3章 控制結構 61
3.1 結構化程序設計簡介 62
3.2 順序結構程序的設計 67
3.3 分支結構程序的設計 68
3.3.1 if語句 68
3.3.2 switch語句 75
3.3.3 分支結構的嵌套 76
3.4 循環結構程序的設計 77
3.4.1 while語句 77
3.4.2 do…while語句 78
3.4.3 for語句 79
3.4.4 break語句 82
3.4.5 continue語句 82
3.4.6 goto語句 84
3.4.7 循環結構的嵌套 85
3.5 控制結構的綜合實例 87
本章小結 93
習題 94
第4章 數組 101
4.1 數組簡介 102
4.2 一維數組 102
4.2.1 一維數組的定義 102
4.2.2 一維數組的初始化 103
4.2.3 一維數組的存儲形式 103
4.2.4 一維數組的應用實例 104
4.3 多維數組 107
4.3.1 多維數組的定義 107
4.3.2 多維數組的初始化 108
4.3.3 多維數組的存儲形式 108
4.3.4 多維數組的應用實例 110
4.4 字符數組與字符串 113
4.4.1 字符數組的初始化 113
4.4.2 字符數組的輸入與輸出 113
4.4.3 字符數組的應用實例 114
4.4.4 字符串處理函數及其應用
實例 116
4.5 數組的綜合實例 119
本章小結 129
習題 129
第5章 函數 135
5.1 函數簡介 136
5.2 函數的定義 137
5.3 函數的調用 140
5.3.1 函數的調用形式與執行
過程 140
5.3.2 函數的作用域與函數聲明 141
5.4 函數的數據傳遞 142
5.4.1 數據的傳送 143
5.4.2 結果的返回 144
5.5 函數的嵌套調用 152
5.6 函數的遞歸調用 153
5.7 函數與變量 155
5.7.1 變量的作用域 155
5.7.2 變量的生命期 159
5.8 內部函數與外部函數 169
5.9 庫函數的使用 171
5.10 函數的綜合實例 176
本章小結 182
習題 182
第6章 指針 189
6.1 指針簡介 190
6.2 指針的定義 192
6.3 指針的運算 193
6.3.1 指針運算符 193
6.3.2 指針的算術運算 195
6.3.3 指針的比較運算 197
6.3.4 指針的賦值運算 198
6.4 指針與數組 199
6.4.1 指向一維數組的指針 199
6.4.2 指向多維數組的指針 201
6.5 字符指針與字符串 202
6.6 指針數組 205
6.6.1 指針數組簡介 205
6.6.2 指針數組的應用 206
6.6.3 main()函數參數中的指針
數組 209
6.7 指針型函數 211
6.8 函數指針 212
6.8.1 函數指針簡介 212
6.8.2 函數指針的應用 213
6.9 多級指針 214
6.10 動態指針 216
6.10.1 動態指針與動態內存分配 216
6.10.2 動態內存分配函數 216
6.10.3 動態指針與動態內存分配
函數的使用 218
6.11 指針的綜合實例 219
本章小結 224
習題 225
第7章 構造類型 233
7.1 構造類型簡介 234
7.2 結構體 234
7.2.1 結構體簡介 234
7.2.2 結構體的聲明 234
7.2.3 結構體變量的定義 235
7.2.4 結構體成員的引用 236
7.2.5 結構體數組 238
7.2.6 結構體指針 241
7.2.7 結構體型函數 243
7.2.8 結構體指針型函數 245
7.2.9 結構體的嵌套 247
7.2.10 結構體的綜合實例 248
7.3 聯合體 253
7.3.1 聯合體簡介 253
7.3.2 聯合體的聲明 253
7.3.3 聯合體變量的定義 254
7.3.4 聯合體成員的引用 255
7.3.5 聯合體的綜合實例 256
7.4 枚舉 257
7.4.1 枚舉簡介 257
7.4.2 枚舉類型的聲明 258
7.4.3 枚舉變量的定義 258
7.4.4 枚舉變量的使用 259
7.4.5 枚舉的綜合實例 259
7.5 位段 261
7.5.1 位段簡介 261
7.5.2 位段類型的聲明 261
7.5.3 位段變量的定義 262
7.5.4 位段變量的使用 263
7.5.5 位段的綜合實例 264
本章小結 266
習題 266
第8章 文件操作 273
8.1 文件簡介 274
8.2 文件的基本操作 275
8.2.1 文件的打開函數fopen() 275
8.2.2 文件的關閉函數fclose() 277
8.3 文件的管理操作 277
8.3.1 文件的重命名函數
rename() 277
8.3.2 文件的刪除函數remove() 278
8.3.3 系統命令的執行函數
system() 279
8.4 文件的讀寫操作 281
8.4.1 文件的字符讀函數fgetc() 281
8.4.2 文件的字符寫函數fputc() 281
8.4.3 文件的字符串讀函數
fgets() 284
8.4.4 文件的字符串寫函數
fputs() 284
8.4.5 文件的數據塊讀函數
fread() 286
8.4.6 文件的數據塊寫函數
fwrite() 286
8.4.7 文件的格式化讀函數
fscanf() 288
8.4.8 文件的格式化寫函數
fprintf() 288
8.5 文件的定位操作 290
8.5.1 讀寫指針的復位函數
rewind() 290
8.5.2 讀寫指針的獲取函數
ftell() 290
8.5.3 讀寫指針的設置函數
fseek() 290
8.5.4 文件結束的檢測函數
feof() 291
8.6 文件的錯誤處理 294
8.6.1 操作錯誤的檢測函數
ferror() 294
8.6.2 錯誤狀態的清除函數
clearerr() 294
8.7 文件操作的綜合實例 295
本章小結 298
習題 298
第9章 類型定義與編譯預處理 303
9.1 類型定義 304
9.2 編譯預處理 305
9.2.1 宏定義 305
9.2.2 文件包含 309
9.2.3 條件編譯 311
本章小結 315
習題 315
第10章 應用系統(程序)設計與實現 321
10.1 應用系統——職工管理系統 322
10.1.1 分析與設計 322
10.1.2 編碼與實現 323
10.2 游戲程序——
“石頭-剪刀-布” 332
10.2.1 分析與設計 332
10.2.2 編碼與實現 333
本章小結 341
習題 341
附錄 實驗指導 343
參考文獻 351
第4章 數組
本章要點:
一維數組;多維數組;字符數組與字符串;字符串處理函數。
學習目標:
了解數組的基本概念;掌握一維數組、多維數組的基本方法;掌握字符數組在字符串處理中的應用方法;掌握字符串處理函數的使用方法。
4.1 數組簡介
一般情況下,只需定義多個類型相同的變量,即可同時處理多個相同類型的數據。但是,當同類數據較多時,若再采用分別定義變量的方法,就很不方便了。在這種情況下,較為明智的選擇就是使用數組。
數組是若干個類型相同的數據的有序集合。其中,構成數組的各個數據稱為數組的元素。每個數組都有一個名稱,即數組名。使用數組名并指定下標,即可訪問相應數組中所包含的各個元素。實際上,數組中的每一個元素,都相當于一個普通的變量。
根據維數的多少,數組可分為一維數組、二維數組、三維數組、……、n維數組。其中,一維數組是最基本的數組,而二維數組、三維數組等維數大于1的數組一般統稱為多維數組。在多維數組中,二維數組是最常用的。
在C語言中,數組與變量一樣,遵循“先定義,后使用”的原則。
4.2 一 維 數 組
在C語言中,一維數組就是數組名后只有一對方括號的數組。
4.2.1 一維數組的定義
定義一維數組的基本格式為:
數據類型 數組名[元素個數];
其中,數組名必須符合標識符的命名規則;元素個數必須用方括號括起來。在此,元素個數用于指定數組的大小,可以是一個值大于0的整型常量表達式。
定義好一維數組后,即可根據需要引用其所包含的各個元素,格式為:
數組名[元素下標]
其中,元素下標為相應元素在數組中的位置索引或序號,同樣要用方括號括起來,可以是一個整型表達式(其值應大于或等于0,并小于數組的元素個數)。
例如,定義一個包含10個元素的字符型數組string,語句為:
char string[10];
在此,數組string的各個元素分別為string[0]、string[1]、string[2]、…、string[9]。
注意: 在C語言中,數組元素的下標是從0開始的。
必要時,可用符號常量或包含符號常量的表達式來指定數組的大小。例如,以下關于數組的定義是正確的。
#define SIZE 50
...
char string[SIZE];
int number[15*SIZE];
在定義數組時,數組的大小不能用變量或含有變量的表達式指定。例如,以下關于數組的定義是錯誤的。
……