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