圖書簡介
本書面向程式設計初學者編寫,以“注重基礎、注重方法、注重編程、注重套用”為指導思想,靈活運用案例教學、任務驅動、啟發式教學等多種教學方法,對C語言程式設計的語言知識和程式設計的方法過程進行了系統介紹,特別適合將“C語言程式設計”作為第一門程式設計課程的高校學生。 全書共有9章,分別為程式設計概述、簡單程式設計、分支結構程式設計、循環結構程式設計、數組程式設計、函式程式設計、指針程式設計、結構體程式設計和檔案程式設計。每章之後均設有實驗指導,其內容與教學內容密切銜接、相輔相成。本書配有教學課件、程式源碼和試題庫等豐富資源。
本書面向程式設計初學者,全書以程式設計為主線,突出主幹知識教學,突出C語言課程的套用性、實踐性特點,注重能力培養。
本書適合作為高等院校C語言程式設計等相關課程的教材,也可用作程式設計人員及程式設計愛好者的自學參考書。
圖書前言
本書面向程式設計初學者,全書以程式設計為主線,突出主幹知識教學,突出C語言課程的套用性、實踐性特點,注重能力培養。
本書主要具有以下特點。
(1) 加強算法設計的教學。在多年的教學實踐中我們體會到,學生在學習程式設計時遇到的困難大部分發生在算法設計環節,尤其是初學者,面對實際問題往往無所適從,難以設計用程式解決問題的算法。本書從兩個方面努力加強算法設計的教學,以提高學生的程式設計能力:一是注重程式執行過程的分析和說明,加強與計算機的溝通,提高讀者的程式閱讀能力,進而達到算法學習的目的;二是通過套用實例,加強問題分析和算法設計的教學。
(2) 本書的實例選擇力求做到“科學性、趣味性、套用性和易學性”的統一,並按照不同的學習功能進行分類設定。一類是簡單明了的演示性例題,重點說明C語言的語法知識,實現基本概念、基本語法的即時套用;另一類是培養程式設計能力的設計性例題,通過問題分析與算法設計、程式實現、程式討論和說明等內容重點介紹程式設計方法,突出算法設計和程式編寫、調試的教學,以加強程式設計的能力訓練。
(3) 突出案例教學。書中凡是適合以程式案例開始的新知識,均通過程式示例和程式說明予以引導,首先建立感性認識,然後展開相關內容,進行知識的系統介紹。
(4) 本書的程式設計舉例在相關章節保持了連續性,前後銜接,逐步擴展,既便於教師講解,又便於學生學習理解。例如,學生成績問題自第1章引入,一直貫穿到建立和使用學生成績檔案,相關舉例在第2~5章、第8章、第9章都有介紹。
(5) 本書通過設定“問題思考”、“觀察與思考”、“拓展知識”等欄目,靈活運用啟發式教學方法,有針對性地引導讀者進一步討論和思考問題。當提示讀者從邏輯思維的角度對某些問題做進一步思考時,通過“問題思考”欄目進行啟發;當提示讀者根據程式運行情況對程式做進一步改進、完善時,通過“觀察與思考”欄目進行啟發;當需要進一步延伸某些教學內容時,通過“拓展知識”欄目進行適當介紹。
(6) 主教材與實驗指導合二為一,在每章之後設定實驗及指導內容,不再單獨配套實驗指導教材,既方便學生實驗課學習,也降低教材成本。
(7) 理論教學與實驗教學有機結合。本書的實驗指導分為基礎實驗和綜合實驗兩部分。基礎實驗內容緊密結合課程中的例題程式設定,以“理解→驗證→完善→擴充→提高”為實驗教學線索,重在鞏固課堂教學知識,提高調試程式及完善程式的能力;綜合實驗以算法設計和程式實現為重點,訓練運用所學知識解決實際問題的能力。這樣徹底解決了實驗教學內容與主教材教學內容並行設定、孤立設定的問題,避免出現主教材與實驗教材顧此失彼的情況。
本書編者秉承“建設精品教材,培養優秀人才”的教育理念,廣泛吸收、借鑑其他優秀教材的長處,在前期教材建設的基礎上,融入多年的教學實踐經驗和教學研究成果,編寫完成了本書,力求深入淺出、循序漸進、語言流暢、通俗易懂、便於講解和學習。但由於編者水平所限,書中難免存在不足之處,敬請讀者批評指正。
參加本書編寫工作的還有馮偉昌、黃忠義、魏建國、張元國、王桂東、王金才、李竹健、張文、高永存、王濤、薛瑩、徐英娟、馬明祥、滕秀榮、彭玉忠等。電腦程式設計愛好者潘振昌、張濛、徐思傑等為調試本書中的程式做了大量工作,在此一併表示感謝。
編 者2012年7月
圖書目錄
第1章 程式設計概述1
1.1 程式設計語言1
1.2 算法2
1.2.1 算法概念與算法描述3
1.2.2 算法的邏輯結構4
1.2.3 算法的特性7
1.2.4 算法評價7
1.3 程式設計與實現7
1.3.1 程式設計的基本過程7
1.3.2 使用Visual C++ 6.0實現C語言程式8
1.3.3 程式設計示例10
1.4 C語言程式的基本結構13
1.4.1 程式的函式化結構13
1.4.2 程式中的常量和變數15
1.4.3 程式中的基本語句16
1.4.4 標識符與保留字16
1.4.5 程式風格17
小結18
習題118
實驗1 編輯運行C語言程式20
第2章 簡單程式設計23
2.1 用printf()函式輸出數據23
2.1.1 固定數值的加法程式24
2.1.2 printf()函式25
2.2 用scanf()函式輸入數據29
2.2.1 任意數值的加法程式29
2.2.2 scanf()函式30
2.3 輸入輸出字元數據34
2.3.1 getchar()函式和putchar()函式35
2.3.2 字元輸入輸出套用舉例35
2.4 語言知識補遺36
2.4.1 數據類型36
2.4.2 常量詳解36
2.4.3 簡單變數詳解38
2.4.4 算術運算 41
2.4.5 賦值運算42
2.4.6 宏命令43
2.5 程式設計舉例49
2.5.1 計算三角形面積 49
2.5.2 字母轉換50
2.5.3 雞兔同籠問題51
??2.6 表達式中數據類型的自動轉換52
??2.7 用typedef命名數據類型53
??2.8 使用C++命令輸入輸出數據54
2.8.1 簡單的C++程式54
2.8.2 C++的輸入和輸出55
小結57
習題258
實驗2 簡單程式設計62
第3章 分支結構程式設計64
3.1 簡單條件的分支程式64
3.1.1 判斷優等生程式64
3.1.2 關係表達式65
3.1.3 if語句66
3.2 複合條件的分支程式74
3.2.1 使用新標準的優等生程式74
3.2.2 邏輯表達式75
3.3 用switch語句實現分支控制77
3.4 goto語句80
3.5 條件運算81
3.6 分支結構套用舉例83
3.6.1 閏年問題83
3.6.2 判斷等邊三角形84
3.6.3 求解一元二次方程85
3.6.4 學生成績分等顯示86
小結88
習題388
實驗3 分支結構程式設計91
第4章 循環結構程式設計96
4.1 while循環結構程式96
4.1.1 while循環程式示例96
4.1.2 while語句97
4.1.3 自增、自減運算99
4.2 do-while循環結構程式101
4.2.1 do-while循環程式示例101
4.2.2 do-while語句102
4.3 for循環結構程式102
4.3.1 for循環程式示例102
4.3.2 for語句103
4.3.3 逗號表達式105
4.4 循環體中的控制命令105
4.4.1 break命令106
4.4.2 continue命令107
4.5 多重循環程式108
4.5.1 多重循環程式示例108
4.5.2 多重循環的一般結構109
4.6 循環結構套用舉例110
4.6.1 字元統計110
4.6.2 比賽評分111
4.6.3 學生成績分等統計113
4.6.4 求最大公約數115
4.6.5 Fibonacci數列116
4.6.6 乘法表117
4.6.7 搬磚問題118
4.6.8 找素數120
4.6.9 哥德巴赫猜想121
小結122
習題4123
實驗4 循環結構程式設計128
第5章 數組程式設計131
5.1 一維數組程式設計131
5.1.1 逆序輸出數據程式131
5.1.2 一維數組的定義132
5.1.3 數值型一維數組的輸入和輸出133
5.1.4 數值型一維數組的初始化135
5.1.5 字元型一維數組的初始化137
5.1.6 一維數組的存儲138
5.2 字元串操作138
5.2.1 字元串的輸入輸出138
5.2.2 多字元串操作函式143
5.2.3 其他字元串操作函式145
5.3 二維數組程式設計145
5.3.1 矩陣求和程式146
5.3.2 二維數組的定義146
5.3.3 二維數組的輸入和輸出147
5.3.4 二維數組的初始化148
5.3.5 二維數組的存儲150
5.4 數組套用151
5.4.1 排序151
5.4.2 查找153
5.4.3 單詞統計155
5.4.4 矩陣運算156
5.4.5 成績處理161
5.4.6 楊輝三角形164
小結165
習題5166
實驗5 數組程式設計168
第6章 函式程式設計171
6.1 函式概述171
6.2 自定義函式示例172
6.3 函式定義及調用173
6.3.1 函式定義173
6.3.2 函式值和return命令175
6.3.3 函式調用176
6.4 函式嵌套和遞歸函式181
6.4.1 函式嵌套182
6.4.2 遞歸函式183
6.5 數組作為函式的參數187
6.5.1 數組元素作為函式參數187
6.5.2 一維數組名作為函式參數189
6.5.3 用一維數組求解二維數組問題191
6.6 函式套用舉例192
6.6.1 計算長方體的面積192
6.6.2 利用遞歸函式計算Fibonacci數列193
6.6.3 排序函式的設計與套用194
6.7 變數的作用域和存儲類型196
6.7.1 變數的作用域196
6.7.2 變數的存儲類型198
小結200
習題6200
實驗6 使用自定義函式的程式設計205
第7章 指針程式設計208
7.1 指針概述208
7.1.1 指針變數208
7.1.2 變數的直接訪問和間接訪問209
7.2 指針變數的定義和使用209
7.2.1 指針變數程式示例209
7.2.2 定義指針變數210
7.2.3 使用指針變數210
7.3 指針與數組213
7.3.1 指針與一維數組213
7.3.2 指針與二維數組216
7.3.3 指針與字元串219
7.3.4 指針數組221
7.4 指針作為函式的參數222
7.4.1 簡單指針變數作函式參數222
7.4.2 指向數組的指針作函式的參數224
7.4.3 字元串指針作函式的參數225
7.4.4 指針數組作函式的參數226
??7.4.5 使用帶參數的main()函式228
7.5 指針函式和指向函式的指針變數229
7.5.1 指針函式229
??7.5.2 指向函式的指針變數230
7.6 指針套用舉例231
小結237
習題7237
實驗7 指針程式設計242
第8章 結構體程式設計245
8.1 結構體數據概述245
8.2 結構體類型和結構體變數246
8.2.1 使用結構體變數存儲學生信息246
8.2.2 定義結構體數據類型247
8.2.3 結構體變數的定義及使用248
8.3 結構體數組252
8.3.1 結構體數組概述252
8.3.2 結構體數組的初始化253
8.3.3 利用結構體數組管理學生信息253
8.4 結構體指針變數255
8.4.1 結構體指針變數的定義及使用255
8.4.2 結構體指針作函式的參數257
8.5 使用鍊表動態存儲數據258
8.5.1 使用鍊表存儲學生信息258
8.5.2 鍊表的特點259
8.5.3 動態記憶體管理函式260
8.5.4 定義鍊表結構261
8.6 鍊表的基本操作262
8.6.1 鍊表結點的插入262
8.6.2 鍊表結點的刪除266
8.6.3 鍊表結點的查找268
8.7 結構體套用舉例271
8.7.1 字元串加密271
8.7.2 學生成績排序273
8.7.3 Josephus問題276
小結279
習題8279
實驗8 結構體程式設計284
第9章 檔案程式設計288
9.1 檔案概述288
9.1.1 檔案的概念288
9.1.2 檔案的分類289
9.1.3 檔案的一般操作過程290
9.1.4 檔案的指針291
9.2 檔案的基本操作291
9.2.1 打開和關閉檔案292
9.2.2 最基本的檔案讀寫函式293
9.3 檔案的數據塊讀寫操作296
9.3.1 fwrite()函式296
9.3.2 fread()函式298
9.4 檔案的其他操作299
9.4.1 檔案的格式化讀寫300
9.4.2 檔案的隨機讀寫301
9.4.3 檔案的字元串操作304
9.5 檔案套用舉例305
9.5.1 檔案複製305
9.5.2 存儲在檔案中的學生成績排序306
小結308
習題9308
實驗9 檔案程式設計311
附錄A C語言的運算符316
附錄B C語言的保留關鍵字318
附錄C 常用ASCII碼字元對照表319
參考文獻320