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