本書(shū)以C語(yǔ)言為工具,以現(xiàn)實(shí)生活中的案例為引導(dǎo),說(shuō)明如何分析問(wèn)題、利用計(jì)算機(jī)解決問(wèn)題的思維方法。引入應(yīng)用程序開(kāi)發(fā),由淺入深,逐步啟發(fā)、引領(lǐng)學(xué)生學(xué)習(xí)編寫(xiě)規(guī)模逐漸加大的程序,將計(jì)算思維的基本思想方法和魅力逐步展現(xiàn)出來(lái),引導(dǎo)讀者實(shí)現(xiàn)問(wèn)題求解思維方式的轉(zhuǎn)換——培養(yǎng)計(jì)算思維能力。全書(shū)在內(nèi)容組織上突出以下特色:
(1)結(jié)構(gòu)新穎。根據(jù)所介紹知識(shí),每章除了安排具有趣味性的實(shí)例以外,還安排了有助學(xué)生提高和升華知識(shí)點(diǎn)的綜合案例,這些案例來(lái)自于生活或?qū)W習(xí)中的應(yīng)用需求,可以讓學(xué)生在任務(wù)的驅(qū)動(dòng)下,由淺入深,學(xué)習(xí)和編寫(xiě)規(guī)模逐漸加大的程序,在潛移默化中逐步讓學(xué)生了解、學(xué)習(xí)計(jì)算機(jī)如何解決問(wèn)題,從而掌握利用計(jì)算機(jī)解決問(wèn)題的方法。
(2)提供了很多編程“套路”。從典型的程序?qū)嵗锌偨Y(jié)出“套路”,即解決一類(lèi)問(wèn)題的方法,從而讓初學(xué)者迅速掌握基礎(chǔ)編程的方法和算法,具有解決實(shí)際問(wèn)題的能力。
(3)助學(xué)。每章安排有內(nèi)容提示、教學(xué)基本要求,例題從問(wèn)題分析、算法描述、問(wèn)題總結(jié)、注意事項(xiàng)等方面進(jìn)行完整論述,每章包含知識(shí)總結(jié)和習(xí)題等內(nèi)容,有利于教師組織教學(xué),也有助于學(xué)生進(jìn)行預(yù)習(xí)與復(fù)習(xí)。
(4)易學(xué)。本著“知識(shí)量*小而收獲量*大的原則”,突出主線和重點(diǎn),分解難點(diǎn),以循序漸進(jìn)的方法,力求讓學(xué)生對(duì)于難點(diǎn)部分學(xué)的輕松,知識(shí)點(diǎn)掌握牢固。
(5)想學(xué)。例題選材知識(shí)性、趣味性和經(jīng)典性相結(jié)合,盡力降低枯燥度,增強(qiáng)學(xué)生學(xué)習(xí)的“幸福指數(shù)”。
(6)愛(ài)做。習(xí)題豐富。每章配有形式多樣的習(xí)題,盡力吸引學(xué)生學(xué)后愛(ài)做、自覺(jué)溫故知新。
學(xué)生學(xué)習(xí)數(shù)學(xué)課程、物理課程并不是要成為數(shù)學(xué)家或物理學(xué)家,而是通過(guò)這些課程的訓(xùn)練,養(yǎng)成科學(xué)思維的素質(zhì)和能力,這種認(rèn)識(shí)也同樣適用于計(jì)算機(jī)課程。程序設(shè)計(jì)基礎(chǔ)課程對(duì)于培養(yǎng)學(xué)生計(jì)算思維(美國(guó)計(jì)算機(jī)科學(xué)家周以真認(rèn)為:計(jì)算思維是運(yùn)用計(jì)算機(jī)科學(xué)的基礎(chǔ)概念進(jìn)行問(wèn)題求解、系統(tǒng)設(shè)計(jì)以及人類(lèi)行為理解等涵蓋計(jì)算機(jī)科學(xué)之廣度的一系列思維活動(dòng))起著至關(guān)重要的作用。
本書(shū)以C語(yǔ)言為工具,以現(xiàn)實(shí)生活中的案例為引導(dǎo),說(shuō)明如何分析問(wèn)題、利用計(jì)算機(jī)解決問(wèn)題的思維方法。引入應(yīng)用程序開(kāi)發(fā),由淺入深,逐步啟發(fā)、引領(lǐng)學(xué)生學(xué)習(xí)編寫(xiě)規(guī)模逐漸加大的程序,將計(jì)算思維的基本思想方法和魅力逐步展現(xiàn)出來(lái),引導(dǎo)讀者實(shí)現(xiàn)問(wèn)題求解思維方式的轉(zhuǎn)換——培養(yǎng)計(jì)算思維能力。
本書(shū)按知識(shí)結(jié)構(gòu)組織為11章內(nèi)容,第1章為C語(yǔ)言程序設(shè)計(jì)概述,介紹與程序設(shè)計(jì)有關(guān)的概念,說(shuō)明C語(yǔ)言程序的基本組成結(jié)構(gòu)、C語(yǔ)言程序設(shè)計(jì)開(kāi)發(fā)環(huán)境與過(guò)程;第2章為C語(yǔ)言基礎(chǔ),介紹C語(yǔ)言的基本數(shù)據(jù)類(lèi)型,常量和變量,C語(yǔ)言基本運(yùn)算的運(yùn)算符、表達(dá)式及應(yīng)用,數(shù)據(jù)的輸入和輸出函數(shù)的使用;第3章為程序設(shè)計(jì)基本結(jié)構(gòu),介紹程序的3種基本結(jié)構(gòu),實(shí)現(xiàn)選擇和循環(huán)結(jié)構(gòu)的語(yǔ)句及其應(yīng)用,介紹常見(jiàn)問(wèn)題及解決問(wèn)題的方法;第4章為數(shù)組,介紹數(shù)組的基本概念、使用及處理數(shù)組中數(shù)據(jù)的常用方法;第5章為指針,介紹指針的概念,指針的使用,利用指針處理數(shù)據(jù)的方法;第6章為函數(shù),介紹函數(shù)的定義、調(diào)用及函數(shù)間數(shù)據(jù)傳遞的方法,說(shuō)明變量的存儲(chǔ)屬性及其使用;第7章為結(jié)構(gòu)體、共用體與枚舉類(lèi)型,介紹結(jié)構(gòu)體和共用體的定義、使用和區(qū)別,介紹了枚舉類(lèi)型的定義和使用;第8章為文件,介紹了文件的基本概念,文件的操作步驟,利用文件實(shí)現(xiàn)內(nèi)存和外存中數(shù)據(jù)交換的方法;第9章為底層程序設(shè)計(jì),介紹了位運(yùn)算的運(yùn)算符號(hào)、規(guī)則及應(yīng)用;第10章為編譯預(yù)處理,介紹了編譯預(yù)處理命令的使用、編寫(xiě)大型程序的方法等;第11章為指針的高級(jí)應(yīng)用,介紹了多級(jí)指針、main函數(shù)帶參數(shù)、函數(shù)指針、動(dòng)態(tài)內(nèi)存分配及鏈表。每章提供適合該章知識(shí)點(diǎn)的綜合案例,以拓展知識(shí)、開(kāi)闊學(xué)生的眼界。
全書(shū)在內(nèi)容組織上突出以下特色:
(1)結(jié)構(gòu)新穎。根據(jù)所介紹知識(shí),每章除了安排具有趣味性的實(shí)例以外,還安排了有助學(xué)生提高和升華知識(shí)點(diǎn)的綜合案例,這些案例來(lái)自于生活或?qū)W習(xí)中的應(yīng)用需求,可以讓學(xué)生在任務(wù)的驅(qū)動(dòng)下,由淺入深,學(xué)習(xí)和編寫(xiě)規(guī)模逐漸加大的程序,在潛移默化中逐步讓學(xué)生了解、學(xué)習(xí)計(jì)算機(jī)如何解決問(wèn)題,從而掌握利用計(jì)算機(jī)解決問(wèn)題的方法。
(2)提供了很多編程“套路”。從典型的程序?qū)嵗锌偨Y(jié)出“套路”,即解決一類(lèi)問(wèn)題的方法,從而讓初學(xué)者迅速掌握基礎(chǔ)編程的方法和算法,具有解決實(shí)際問(wèn)題的能力。
(3)助學(xué)。每章安排有內(nèi)容提示、教學(xué)基本要求,例題從問(wèn)題分析、算法描述、問(wèn)題總結(jié)、注意事項(xiàng)等方面進(jìn)行完整論述,每章包含知識(shí)總結(jié)和習(xí)題等內(nèi)容,有利于教師組織教學(xué),也有助于學(xué)生進(jìn)行預(yù)習(xí)與復(fù)習(xí)。
(4)易學(xué)。本著“知識(shí)量最小而收獲量最大的原則”,突出主線和重點(diǎn),分解難點(diǎn),以循序漸進(jìn)的方法,力求讓學(xué)生對(duì)于難點(diǎn)部分學(xué)的輕松,知識(shí)點(diǎn)掌握牢固。
(5)想學(xué)。例題選材知識(shí)性、趣味性和經(jīng)典性相結(jié)合,盡力降低枯燥度,增強(qiáng)學(xué)生學(xué)習(xí)的“幸福指數(shù)”。
(6)愛(ài)做。習(xí)題豐富。每章配有形式多樣的習(xí)題,盡力吸引學(xué)生學(xué)后愛(ài)做、自覺(jué)溫故知新。
本書(shū)由李書(shū)琴主審、王娟勤主編。第1、第3章由吳昊編寫(xiě),第2、第4、第5、第9章由王娟勤編寫(xiě),第6和第7章由成寶國(guó)編寫(xiě),第8章由任國(guó)霞編寫(xiě),第10章由晁曉菲編寫(xiě),第11章由胡秋霞編寫(xiě),并提供了部分例題和習(xí)題。
在全書(shū)的編寫(xiě)過(guò)程中,孫健敏、陳勇和承擔(dān)《C語(yǔ)言程序設(shè)計(jì)》課程的各位老師,在整本書(shū)的規(guī)劃和編寫(xiě)中,對(duì)本書(shū)提出了很多寶貴意見(jiàn)并給予了幫助,在此表示最誠(chéng)摯的感謝。
由于編者水平有限,書(shū)中的不足、疏漏之處在所難免,懇請(qǐng)廣大讀者提出寶貴意見(jiàn)和建議。我們的信箱是huchenhao@263.net,電話是010-62796045。
本書(shū)的電子課件、習(xí)題答案和實(shí)例源文件可以到http://www.tupwk.com.cn網(wǎng)站下載。
編者
2017年4月
書(shū)中圖標(biāo)的意義
本書(shū)包含一些強(qiáng)調(diào)特定知識(shí)點(diǎn)的圖標(biāo),它們能夠直觀地標(biāo)識(shí)注意、警告、提示、總結(jié)和說(shuō)明等內(nèi)容。
需要引起注意的內(nèi)容。
防止錯(cuò)誤,容易出錯(cuò)的地方。
提出問(wèn)題,或大家感覺(jué)有疑問(wèn)的地方。
重點(diǎn)知識(shí),或有總結(jié)內(nèi)容的地方。
程序或知識(shí)點(diǎn)說(shuō)明、論述。
強(qiáng)調(diào)特定知識(shí)點(diǎn)的地方。
提升知識(shí)深度、難度,提高和進(jìn)階的內(nèi)容。
用于標(biāo)識(shí)使用此方法的優(yōu)勢(shì)、優(yōu)點(diǎn)、好處。
問(wèn)題的“設(shè)計(jì)思路”。
第1章 C語(yǔ)言程序設(shè)計(jì)概述 1
1.1 C語(yǔ)言程序的基本組成 1
1.2 C語(yǔ)言程序設(shè)計(jì)的一般步驟 4
1.3 C語(yǔ)言程序的上機(jī)執(zhí)行過(guò)程 5
1.3.1 Code::Blocks 6
1.3.2 Visual C++ 6.0 8
1.4 C語(yǔ)言學(xué)習(xí)方法 12
1.4.1 為什么要學(xué)C語(yǔ)言 12
1.4.2 如何學(xué)習(xí)C語(yǔ)言 13
1.4.3 C語(yǔ)言學(xué)習(xí)資源 13
1.5 案例:程序的銘牌 13
本章小結(jié) 14
習(xí)題 15
第2章 C語(yǔ)言基礎(chǔ) 17
2.1 C語(yǔ)言的字符集 17
2.2 標(biāo)識(shí)符 17
2.2.1 保留字 17
2.2.2 用戶自定義標(biāo)識(shí)符 18
2.3 數(shù)據(jù)與C語(yǔ)言的數(shù)據(jù)類(lèi)型 18
2.3.1 整型數(shù)據(jù)類(lèi)型 19
2.3.2 實(shí)型數(shù)據(jù)類(lèi)型 21
2.3.3 字符型數(shù)據(jù)類(lèi)型 22
2.4 常量 23
2.4.1 整型常量 23
2.4.2 實(shí)型常量 23
2.4.3 字符常量 24
2.4.4 字符串常量 25
2.4.5 符號(hào)常量 25
2.5 變量 26
2.6 運(yùn)算符 28
2.6.1 算術(shù)運(yùn)算 28
2.6.2 關(guān)系運(yùn)算 31
2.6.3 邏輯運(yùn)算 32
2.6.4 賦值運(yùn)算 33
2.6.5 逗號(hào)運(yùn)算 35
2.6.6 條件運(yùn)算符和條件表達(dá)式 35
2.6.7 sizeof運(yùn)算符 36
2.6.8 類(lèi)型轉(zhuǎn)換 37
2.7 數(shù)據(jù)的輸入/輸出 40
2.7.1 字符數(shù)據(jù)的輸入/輸出 40
2.7.2 格式化輸出和輸入函數(shù) 41
2.8 案例:雞兔同籠 48
本章小結(jié) 49
習(xí)題 50
第3章 程序設(shè)計(jì)基本結(jié)構(gòu) 53
3.1 順序結(jié)構(gòu) 53
3.2 條件判斷——選擇結(jié)構(gòu) 55
3.2.1 if語(yǔ)句 55
3.2.2 switch語(yǔ)句 60
3.3 一遍又一遍——循環(huán)結(jié)構(gòu) 62
3.3.1 while循環(huán)語(yǔ)句 62
3.3.2 for循環(huán)語(yǔ)句 64
3.3.3 do…while循環(huán)語(yǔ)句 66
3.3.4 break和continue語(yǔ)句 68
3.3.5 三種循環(huán)語(yǔ)句的比較 70
3.4 嵌套 70
3.5 應(yīng)用舉例 73
3.5.1 一般計(jì)算問(wèn)題 73
3.5.2 窮舉法求解問(wèn)題 76
3.5.3 遞推和迭代法求解問(wèn)題 78
3.5.4 用嵌套的循環(huán)求解問(wèn)題 81
3.6 案例:基因信息處理 83
本章小結(jié) 86
習(xí)題 87
第4章 數(shù)組 99
4.1 數(shù)組的基本概念 99
4.2 一維數(shù)組 100
4.2.1 一維數(shù)組的定義 100
4.2.2 一維數(shù)組的引用 101
4.2.3 一維數(shù)組的初始化 102
4.2.4 一維數(shù)組的應(yīng)用 102
4.3 二維數(shù)組 110
4.3.1 二維數(shù)組的定義 110
4.3.2 二維數(shù)組的引用 111
4.3.3 二維數(shù)組的初始化 111
4.3.4 二維數(shù)組的應(yīng)用 112
4.5 字符數(shù)組 114
4.5.1 字符數(shù)組的定義 114
4.5.2 字符數(shù)組的初始化 114
4.5.3 字符數(shù)組的引用 115
4.5.4 字符串的輸入/輸出 115
4.5.5 字符串處理函數(shù) 118
4.5.6 應(yīng)用舉例 120
4.6 案例:抽獎(jiǎng)嘉年華 122
本章小結(jié) 124
習(xí)題 126
第5章 指針 135
5.1 指針的概念 135
5.1.1 內(nèi)存地址和指針 135
5.1.2 指針變量的聲明 136
5.1.3 取地址運(yùn)算符和間接尋址
運(yùn)算符 136
5.1.4 指針的引用 138
5.2 指針與數(shù)組 139
5.2.1 指針的算術(shù)運(yùn)算 140
5.2.2 指針的比較運(yùn)算 141
5.2.3 指針與一維數(shù)組 141
5.2.4 指針與二維數(shù)組 143
5.3 字符指針 148
5.3.1 字符指針與字符串 148
5.3.2 字符指針與字符數(shù)組 150
5.4 指針數(shù)組 151
5.4.1 指針數(shù)組的定義 151
5.4.2 指針數(shù)組的應(yīng)用 151
5.5 案例:括號(hào)匹配問(wèn)題 155
本章小結(jié) 157
習(xí)題 157
第6章 函數(shù) 161
6.1 函數(shù)的定義與調(diào)用 161
6.1.1 函數(shù)的定義 162
6.1.2 函數(shù)調(diào)用 164
6.2 函數(shù)間的數(shù)據(jù)傳遞 168
6.2.1 通過(guò)參數(shù)傳遞 168
6.2.2 通過(guò)函數(shù)返回值傳遞 176
6.2.3 函數(shù)設(shè)計(jì)的原則 177
6.3 變量的作用域和生存周期 178
6.3.1 變量的作用域 178
6.3.2 變量的生存周期 181
6.4 函數(shù)的嵌套調(diào)用和遞歸調(diào)用 186
6.4.1 函數(shù)的嵌套調(diào)用 186
6.4.2 函數(shù)的遞歸調(diào)用 188
6.5 案例:擲骰子游戲 189
本章小結(jié) 191
習(xí)題 193
第7章 結(jié)構(gòu)體、共用體與枚舉類(lèi)型 199
7.1 結(jié)構(gòu)體 199
7.1.1 結(jié)構(gòu)體的定義 200
7.1.2 結(jié)構(gòu)體變量 201
7.1.3 結(jié)構(gòu)體數(shù)組 205
7.1.4 結(jié)構(gòu)體指針 208
7.1.5 結(jié)構(gòu)體與函數(shù) 211
7.2 共用體 216
7.2.1 共用體的定義 216
7.2.2 共用體變量的定義 216
7.2.3 共用體變量的引用 218
7.3 枚舉類(lèi)型 220
7.3.1 枚舉類(lèi)型的定義 220
7.3.2 枚舉變量的定義和引用 221
7.4 typedef類(lèi)型定義 223
7.5 案例:維護(hù)通訊錄數(shù)據(jù)庫(kù) 224
本章小結(jié) 228
習(xí)題 229
第8章 文件 235
8.1 文件概述 235
8.1.1 什么是文件 235
8.1.2 文本文件和二進(jìn)制文件 235
8.1.3 文件類(lèi)型指針 236
8.1.4 文件操作 237
8.2 文件的打開(kāi)與關(guān)閉 238
8.2.1 打開(kāi)文件 238
8.2.2 關(guān)閉文件 240
8.3 文件的讀寫(xiě)操作 240
8.3.1 按字符讀寫(xiě)文件 241
8.3.2 按格式讀寫(xiě)文件 245
8.3.3 按數(shù)據(jù)塊讀寫(xiě)文件 247
8.4 文件的定位 250
8.5 文件出錯(cuò)檢測(cè) 251
8.6 案例:打字練習(xí)程序 252
本章小結(jié) 254
習(xí)題 255
第9章 底層程序設(shè)計(jì) 259
9.1 位運(yùn)算符 259
9.1.1 按位邏輯運(yùn)算 260
9.1.2 移位運(yùn)算 264
9.1.3 位運(yùn)算賦值運(yùn)算符 266
9.2 位段 267
9.3 案例:查看內(nèi)存單元 270
本章小結(jié) 271
習(xí)題 272
第10章 編譯預(yù)處理 273
10.1 #include文件包含命令 273
10.2 #define宏定義 274
10.2.1 不帶參數(shù)的宏定義 275
10.2.2 帶參數(shù)的宏 276
10.3 條件編譯 278
10.4 編寫(xiě)大型程序 280
10.5 案例:數(shù)據(jù)壓縮和解壓縮 281
本章小結(jié) 284
習(xí)題 285
第11章 指針的高級(jí)應(yīng)用 287
11.1 多級(jí)指針 287
11.2 main函數(shù)帶參數(shù) 288
11.3 函數(shù)指針 289
11.4 動(dòng)態(tài)內(nèi)存分配 291
11.4.1 動(dòng)態(tài)內(nèi)存分配函數(shù) 291
11.4.2 動(dòng)態(tài)內(nèi)存空間的使用 293
11.5 鏈表 295
11.6 案例:簡(jiǎn)單學(xué)生成績(jī)管理
系統(tǒng) 300
本章小結(jié) 306
習(xí)題 307
附錄 313
附錄A 字符與ASCII碼對(duì)照表 313
附錄B 運(yùn)算符和結(jié)合性 314
附錄C C語(yǔ)言中的關(guān)鍵字 315
附錄D C常用庫(kù)函數(shù) 315
參考文獻(xiàn) 323