在面向新工科的人才培養(yǎng)改革中,要求高等教育培養(yǎng)的人才具備工程思維、設(shè)計思維和數(shù)字思維的系統(tǒng)性計算思維能力,具備融合學(xué)科交叉知識解決復(fù)雜工程問題的實踐能力。在這樣的人才培養(yǎng)要求下,程序設(shè)計課程不僅僅是計算機、軟件工程等信息類專業(yè)的必修基礎(chǔ)課,也必將成為所有工科專業(yè)的基礎(chǔ)課程,它的重要性甚至將與數(shù)學(xué)、物理等傳統(tǒng)的基礎(chǔ)課程相當(dāng)。通過學(xué)習(xí)程序設(shè)計課程,培養(yǎng)學(xué)生的計算思維;在深入理解計算機相關(guān)專業(yè)知識的基礎(chǔ)上,培養(yǎng)學(xué)生解決復(fù)雜工程問題的能力,這在面向滿足社會需要和適應(yīng)智能化技術(shù)發(fā)展的人才培養(yǎng)方面具有重要意義。
C語言程序設(shè)計作為一門實踐性很強的程序設(shè)計基礎(chǔ)課程,在培養(yǎng)學(xué)生計算思維能力方面具有重要作用。因此,編寫一本側(cè)重培養(yǎng)學(xué)生計算思維,以程序設(shè)計實踐為主的程序設(shè)計類實訓(xùn)教程對于培養(yǎng)適應(yīng)工業(yè)化、信息化、智能化的新形勢專業(yè)人才尤為重要。本書力求充分結(jié)合程序設(shè)計課實踐性非常強的特性,以強化計算思維表達能力和良好的代碼書寫習(xí)慣培養(yǎng)為目標(biāo),突出計算思維訓(xùn)練,提高學(xué)生解決實際問題的邏輯思維能力。本書內(nèi)容匯集了北京航空航天大學(xué)“程序設(shè)計基礎(chǔ)訓(xùn)練”和“C語言程序設(shè)計”課程組多年的實踐教學(xué)內(nèi)容,實訓(xùn)題目由淺入深、循序漸進,有一定的覆蓋面,集知識性、趣味性于一體。本書可以作為計算機、軟件等信息類專業(yè)程序設(shè)計實踐環(huán)節(jié)的基礎(chǔ)教材,為后續(xù)“數(shù)據(jù)結(jié)構(gòu)”“算法分析與設(shè)計”等課程的學(xué)習(xí)奠定基礎(chǔ);也可以作為非信息類專業(yè)學(xué)生和程序設(shè)計愛好者的程序設(shè)計入門與提高訓(xùn)練教材。
本書力求培養(yǎng)學(xué)生兩方面的能力,一方面是培養(yǎng)學(xué)生掌握C語言的基本概念、各種數(shù)據(jù)類型、輸入輸出、控制結(jié)構(gòu)、函數(shù)、數(shù)組、指針、文件等語法及語義基礎(chǔ)的能力;另一方面是通過程序設(shè)計訓(xùn)練,培養(yǎng)學(xué)生分析問題、解決問題的能力。幫助學(xué)生了解結(jié)構(gòu)化程序設(shè)計思想,學(xué)習(xí)程序設(shè)計方法、技巧、風(fēng)格,從而提升學(xué)生程序設(shè)計能力,養(yǎng)成良好的編程習(xí)慣,獲得良好的程序設(shè)計學(xué)習(xí)起點,為后續(xù)學(xué)習(xí)專業(yè)理論和專業(yè)高級應(yīng)用課程提供必要的計算思維和程序設(shè)計能力,為專業(yè)領(lǐng)域的創(chuàng)新活動奠定堅實的基礎(chǔ)。
本教程共9章。第1章主要介紹C語言編程環(huán)境和基礎(chǔ)的程序設(shè)計流程,是程序設(shè)計的基礎(chǔ);第2~8章包括C語言的核心知識點及其程序設(shè)計要點,每一章主要由本章重難點回顧、精編實訓(xùn)題集、題集解析與參考程序和本章小結(jié)組成。其中,本章重難點回顧以知識結(jié)構(gòu)圖的形式直觀地展現(xiàn)了本章重難點內(nèi)容,讓讀者一目了然地看清本章知識點以及各知識點間的關(guān)聯(lián),并針對本章的重點難點知識進行解析,同時總結(jié)常見問題。實訓(xùn)題集是每章的主要內(nèi)容,每一個上機題目都是課程組精心編寫、集知識性和趣味性于一體的小案例,可有效提高讀者的編程興趣。題集解析與參考程序包括解題思路與參考例程。第9章是綜合訓(xùn)練,重在訓(xùn)練和培養(yǎng)學(xué)生分析問題和解決問題的綜合能力。本書共精選140余道編程題目,基本涵蓋了典型的C語言程序設(shè)計基礎(chǔ)知識點和要點,熟練掌握并靈活運用這些例程,對編程基礎(chǔ)能力訓(xùn)練將有很大幫助。
本書的主要特色之一是基于自主開發(fā)的北京航空航天大學(xué)OnlineJudge(OJ)系統(tǒng)(https://accoding.cn/index)開設(shè)了程序設(shè)計訓(xùn)練專版,覆蓋了本書所有題目及其擴展題目,方便使用本書的教師和學(xué)生實踐練習(xí)。此外,OJ上包括了更豐富的課程(包含Python、C語言程序設(shè)計,數(shù)據(jù)結(jié)構(gòu),算法分析與設(shè)計等),題庫中包括的題目數(shù)量更加豐富,遠超本書的范圍,涉及的知識面也更加廣闊,難度分布也很寬。讀者在進行本教程的訓(xùn)練時,可根據(jù)需要選擇相應(yīng)的課程,完成更高級的編程訓(xùn)練和挑戰(zhàn)。
本書是筆者所在的教學(xué)團隊在程序設(shè)計類課程多年實踐教學(xué)工作基礎(chǔ)上的一個總結(jié)。主要編寫人員有:李輝勇、孫青、宋友,課題組任課老師榮欣、劉禹、肖文磊、王君臣、方寧、路新喜、譚火彬、李瑩、任磊、宋曉、陳高翔、李可、鄧志誠、樊江、張勇和謝鳳英,以及歷屆課程助教都參與了本書題目的設(shè)計、題解編寫、例程測試等工作,沒有大家的付出,無法完成本書的編寫。在此謹表示誠摯的謝意。
受限于筆者之能力,加之時間倉促,書中難免存在一些不足和錯誤之處,懇請讀者批評指正,使之完善提高。
筆者
2020年10月于北京
第1章C語言編程環(huán)境與基本方法1
1.1C語言程序的基本概念及組成1
1.2常用IDE介紹2
1.3C語言編程的幾個基本步驟6
1.4C語言編程的常見錯誤6
1.5C語言程序調(diào)試簡介8
第2章基本數(shù)據(jù)處理10
2.1本章重難點回顧10
2.1.1基本輸入及格式化輸出10
2.1.2數(shù)據(jù)類型轉(zhuǎn)換12
2.1.3const與#define13
2.2精編實訓(xùn)題集14
題21簡單字符(串)輸出:顏文字表情圖案繪制14
題22簡單字符(串)輸出:轉(zhuǎn)義符應(yīng)用14
題23基本輸入輸出及運算:數(shù)的向上取整14
題24基本輸入輸出及運算:計算預(yù)期收益14
題25基本輸入輸出及運算:計算平均值14
題26基本輸入輸出及運算:計算圓柱體表面積15
題27模運算:簡單取模操作15
題28模運算:數(shù)的按位拆分15
題29模運算:數(shù)位翻轉(zhuǎn)15
題210模運算:學(xué)號識別碼16
題211模運算:隊列找字母16
題212模運算:火仙草數(shù)16
題213數(shù)據(jù)類型轉(zhuǎn)換:分數(shù)轉(zhuǎn)小數(shù)16
題214位運算:AopBProblem17
2.3題集解析與參考程序17
2.4本章小結(jié)23
第3章結(jié)構(gòu)化編程24
3.1本章重難點回顧25
3.1.1邏輯表達式25
3.1.2條件語句常見問題25
3.1.3計數(shù)器控制循環(huán)27
3.1.4標(biāo)志控制循環(huán)28
3.1.5break和continue語句30
3.2精編實訓(xùn)題集31
題31邏輯表達式的妙用:名次預(yù)測31
題32單分支選擇結(jié)構(gòu):尋找第二小數(shù)31
題33單分支選擇結(jié)構(gòu):重逢時刻31
題34單分支選擇結(jié)構(gòu):方程求解32
題35雙分支選擇結(jié)構(gòu):直線與圓32
題36雙分支選擇結(jié)構(gòu):溫度轉(zhuǎn)換32
題37雙分支選擇結(jié)構(gòu):統(tǒng)計階乘的尾數(shù)033
題38雙分支選擇結(jié)構(gòu):字符大小寫轉(zhuǎn)換33
題39多分支條件語句:求解分段函數(shù)33
題310多分支條件語句:窗口的嵌套34
題311多路選擇的switch語句:簡單計算器35
題312選擇結(jié)構(gòu)的嵌套:交換生條件審核35
題313選擇結(jié)構(gòu)的嵌套:觀影計劃35
題314多路分支選擇結(jié)構(gòu):方向判斷36
題315while循環(huán)(計數(shù)器控制):判斷2的冪次數(shù)36
題316while循環(huán)(標(biāo)志控制):破譯密碼36
題317dowhile循環(huán)(標(biāo)志控制):士兵站隊37
題318for循環(huán)(計數(shù)器控制):日歷計算37
題319for循環(huán)(計數(shù)器控制):求數(shù)列的一項38
題320for循環(huán):理財計劃38
題321循環(huán)嵌套:尋找完數(shù)39
題322循環(huán)嵌套:尋找質(zhì)因數(shù)39
題323循環(huán)嵌套:等式填空39
題324循環(huán)嵌套:最短正整數(shù)序列40
3.3題集解析及參考程序40
3.4本章小結(jié)57
第4章函數(shù)及其應(yīng)用58
4.1本章重難點回顧59
4.1.1遞歸思想59
4.1.2變量的作用域60
4.2精編實訓(xùn)題集62
題41定義與調(diào)用函數(shù):三角形的判斷62
題42定義與調(diào)用函數(shù):猜素數(shù)62
題43定義與調(diào)用函數(shù):cos(x)級數(shù)展開式63
題44定義與調(diào)用函數(shù):分數(shù)相加與化簡63
題45定義與調(diào)用函數(shù):星期幾63
題46定義與調(diào)用函數(shù):求未遮擋面積63
題47全局變量的使用:熊貓序列64
題48標(biāo)準(zhǔn)庫函數(shù)的使用:模擬投骰子64
題49標(biāo)準(zhǔn)庫函數(shù)的應(yīng)用:求極坐標(biāo)65
題410標(biāo)準(zhǔn)庫函數(shù)的應(yīng)用:求面積65
題411遞歸函數(shù):倒序輸出66
題412遞歸函數(shù):整數(shù)劃分66
題413遞歸函數(shù):遞歸漢諾塔67
題414遞歸函數(shù):走迷宮67
題415遞歸函數(shù):Ackermann函數(shù)67
題416遞歸函數(shù):送快遞68
題417遞歸函數(shù):二分法解方程68
4.3題集解析及參考程序68
4.4本章小結(jié)86
第5章數(shù)組與字符串及應(yīng)用87
5.1本章重難點回顧88
5.1.1字符串和字符數(shù)組88
5.1.2二維數(shù)組90
5.2精編實訓(xùn)題集92
題51一維數(shù)組應(yīng)用:進制轉(zhuǎn)換92
題52一維數(shù)組應(yīng)用:阿狄的冒險92
題53一維數(shù)組應(yīng)用:最萌身高差93
題54一維數(shù)組應(yīng)用:賣口罩93
題55一維數(shù)組應(yīng)用:成績平均分94
題56一維數(shù)組應(yīng)用:狐貍捉兔子94
題57一維數(shù)組應(yīng)用:子序列95
題58一維數(shù)組應(yīng)用:孤獨的數(shù)95
題59一維數(shù)組應(yīng)用:數(shù)組漂移95
題510一維數(shù)組應(yīng)用:統(tǒng)計質(zhì)數(shù)96
題511一維數(shù)組應(yīng)用:火柴拼圖96
題512一維數(shù)組應(yīng)用:約瑟夫問題96
題513一維數(shù)組應(yīng)用:求蓄水量97
題514一維數(shù)組應(yīng)用:元素查找97
題515一維數(shù)組應(yīng)用:絕對值排序問題98
題516一維數(shù)組應(yīng)用:集合的加法98
題517一維數(shù)組應(yīng)用:首個出現(xiàn)三次的字母98
題518一維數(shù)組應(yīng)用:字符統(tǒng)計99
題519字符串和字符數(shù)組:分子量99
題520字符串和字符數(shù)組:字符統(tǒng)計99
題521字符串和字符數(shù)組:字符串匹配100
題522字符串和字符數(shù)組:字符串糾錯100
題523字符串和字符數(shù)組:簡寫字符串的擴展101
題524字符串和字符數(shù)組:Excel表的列號101
題525字符串和字符數(shù)組:求相反數(shù)101
題526二維數(shù)組應(yīng)用:卷積計算102
題527二維數(shù)組應(yīng)用:蛇形矩陣102
題528二維數(shù)組應(yīng)用:游戲教學(xué)103
5.3題集解析及參考程序104
5.4本章小結(jié)131
第6章指針及其應(yīng)用132
6.1本章重難點回顧133
6.1.1指針與數(shù)組133
6.1.2常見問題133
6.2精編實訓(xùn)題集134
題61作為函數(shù)參數(shù)的指針:成績統(tǒng)計134
題62作為函數(shù)參數(shù)的指針:矩陣變換135
題63作為函數(shù)參數(shù)的指針:整數(shù)求和136
題64作為函數(shù)參數(shù)的指針:高斯消元法解方程136
題65作為函數(shù)參數(shù)的指針:單詞排序136
題66指向一維數(shù)組的指針:字符串替換137
題67指向一維數(shù)組的指針:子串逆置137
題68指向一維數(shù)組的指針:數(shù)的互逆137
題69指針數(shù)組的應(yīng)用:計算并輸出月份138
題610指針數(shù)組的應(yīng)用:單詞集合138
題611指針數(shù)組的應(yīng)用:更遙遠的星期幾139
題612指針數(shù)組的應(yīng)用:輸出文章內(nèi)容139
題613函數(shù)指針實例:有趣的排序問題139
題614函數(shù)指針實例:求眾數(shù)139
題615函數(shù)指針實例:比賽排行榜140
題616函數(shù)指針實例:田忌賽馬141
題617函數(shù)指針實例:求凸多邊形面積141
6.3題集解析及參考程序141
6.4本章小結(jié)165
第7章結(jié)構(gòu)與聯(lián)合166
7.1本章難點回顧166
7.1.1結(jié)構(gòu)數(shù)組與二維表的對應(yīng)關(guān)系166
7.1.2單向鏈表167
7.1.3類型定義語句170
7.2精編實訓(xùn)題集171
題71結(jié)構(gòu)應(yīng)用:工作DDL171
題72結(jié)構(gòu)應(yīng)用:數(shù)據(jù)編碼問題171
題73結(jié)構(gòu)應(yīng)用:按要求選擇鋼管172
題74結(jié)構(gòu)應(yīng)用:OJratings172
題75結(jié)構(gòu)應(yīng)用:尋找愛好相同的人173
題76結(jié)構(gòu)應(yīng)用:輔導(dǎo)員的生日推送173
題77鏈表應(yīng)用:再解約瑟夫問題174
題78結(jié)構(gòu)聯(lián)合應(yīng)用:數(shù)據(jù)表排序174
7.3題集解析及參考程序175
7.4本章小結(jié)185
第8章I/O和文件操作186
8.1本章重難點回顧186
8.1.1二進制文件操作186
8.1.2正文文件操作188
8.1.3文件讀寫操作中的定位189
8.1.4標(biāo)準(zhǔn)輸入輸出的重新定向191
8.2精編實訓(xùn)題集192
題81標(biāo)準(zhǔn)文件操作的I/O函數(shù):分析日期和時間192
題82標(biāo)準(zhǔn)文件操作的I/O函數(shù):由參數(shù)確定輸出的小數(shù)位數(shù)192
題83指定文件的讀寫函數(shù):字符輸入輸出192
題84指定文件的讀寫函數(shù):讀文本內(nèi)容并顯示193
題85指定文件的讀寫函數(shù):文件復(fù)制193
題86指定文件的讀寫函數(shù):成績表格193
題87指定文件的讀寫函數(shù):格式化輸入輸出193
題88文件讀寫函數(shù)的使用:日程列表193
題89讀寫操作的定位:求文件長度193
題810讀寫操作的定位:字符統(tǒng)計193
題811讀寫操作的定位:文件倒置輸出193
8.3題集解析及參考程序193
8.4本章小結(jié)199
第9章C語言程序設(shè)計綜合訓(xùn)練200
9.1程序設(shè)計基本方法200
9.1.1程序設(shè)計基本過程200
9.1.2程序性能分析202
9.1.2程序中的錯誤處理205
9.1.3程序的測試205
9.2精編實訓(xùn)題集206
題91查找指定大小數(shù)值206
題92位圖206
題93時間轉(zhuǎn)換問題207
題94切割木棍207
題95最長子序列208
題96簡化比例208
題97組合購物208
題98數(shù)的奇偶分解209
題99序列等式209
題910下一個序列209
題911圖片光滑處理210
題912排隊接水210
題913公共前綴搜索211
9.3題集解析及參考程序211
9.4本章小結(jié)223
參考文獻224