本書闡述了C/C 編程語言的核心概念和實(shí)踐操作,并引入對(duì)教師和學(xué)生免費(fèi)的GitHub Copilot編程助手,降低學(xué)習(xí)難度,提高學(xué)習(xí)效率;依托配套的OJ系統(tǒng)和豐富的項(xiàng)目案例,培養(yǎng)計(jì)算思維與實(shí)踐能力;針對(duì)大模型的特點(diǎn),強(qiáng)調(diào)問題分析與描述能力、與Copilot交互的能力、設(shè)計(jì)測(cè)試用例的能力、程序排錯(cuò)的能力,期望讀者掌握AI時(shí)代的編程技能。
本書的內(nèi)容分為四大部分: 第1部分(第1~4章)為基礎(chǔ)篇,介紹了編程環(huán)境和三大編程結(jié)構(gòu);第2部分(第5~10章)為進(jìn)階篇,講解了函數(shù)、數(shù)組、指針、結(jié)構(gòu)體與類;第3部分(第11~13章)為高級(jí)篇,深入理解遞歸、文件操作以及項(xiàng)目開發(fā)實(shí)踐;第4部分為附錄,介紹了Visual Studio的安裝、Copilot的安裝與使用、CodeGeeX的使用和OJ系統(tǒng)的使用。
本書可作為高等院校計(jì)算機(jī)相關(guān)專業(yè)C/C 的上機(jī)實(shí)踐教材,也可供打算學(xué)習(xí)C/C 軟件開發(fā)的科技工作者和研究人員參考。
引領(lǐng)時(shí)代潮流,重塑學(xué)習(xí)體驗(yàn):本教材創(chuàng)新性地將大模型編程助手融入編程語言學(xué)習(xí)中,降低學(xué)習(xí)門檻、引導(dǎo)學(xué)生探究、順應(yīng)科技發(fā)展趨勢(shì)。
強(qiáng)化計(jì)算思維和問題解析能力:要求清晰準(zhǔn)確地描述問題、撰寫明確的提示詞,得到結(jié)果后進(jìn)行分析并據(jù)此進(jìn)一步交互。
強(qiáng)調(diào)測(cè)試能力,保障代碼質(zhì)量:將測(cè)試作為編程技能的重要組成部分,培養(yǎng)學(xué)生具有確保代碼正確性的測(cè)試能力。
注重實(shí)踐應(yīng)用,項(xiàng)目驅(qū)動(dòng)學(xué)習(xí):配套OJ實(shí)踐平臺(tái),并融入大量項(xiàng)目案例,讓學(xué)生在實(shí)踐中深化對(duì)計(jì)算思維的理解,真正做到學(xué)以致用。
在當(dāng)今信息化時(shí)代,計(jì)算機(jī)編程已成為一項(xiàng)不可或缺的基本技能。而在眾多編程語言中,C/C 以其高效、靈活和強(qiáng)大的特性,成為計(jì)算機(jī)科學(xué)教育和實(shí)際應(yīng)用的熱門選擇。然而,C/C 語言的復(fù)雜性和學(xué)習(xí)難度也常使初學(xué)者望而卻步。為了降低學(xué)習(xí)難度,提高學(xué)習(xí)效率,我們引入了GitHub Copilot編程助手,并基于Visual Studio(VS)集成開發(fā)環(huán)境,編寫了本教材。
Copilot通過深度學(xué)習(xí)和自然語言處理技術(shù),能夠?qū)崟r(shí)解釋C/C 的語法知識(shí)和算法邏輯,為學(xué)習(xí)者提供即時(shí)的編程建議和代碼補(bǔ)全。這使得學(xué)習(xí)者在編寫代碼的過程中,能夠得到及時(shí)的反饋和幫助,從而更快地掌握C/C 的編程技巧。同時(shí),Copilot還能夠根據(jù)學(xué)習(xí)者的編程習(xí)慣和需求,智能推薦代碼片段和解決方案,進(jìn)一步降低學(xué)習(xí)難度,提升學(xué)習(xí)體驗(yàn)。
然而,編程學(xué)習(xí)不僅僅是對(duì)語言本身的掌握,更重要的是通過上機(jī)實(shí)踐和項(xiàng)目開發(fā)來鍛煉實(shí)際應(yīng)用能力。因此,本書在培養(yǎng)計(jì)算思維的同時(shí),也注重培養(yǎng)讀者的上機(jī)實(shí)踐能力和項(xiàng)目開發(fā)能力。通過一系列精心設(shè)計(jì)的實(shí)踐任務(wù)和項(xiàng)目案例,讀者將有機(jī)會(huì)在實(shí)際操作中深化對(duì)C/C 語言和項(xiàng)目開發(fā)的理解,掌握程序設(shè)計(jì)的核心技能。
在這個(gè)過程中,Copilot同樣發(fā)揮著不可或缺的作用。它能夠幫助讀者進(jìn)行項(xiàng)目的設(shè)計(jì)、編碼、改錯(cuò)和優(yōu)化等工作,讓讀者更加專注于項(xiàng)目功能的分析、測(cè)試與調(diào)試。通過與Copilot的協(xié)作,讀者不僅能夠輕松學(xué)會(huì)C/C ,更重要的是能提高項(xiàng)目開發(fā)的效率和質(zhì)量。
總之,本書通過引入AI編程助手,為讀者提供了一條高效、便捷的學(xué)習(xí)路徑。無論是編程初學(xué)者還是有一定基礎(chǔ)的學(xué)習(xí)者,本書都將幫助讀者更好地掌握C/C 編程技能,提升實(shí)踐能力和項(xiàng)目開發(fā)能力,為未來的計(jì)算機(jī)學(xué)科學(xué)習(xí)和職業(yè)發(fā)展奠定堅(jiān)實(shí)的基礎(chǔ)。
◆程序設(shè)計(jì)實(shí)踐教程(C/C 版)基于Visual Studio和GitHub Copilot前言1. 本書特點(diǎn)
(1) 利用Copilot降低學(xué)習(xí)難度: 通過引入AI編程助手,本書為學(xué)習(xí)者提供了貼身的幫助,降低了C/C 的學(xué)習(xí)難度,提高了學(xué)習(xí)效率。
(2) 培養(yǎng)計(jì)算思維和問題解決能力: 本書通過精心設(shè)計(jì)的實(shí)踐任務(wù)和項(xiàng)目案例,引導(dǎo)讀者學(xué)會(huì)運(yùn)用計(jì)算思維去分析和解決問題,培養(yǎng)讀者的算法設(shè)計(jì)能力和創(chuàng)新能力。
(3) 手把手的教學(xué): 本書在軟件的安裝與使用、代碼的創(chuàng)建與運(yùn)行、程序的測(cè)試與調(diào)試、項(xiàng)目的開發(fā)與優(yōu)化等方面,提供了手把手的教學(xué),實(shí)現(xiàn)從零基礎(chǔ)入門到熟手的進(jìn)階。
(4) 理論與實(shí)踐相結(jié)合: 本書既詳細(xì)介紹了C/C 語言的基礎(chǔ)知識(shí)和核心概念,又通過豐富的實(shí)踐任務(wù)和項(xiàng)目案例,讓讀者在實(shí)際操作中深化理解,提升技能和項(xiàng)目開發(fā)能力。
(5) 配套OJ系統(tǒng): OJ系統(tǒng)作為實(shí)踐環(huán)節(jié)的得力助手,不僅能夠滿足教師組織班級(jí)集體參與的需求,也支持學(xué)生個(gè)體自主選擇參與。題目精心設(shè)計(jì),緊密圍繞知識(shí)圖譜展開,難度從易至難,逐級(jí)遞增,既有適應(yīng)日常練習(xí)的基礎(chǔ)題,也有富有挑戰(zhàn)性的競(jìng)賽級(jí)難題,為學(xué)習(xí)者提供了豐富的挑戰(zhàn)與成長(zhǎng)機(jī)會(huì)。
2. 章節(jié)結(jié)構(gòu)
第1章 熟悉Visual Studio編程環(huán)境,掌握項(xiàng)目創(chuàng)建、程序編寫與運(yùn)行的基本流程,并學(xué)習(xí)如何快速解決簡(jiǎn)單的編程錯(cuò)誤。
第2章 通過模仿與改寫的方式學(xué)習(xí)順序結(jié)構(gòu)程序設(shè)計(jì),加深理解并解決編譯與運(yùn)行中出現(xiàn)的錯(cuò)誤。在理解鍵盤緩沖區(qū)運(yùn)行機(jī)制的基礎(chǔ)上,利用Copilot簡(jiǎn)化輸入輸出語句的學(xué)習(xí)難度。最終,引導(dǎo)讀者利用Copilot探究C/C 編程中的注意事項(xiàng)。
第3章 學(xué)習(xí)分支結(jié)構(gòu)程序設(shè)計(jì),并掌握測(cè)試與調(diào)試的方法,以確保程序邏輯的正確性。
第4章 強(qiáng)調(diào)循環(huán)結(jié)構(gòu)的計(jì)算思維訓(xùn)練,學(xué)習(xí)循環(huán)程序的測(cè)試與調(diào)試技巧。
第5章 學(xué)習(xí)如何定義與使用函數(shù),為模塊化編程打下堅(jiān)實(shí)的基礎(chǔ)。
第6章 掌握一維數(shù)組的增刪改查操作,并學(xué)習(xí)一維數(shù)組程序的測(cè)試與調(diào)試方法。
第7章 深入學(xué)習(xí)二維數(shù)組的基本操作,并通過調(diào)試和編程實(shí)踐,加深理解。
第8章 學(xué)習(xí)字符數(shù)組(字符串)的基本知識(shí)與輸入方法,同時(shí)通過調(diào)試和編程實(shí)踐,掌握字符串的使用。
第9章 借助Visual Studio深入理解指針的概念,并學(xué)習(xí)動(dòng)態(tài)內(nèi)存分配、內(nèi)存泄漏以及因使用指針可能導(dǎo)致的程序錯(cuò)誤等問題。
第10章 學(xué)習(xí)結(jié)構(gòu)體與類的編程基礎(chǔ),深入掌握析構(gòu)函數(shù)、拷貝構(gòu)造函數(shù)與運(yùn)算符重載的作用與用法。
第11章 引入遞歸的計(jì)算思維,并利用Visual Studio的調(diào)用堆棧和監(jiān)視信息,直觀理解遞歸的執(zhí)行流程。
第12章 學(xué)習(xí)文件編程的基礎(chǔ)知識(shí),并掌握文本文件與二進(jìn)制文件的讀寫操作。
第13章 借助具體項(xiàng)目RSA解密,學(xué)習(xí)如何通過與Copilot交互,完成項(xiàng)目的設(shè)計(jì)與編碼,并通過測(cè)試、調(diào)試與進(jìn)一步交互,最終得到符合要求的項(xiàng)目代碼。
附錄A 提供Visual Studio軟件的安裝指南。
附錄B 詳細(xì)介紹Copilot的安裝與使用步驟,并指導(dǎo)學(xué)生完成學(xué)生認(rèn)證,實(shí)現(xiàn)免費(fèi)使用。
附錄C 介紹國產(chǎn)編程智能助手CodeGeeX的安裝與使用技巧。
附錄D 介紹教材配套實(shí)踐平臺(tái)的注冊(cè)與使用方法,并詳細(xì)解釋OJ系統(tǒng)中常用的輸入輸出方式。
由于編者水平有限,書中難免存在一些錯(cuò)誤和不足之處,希望有關(guān)專家、同行和讀者批評(píng)指正。編者2024年12月
第1章熟悉編程環(huán)境1
1.1本章目標(biāo)1
1.2運(yùn)行第一個(gè)C/C 程序1
1.2.1準(zhǔn)備工作1
1.2.2操作步驟1
1.3熟手進(jìn)階6
1.3.1創(chuàng)建空項(xiàng)目7
1.3.2向空項(xiàng)目添加已有文件9
1.3.3添加新文件10
1.3.4從項(xiàng)目中移除文件13
1.3.5使用Copilot14
1.4解決簡(jiǎn)單程序錯(cuò)誤16
1.4.1程序錯(cuò)誤的種類16
1.4.2缺少頭文件16
1.4.3缺少分號(hào)19
1.5課堂練習(xí)21
1.6本章小結(jié)23
第2章順序結(jié)構(gòu)程序設(shè)計(jì)25
2.1本章目標(biāo)25
2.2使用改寫編程序25
2.2.1從求長(zhǎng)方形面積到求周長(zhǎng)25
2.2.2從求長(zhǎng)方形面積到求圓面積27
2.2.3調(diào)換兩位數(shù)的個(gè)位與十位27
2.3解決程序編譯錯(cuò)誤28
2.3.1scanf不安全28
2.3.2標(biāo)識(shí)符未定義29
2.3.3左值問題29◆程序設(shè)計(jì)實(shí)踐教程(C/C 版)基于Visual Studio和GitHub Copilot目錄2.3.4類型不能轉(zhuǎn)換30
2.3.5%運(yùn)算符的操作數(shù)問題30
2.4解決程序簡(jiǎn)單運(yùn)行錯(cuò)誤31
2.4.1逗號(hào)表達(dá)式的問題31
2.4.2除號(hào)運(yùn)算符的問題32
2.5scanf和printf33
2.5.1printf函數(shù)的格式問題33
2.5.2scanf函數(shù)的格式問題34
2.5.3輸入緩沖區(qū)35
2.5.4輸入輸出容易犯的錯(cuò)誤37
2.5.5使用Copilot幫助輸出44
2.6cin和cout47
2.6.1cin.get()函數(shù)47
2.6.2使用setprecision控制輸出的有效數(shù)字50
2.6.3使用showpoint輸出浮點(diǎn)數(shù)末尾的051
2.6.4使用setprecision與fixed保留n位小數(shù)51
2.6.5setprecision、fixed與showpoint結(jié)合52
2.6.6設(shè)置輸出的寬度、填充及對(duì)齊方式53
2.6.7使用Copilot生成建議代碼54
2.7使用Copilot幫助編程與探究57
2.7.1數(shù)據(jù)類型的選擇57
2.7.2int類型的溢出問題58
2.7.3整數(shù)類型的整除問題58
2.7.4浮點(diǎn)數(shù)類型的精度問題59
2.7.5浮點(diǎn)數(shù)類型的誤差問題59
2.7.6使用Copilot探究60
2.8課堂練習(xí)63
2.9本章小結(jié)64
第3章分支結(jié)構(gòu)程序設(shè)計(jì)65
3.1本章目標(biāo)65
3.2分支程序設(shè)計(jì)實(shí)驗(yàn)65
3.3程序測(cè)試67
3.3.1關(guān)系表達(dá)式測(cè)試: ==與!=68
3.3.2關(guān)系表達(dá)式測(cè)試: <<=>與>=68
3.3.3邏輯表達(dá)式測(cè)試69
3.3.4switch的測(cè)試74
3.3.5測(cè)試實(shí)例76
3.4調(diào)試程序78
3.4.1調(diào)試程序的基本知識(shí)78
3.4.2跟蹤程序執(zhí)行流程81
3.4.3使用調(diào)試定位錯(cuò)誤85
3.4.4調(diào)試實(shí)踐89
3.4.5VS不能調(diào)試的解決辦法95
3.5Copilot實(shí)踐: 程序改錯(cuò)96
3.6Copilot實(shí)踐:存款到期日期97
3.6.1需求描述97
3.6.2Copilot Chat交互98
3.7課堂練習(xí)101
3.8本章小結(jié)103
第4章循環(huán)結(jié)構(gòu)程序設(shè)計(jì)104
4.1本章目標(biāo)104
4.2循環(huán)的計(jì)算思維的建立104
4.2.1一重循環(huán)104
4.2.2從一重循環(huán)到二重循環(huán)108
4.3循環(huán)程序測(cè)試109
4.3.1循環(huán)控制結(jié)構(gòu)測(cè)試109
4.3.2循環(huán)控制與條件分支結(jié)合的測(cè)試112
4.3.3兩重循環(huán)的測(cè)試115
4.4調(diào)試程序: 監(jiān)視變量的值116
4.4.1監(jiān)視變量的值,定位錯(cuò)誤行116
4.4.2利用調(diào)試解決疑難雜癥120
4.5Copilot實(shí)踐123
4.5.1九九乘法表 123
4.5.2判斷素?cái)?shù) 125
4.6課堂練習(xí)127
4.7本章小結(jié)129
第5章函數(shù)130
5.1本章目標(biāo)130
5.2函數(shù)的使用130
5.2.1使用函數(shù)提高復(fù)用性130
5.2.2模塊化編程133
5.2.3變量作用范圍136
5.3調(diào)試程序137
5.3.1單步執(zhí)行跟蹤進(jìn)入函數(shù)137
5.3.2調(diào)試排錯(cuò)139
5.4使用頭文件145
5.4.1為什么要自己定義頭文件145
5.4.2定義和使用頭文件146
5.5使用Copilot幫助編寫函數(shù)151
5.5.1定義函數(shù)151
5.5.2調(diào)用函數(shù)153
5.5.3典型程序的函數(shù)153
5.6Copilot模塊化編程:日歷154
5.6.1模塊化編程概述154
5.6.2日歷程序需求描述154
5.6.3Copilot Chat交互154
5.7課堂練習(xí)161
5.8本章小結(jié)161
第6章一維數(shù)組162
6.1本章目標(biāo)162
6.2基本操作: 增刪改查162
6.3增刪改查的應(yīng)用165
6.3.1訪問元素165
6.3.2修改元素166
6.3.3刪除元素166
6.3.4有序插入167
6.3.5循環(huán)數(shù)組169
6.4下標(biāo)越界問題170
6.5程序測(cè)試172
6.5.1遍歷的測(cè)試172
6.5.2刪除的測(cè)試173
6.5.3插入的測(cè)試174
6.6調(diào)試程序174
6.7Copilot實(shí)踐: 程序改錯(cuò)182
6.8課堂練習(xí)183
6.9本章小結(jié)183
第7章二維數(shù)組185
7.1本章目標(biāo)185
7.2基本操作185
7.3調(diào)試程序187
7.4Copilot實(shí)踐: 五子棋189
7.5課堂練習(xí)193
7.6本章小結(jié)193
第8章字符數(shù)組194
8.1本章目標(biāo)194
8.2字符串的結(jié)尾\\0194
8.3輸入字符串195
8.3.1scanf函數(shù)195
8.3.2cin>>讀取字符串196
8.3.3gets_s函數(shù)196
8.3.4fgets函數(shù)197
8.3.5字符串輸入方式總結(jié)199
8.4調(diào)試程序199
8.5Copilot實(shí)踐: 程序改錯(cuò)203
8.6Copilot實(shí)踐: 鍵盤打字游戲206
8.6.1需求描述206
8.6.2Copilot Chat交互206
8.7課堂練習(xí)216
8.8本章小結(jié)216
第9章指針218
9.1本章目標(biāo)218
9.2指針基礎(chǔ)218
9.3深入理解數(shù)組的指針221
9.4動(dòng)態(tài)內(nèi)存分配224
9.4.1動(dòng)態(tài)內(nèi)存分配的應(yīng)用224
9.4.2動(dòng)態(tài)內(nèi)存分配的注意事項(xiàng)226
9.5使用指針引起崩潰的情況227
9.6課堂練習(xí)229
9.7本章小結(jié)229
第10章結(jié)構(gòu)體與類230
10.1本章目標(biāo)230
10.2結(jié)構(gòu)體編程230
10.2.1結(jié)構(gòu)體作函數(shù)參數(shù)230
10.2.2在VS中使用結(jié)構(gòu)體232
10.2.3結(jié)構(gòu)體數(shù)組的多條件排序232
10.3類的編程236
10.3.1基本概念236
10.3.2為什么需要析構(gòu)函數(shù)236
10.3.3為什么需要拷貝構(gòu)造函數(shù)及重載賦值操作238
10.3.4小于號(hào)和函數(shù)調(diào)用符的重載241
10.4本章小結(jié)242
第11章遞歸243
11.1本章目標(biāo)243
11.2遞歸的計(jì)算思維243
11.3理解遞歸執(zhí)行流程245
11.3.1查看調(diào)用堆棧245
11.3.2Hanoi塔251
11.4調(diào)試程序258
11.5Copilot實(shí)踐: 迷宮問題261
11.5.1問題介紹261
11.5.2Copilot Chat交互262
11.6課堂練習(xí)268
11.7本章小結(jié)269
第12章文件操作270
12.1本章目標(biāo)270
12.2文件編程基礎(chǔ)270
12.2.1文件的基礎(chǔ)知識(shí)270
12.2.2文件操作的步驟270
12.2.3C語言文件操作270
12.2.4C 文件操作272
12.2.5文件讀寫位置指針274
12.2.6文件打開模式詳解276
12.3文本文件的讀寫283
12.3.1寫入文本文件283
12.3.2讀文本文件285
12.4二進(jìn)制文件的讀寫287
12.4.1寫二進(jìn)制文件287
12.4.2讀二進(jìn)制文件288
12.5程序改錯(cuò)290
12.5.1調(diào)試改錯(cuò)290
12.5.2Copilot改錯(cuò)294
12.6項(xiàng)目實(shí)踐294
12.6.1文本文件讀寫: 字母頻率294
12.6.2二進(jìn)制文件讀寫: 學(xué)生成績(jī)系統(tǒng)299
12.7課堂練習(xí)303
12.8本章小結(jié)303
第13章項(xiàng)目開發(fā)實(shí)踐: RSA解密304
13.1本章目標(biāo)304
13.2C語言實(shí)現(xiàn)304
13.2.1RSA介紹304
13.2.2項(xiàng)目需求304
13.2.3功能模塊設(shè)計(jì)304
13.2.4功能模塊實(shí)現(xiàn)305
13.2.5運(yùn)行程序314
13.2.6bignum大數(shù)模塊測(cè)試315
13.2.7素?cái)?shù)和因數(shù)分解模塊測(cè)試327
13.3改寫為C 327
13.3.1需求描述327
13.3.2大數(shù)類328
13.3.3素?cái)?shù)判斷函數(shù)332
13.3.4因數(shù)分解函數(shù)333
13.3.5主函數(shù)333
13.3.6測(cè)試334
13.4本章小結(jié)334
附錄AVisual Studio的安裝335
A.1下載社區(qū)版335
A.2安裝336
附錄BCopilot的安裝與使用339
B.1Copilot介紹339
B.2GitHub的注冊(cè)及試用340
B.2.1注冊(cè)340
B.2.2申請(qǐng)?jiān)囉?41
B.3GitHub學(xué)生認(rèn)證342
B.3.1前期準(zhǔn)備342
B.3.2申請(qǐng)學(xué)生認(rèn)證347
B.3.3錯(cuò)誤解決349
B.4為VS安裝GitHub Copilot擴(kuò)展350
B.4.1安裝350
B.4.2添加GitHub 賬戶到VS352
B.5使用GitHub Copilot354
B.5.1輸入注釋生成建議354
B.5.2啟用或禁用 GitHub Copilot356
B.6為VS安裝GitHub Copilot Chat擴(kuò)展356
B.7使用GitHub Copilot Chat357
B.7.1兩種交互方式357
B.7.2向Copilot提問359
B.7.3引用代碼并解釋代碼(/explain)360
B.7.4修改bug(/fix)362
B.7.5優(yōu)化代碼(/optimize)363
B.7.6其他功能364
B.7.7多輪交互調(diào)優(yōu)回復(fù)364
B.8小結(jié)367
附錄CCopilot的國產(chǎn)替代: CodeGeeX369
C.1CodeGeeX介紹369
C.2CodeGeeX插件的安裝369
C.3CodeGeeX設(shè)置370
C.4代碼生成與智能補(bǔ)全371
C.4.1單行代碼生成與補(bǔ)全371
C.4.2多行代碼生成371
C.4.3注釋生成代碼371
C.5智能問答372
C.5.1代碼解釋、注釋及修復(fù)372
C.5.2問答交互372
C.6小結(jié)374
附錄D實(shí)踐平臺(tái): OJ系統(tǒng)375
D.1OJ系統(tǒng)介紹375
D.1.1OJ系統(tǒng)簡(jiǎn)介375
D.1.2教材配套OJ系統(tǒng)375
D.2OJ中的輸入輸出規(guī)定376
D.3OJ中多組數(shù)據(jù)的輸入輸出377
D.3.1輸入378
D.3.2輸出384
參考文獻(xiàn)387