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