C語言是目前使用最廣的程序設(shè)計語言之一,學(xué)好C語言程序設(shè)計對掌握基本編程方法、培養(yǎng)“計算思維”方式、提高解決問題的能力具有重要意義。C語言程序設(shè)計是計算機(jī)專業(yè)學(xué)生的重要基礎(chǔ)課程,也是非計算機(jī)專業(yè)學(xué)生選修的熱門課程。
《C語言程序設(shè)計基礎(chǔ)教程》面向高等學(xué)校各專業(yè),內(nèi)容主要涉及C語言編程的基本知識和結(jié)構(gòu)化編程方法。通過與問題相關(guān)的實例講解,讓學(xué)習(xí)者掌握C語言的基本運算、程序的控制流程、模塊化的設(shè)計方法、指針以及文件等相關(guān)基礎(chǔ)知識。本書注重實踐環(huán)節(jié),每章按照程序設(shè)計在線評測(OJ)系統(tǒng)的實戰(zhàn)題目安排訓(xùn)練。挑選典型實訓(xùn)題目,配合豐富的習(xí)題,精講多練,培養(yǎng)學(xué)習(xí)者程序設(shè)計實踐能力。
“程序設(shè)計基礎(chǔ)”是高等院校計算機(jī)專業(yè)的基礎(chǔ)課程,C語言是程序設(shè)計語言的主流語言。C語言功能豐富、表達(dá)能力強,使用靈活方便,程序執(zhí)行效率高,它不但具有高級語言的功能,而且還具備低級語言的特性。具有完善的模塊程序結(jié)構(gòu),可移植性好,而且可以直接實現(xiàn)對系統(tǒng)硬件的控制,具有較強的系統(tǒng)處理能力。因而,目前大部分院校都選擇C語言作為編程入門語言。
本書根據(jù)教育部計算機(jī)科學(xué)與技術(shù)教學(xué)指導(dǎo)委員會發(fā)布的《高等學(xué)校計算機(jī)科學(xué)與技術(shù)專業(yè)發(fā)展戰(zhàn)略研究報告暨專業(yè)規(guī)范》及《高等學(xué)校計算機(jī)科學(xué)與技術(shù)專業(yè)核心課程教學(xué)實施方案》的教學(xué)基本要求,結(jié)合多年講授C語言程序設(shè)計課程的教學(xué)經(jīng)驗編寫而成。參與本書編寫的老師都是從事程序設(shè)計專業(yè)課或公共課教學(xué)的老師,先后進(jìn)行了10多年的C語言課程的教學(xué)。我們一邊實施教學(xué),一邊進(jìn)行教改研究,先后獲得省級精品課程、省級優(yōu)秀教學(xué)團(tuán)隊及省級教學(xué)名師的殊榮。
本書內(nèi)容豐富,實用性強,采用精講多練的方式,使讀者掌握C語言的基本內(nèi)容及程序設(shè)計的基本方法和編程技巧,逐步建立程序設(shè)計的基本思想,為進(jìn)一步學(xué)習(xí)計算機(jī)相關(guān)專業(yè)打下基礎(chǔ)。本書具有如下特點。
(1) 結(jié)構(gòu)清晰,知識完整。本書內(nèi)容翔實、系統(tǒng)性強,依據(jù)高校教學(xué)大綱組織內(nèi)容,并將實際經(jīng)驗融入基本理論之中。
(2) 學(xué)以致用,注重能力。本書以“基礎(chǔ)知識—例題—實訓(xùn)”為主線,先介紹基礎(chǔ)知識,再講授例題,最后給出實訓(xùn)題目,以便于讀者掌握該章的重點知識并提高編程能力。
(3) 示例豐富,實用性強。本書示例豐富、步驟明確、講解細(xì)致,突出實用性。
(4) 注重規(guī)范,學(xué)用結(jié)合。本書知識點的學(xué)習(xí)與使用緊密結(jié)合,知識點基本上采用即學(xué)即用的原則。在用的同時引導(dǎo)學(xué)生養(yǎng)成良好的編程習(xí)慣,編寫風(fēng)格優(yōu)美、可讀性好、易于維護(hù)的程序代碼。
本書適合作為高校計算機(jī)專業(yè)的學(xué)生學(xué)習(xí)“程序設(shè)計基礎(chǔ)”類課程的教材,也可以作為非計算機(jī)專業(yè)的理工科學(xué)生學(xué)習(xí)“程序設(shè)計語言”的教材。在進(jìn)行公共課教學(xué)時,可根據(jù)實際情況對教材內(nèi)容及上機(jī)實踐內(nèi)容進(jìn)行適當(dāng)?shù)恼{(diào)整。
全書共分為10章,詳細(xì)介紹了初學(xué)者使用C語言進(jìn)行程序設(shè)計所涉及的基本內(nèi)容,每一章均配有例題和習(xí)題。本書第1、10章由孟繁軍編寫,第2、3章由張麗萍編寫,第4、5章由王春暉編寫,第6章由王利江編寫,第7章由俞宗佐編寫,第8章由李慧哲編寫,第9章由朝力萌編寫,附錄由劉東升編寫。全書由孟繁軍統(tǒng)稿,劉東升審核。
本書在編寫過程中得到了許多老師的幫助,在此表示誠摯的感謝。在編寫過程中參考了很多文獻(xiàn),在此一并向文獻(xiàn)的作者表示感謝。由于作者水平有限,書中難免有疏漏和不當(dāng)之處,敬請讀者和專家批評指正。
編 者
第1章 C程序設(shè)計概述 1
1.1 程序設(shè)計語言簡介 1
1.2 C程序設(shè)計語言 2
1.2.1 C語言的發(fā)展歷史 2
1.2.2 C語言的特點 3
1.3 一個簡單的C程序:輸出一行文字 3
1.4 C程序的運行過程與運行環(huán)境 4
1.4.1 C程序的運行過程 4
1.4.2 C程序的常用運行環(huán)境簡介 4
1.5 本章小結(jié) 12
1.6 上機(jī)實訓(xùn) 12
1.7 習(xí)題 13
第2章 C程序設(shè)計入門 14
2.1 程序舉例:兩個數(shù)相加 14
2.2 數(shù)據(jù)的輸入 16
2.3 C語言中的算術(shù)運算 19
2.3.1 C語言中算術(shù)運算符 19
2.3.2 數(shù)據(jù)類型與運算結(jié)果的關(guān)系 19
2.4 數(shù)據(jù)的輸出 20
2.5 程序舉例:計算圓的面積 21
2.5.1 常量 21
2.5.2 宏定義 22
2.6 源程序的書寫格式 24
2.7 本章小結(jié) 24
2.8 上機(jī)實訓(xùn) 25
2.8.1 實訓(xùn)1 a+b的輸入輸出
練習(xí) 25
2.8.2 實訓(xùn)2 輸出練習(xí) 25
2.9 習(xí)題 26
第3章 C程序數(shù)據(jù)的基本運算 28
3.1 數(shù)據(jù)類型 28
3.2 常量 29
3.3 變量 31
3.3.1 類型修飾符 32
3.3.2 變量的定義 33
3.3.3 存儲單元的基本概念 35
3.4 基本運算 35
3.4.1 關(guān)系運算 35
3.4.2 邏輯運算 37
3.4.3 位運算 38
3.4.4 賦值運算 41
3.4.5 其他運算 41
3.4.6 運算符的優(yōu)先級和結(jié)合性 42
3.5 不同類型數(shù)據(jù)之間的轉(zhuǎn)換 44
3.5.1 自動類型轉(zhuǎn)換 44
3.5.2 強制類型轉(zhuǎn)換 45
3.6 本章小結(jié) 45
3.7 上機(jī)實訓(xùn) 46
3.7.1 實訓(xùn)1 關(guān)于圓的運算 46
3.7.2 實訓(xùn)2 判斷較大數(shù) 47
3.8 習(xí)題 47
第4章 C程序控制結(jié)構(gòu)(1) 49
4.1 算法初步 49
4.2 程序控制結(jié)構(gòu) 50
4.3 算法描述 51
4.3.1 流程圖 51
4.3.2 N-S圖 53
4.3.3 偽碼 53
4.4 if語句 54
4.4.1 單分支選擇結(jié)構(gòu) 54
4.4.2 雙分支選擇結(jié)構(gòu) 56
4.4.3 多分支選擇結(jié)構(gòu) 57
4.5 用switch語句實現(xiàn)多分支選擇結(jié)構(gòu) 59
4.6 本章小結(jié) 60
4.7 上機(jī)實訓(xùn) 60
4.7.1 實訓(xùn)1 判斷某年是否是閏年 60
4.7.2 實訓(xùn)2 簡單四則運算 61
4.7.3 實訓(xùn)3 求一元二次方程的根 62
4.8 習(xí)題 64
第5章 C程序控制結(jié)構(gòu)(2) 65
5.1 為什么要使用循環(huán) 65
5.2 三種循環(huán)語句 67
5.2.1 while循環(huán)語句 67
5.2.2 do-while循環(huán)語句 68
5.2.3 for循環(huán)語句 70
5.3 計數(shù)控制的循環(huán) 72
5.4 標(biāo)記控件的循環(huán) 73
5.5 幾種循環(huán)語句的比較 75
5.6 循環(huán)嵌套 76
5.7 流程轉(zhuǎn)移控制語句 77
5.7.1 goto語句 78
5.7.2 break語句 78
5.7.3 continue語句 80
5.8 結(jié)構(gòu)化程序設(shè)計的核心思想 80
5.9 “自頂向下、逐步求精”的設(shè)計方法 81
5.10 本章小結(jié) 84
5.11 上機(jī)實訓(xùn) 85
5.11.1 實訓(xùn)1 求斐波那契(Fibonacci) 數(shù)列 85
5.11.2 實訓(xùn)2 雞兔同籠 86
5.11.3 實訓(xùn)3 求水仙花數(shù) 88
5.11.4 實訓(xùn)4 求?的近似值 89
5.12 習(xí)題 90
第6章 數(shù)組 92
6.1 為什么要使用數(shù)組 92
6.2 一維數(shù)組 93
6.2.1 一維數(shù)組定義 93
6.2.2 數(shù)組元素的使用 94
6.2.3 一維數(shù)組的初始化 95
6.3 字符數(shù)組 95
6.3.1 字符數(shù)組的定義 95
6.3.2 字符數(shù)組的使用 96
6.3.3 字符數(shù)組的初始化 96
6.3.4 字符數(shù)組的輸入與輸出 97
6.3.5 字符串輸入輸出函數(shù) 97
6.3.6 字符串函數(shù) 99
6.4 二維數(shù)組 102
6.5 多維數(shù)組 103
6.6 本章小結(jié) 103
6.7 上機(jī)實訓(xùn) 104
6.7.1 實訓(xùn)1 絕對值排序 104
6.7.2 實訓(xùn)2 兩數(shù)組最短距離 105
6.7.3 實訓(xùn)3 字符替換 106
6.7.4 實訓(xùn)4 數(shù)組旋轉(zhuǎn) 107
6.7.5 實訓(xùn)5 螺旋方陣 109
6.8 習(xí)題 111
第7章 結(jié)構(gòu)體、共用體和枚舉 112
7.1 程序舉例:輸出平均成績最高的學(xué)生信息 112
7.2 結(jié)構(gòu)體的定義 115
7.2.1 結(jié)構(gòu)體類型的定義 115
7.2.2 結(jié)構(gòu)體變量的定義 116
7.3 結(jié)構(gòu)體變量的初始化 118
7.4 對結(jié)構(gòu)體成員的訪問 119
7.5 結(jié)構(gòu)體數(shù)組 120
7.6 共用體 122
7.6.1 共用體的定義 122
7.6.2 共用體變量的引用 124
7.6.3 共用體變量與結(jié)構(gòu)體變量的主要區(qū)別 125
7.6.4 共用體類型的應(yīng)用 126
7.7 枚舉類型 127
7.8 用typedef定義類型 130
7.9 本章小結(jié) 131
7.10 上機(jī)實訓(xùn) 132
7.10.1 實訓(xùn)1 使用結(jié)構(gòu)體和共用體描述客車和貨車 132
7.10.2 實訓(xùn)2 假設(shè)今天是星期日,判斷若干天后是星期幾 133
7.11 習(xí)題 133
第8章 函數(shù)與程序結(jié)構(gòu) 135
8.1 C語言中的程序模塊 135
8.2 函數(shù)的基本知識 136
8.2.1 函數(shù)的定義 137
8.2.2 函數(shù)的調(diào)用 137
8.2.3 函數(shù)原型 137
8.2.4 函數(shù)返回值 138
8.2.5 函數(shù)參數(shù) 140
8.3 函數(shù)的遞歸調(diào)用 141
8.4 數(shù)組做參數(shù) 144
8.5 變量的作用域 146
8.5.1 局部變量 147
8.5.2 全局變量 148
8.5.3 動態(tài)存儲變量 149
8.5.4 靜態(tài)存儲變量 150
8.6 程序舉例 151
8.7 編譯預(yù)處理 154
8.7.1 宏定義 154
8.7.2 條件編譯 157
8.7.3 數(shù)據(jù)類型再命名 159
8.8 本章小結(jié) 160
8.9 上機(jī)實訓(xùn) 160
8.9.1 實訓(xùn)1 簡單計算器 160
8.9.2 實訓(xùn)2 找素數(shù) 162
8.10 習(xí)題 163
第9章 C指針 166
9.1 地址和指針的概念 166
9.2 指針變量 167
9.2.1 指針變量的定義 167
9.2.2 指針變量的引用 168
9.3 指針與數(shù)組 169
9.3.1 指向數(shù)組元素的指針 169
9.3.2 通過指針引用數(shù)組元素 170
9.3.3 用數(shù)組名作函數(shù)參數(shù) 170
9.3.4 字符串與指針 172
9.3.5 鏈表 173
9.4 指針與函數(shù) 177
9.4.1 指針變量作函數(shù)的參數(shù) 177
9.4.2 指向函數(shù)的指針 179
9.4.3 返回指針值的函數(shù) 180
9.4.4 指向指針的指針 181
9.5 本章小結(jié) 182
9.6 上機(jī)實訓(xùn) 182
9.6.1 實訓(xùn)1 在輸入的字符串中查找有無‘k’字符 182
9.6.2 實訓(xùn)2 將數(shù)組中的n個整數(shù)按相反順序存放 183
9.7 習(xí)題 184
第10章 文件 186
10.1 什么是文件 186
10.1.1 文本文件 186
10.1.2 二進(jìn)制文件 187
10.2 文件指針FILE 187
10.3 文件的打開與關(guān)閉 188
10.3.1 文件的打開 188
10.3.2 文件的關(guān)閉 189
10.4 文本文件的讀寫操作 189
10.4.1 按文本方式打開文件 189
10.4.2 按文本方式讀文件 190
10.4.3 按文本方式寫文件 193
10.5 讀寫二進(jìn)制文件 196
10.5.1 按二進(jìn)制方式打開文件 197
10.5.2 按二進(jìn)制方式讀寫文件 197
10.6 文件的隨機(jī)讀寫 199
10.7 文件定位函數(shù) 200
10.8 本章小結(jié) 201
10.9 上機(jī)實訓(xùn) 202
實訓(xùn) 模擬實現(xiàn)操作系統(tǒng)的文件復(fù)制功能 202
10.10 習(xí)題 203
附錄A ASCII碼表 205
附錄B C語言關(guān)鍵字 208
附錄C 部分標(biāo)準(zhǔn)C庫函數(shù) 209
附錄D 預(yù)處理命令的使用 213
附錄E 程序在線評測系統(tǒng)介紹 218
參考文獻(xiàn) 225