【ChatGPT 辅助编程】借助 AI 提高学习效率
这几天好几个人问我编程导航有没有 AIGC 相关的内容,AIGC 现在是真火,咱们星球当下确实没什么相关内容,我前段时间在打磨自己的小产品,目前卖了快 3000 单,有部分就是讲 AIGC 应用的。
我想了想,直接发出来得了,这样以后和想进编程导航的读者解释起来也容易,降低我拉新的时间成本。
话不多说,进入正题,文章分为以下 9 部分,内容有点多,文章也肯定存在不足,欢迎大佬们提建议:
- ChatGPT 辅助编程 1 | 核心要素
- ChatGPT 辅助编程 2 | 如何帮你学编程
- ChatGPT 辅助编程 3 | 如何纠错
- ChatGPT 辅助编程 4 | 开发工具怎么选
- ChatGPT 辅助编程 5 | 解惑具体知识
- ChatGPT 辅助编程 6 | 提高编程技巧
- ChatGPT 辅助编程 7 | 类比学习编程
- ChatGPT 辅助编程 8 | demo 实战
- ChatGPT 辅助编程 9 | 贪吃蛇小项目
以下内容,我会以C语言编程为例,来教大家底层的辅助学习方法。
语言是死的,方法是活的,你掌握这个学习方法,同理到 C++、Java、Python、前端,甚至数据结构都适用。
一、核心要素
如果你看过前面的写作案例,你一定也能理解编程核心。
因为借助 GPT 辅助写作或者辅助编程,本质都是在辅助你提高某项技能,什么意思呢?
意思就是借助 GPT 辅助编程的核心一样是要能提出好问题。
GPT 是工具,不是人,它理解不了需求不清晰的指令,理解不了用户心理,这些都需要【人】,也就是【你】来实现。
举个例子:程序员在写代码中都会遇到各种难度不一的问题,想找个交流群。
于是便去微信、QQ搜索相对应的交流群。例如:C语言聊、Java群。
加群之后不同的人有独属于自己的提问方法:
甲:有人在么?
乙:有大佬在么,想问个题?
丙:有人做过什么项目么,想取取经?
丁:如何快速入门C语言?
前三种回复:不在,在了也不回你,回你也不是这个问题。
第四种回复:群里开始讨论怎么入门,最终大家一致同意:放弃学C语言是最快的入门方法。
所以说理解了嘛,当你问人的问题描述不清的时候都没人理你,你问 GPT 它能知道嘛。
那么如何正确的提问呢?
先说一点,也是最重要的:你要向 GPT 说清楚要用什么语言来实现。
这点很重要,前两天我直播用文心一言来回答问题,很多观众上来就是这个题怎么做,那个题怎么做。
文心一言用 Python 给出源码后,对方还理直气壮的问,为什么文心一言用了 Python ,没有用 Java。
拜托啊,你提问的时候就没告诉文心一言要用什么语言来实现。
二、如何帮你学编程
在利用 ChatGPT 辅助学C语言之前,你得先知道,它到底能辅助你干什么。
小林:作为一个语言模型,你能给C语言初学者提供什么帮助,请罗列具体的点。
ChatGPT:作为一个语言模型,我可以为C语言初学者提供以下帮助:
1、提供C语言的基础知识和语法介绍,包括数据类型、控制语句、函数、指针等等。
2、解答C语言相关问题,例如编译错误、运行时错误、逻辑错误等等。
3、给出一些C语言编程的例子和实践,帮助初学者更好地理解和掌握C语言编程技巧。
4、推荐一些C语言编程的学习资源,例如书籍、网站、视频等等,帮助初学者更系统地学习C语言。
5、提供一些常用的C语言开发工具和环境的介绍,例如IDE、编辑器、调试器等等,帮助初学者更高效地开发C语言程序。
总之,我可以根据初学者的需求和问题,提供相应的帮助和支持,帮助他们更好地学习和掌握C语言编程技能。
既然 ChatGPT 给了 5 点回复,后面小林会根据这 5 点回复,来给大家由浅到深展示,如何利用 ChatGPT 来辅助学习C语言。
三、如何纠错
纠错是很多人关心的问题,因为对于初学者来说,问的通常是非常基础的问题,问老师吧,又不敢,觉得自己的问题太 low,自己找又找不到人问。
去百度搜索,也不知道如何下手搜。
今天这篇就来讲一下如何利用 ChatGPT 纠错你写的C语言代码。
先来一个小案例。
小林:请帮我检查一下,这个C语言代码哪里出错了,为什么编译不成功?
ChatGPT :你的代码缺少了结束符号,应该加上分号";"。
以下是修改后的代码:
同时,在main函数中,最好添加一个return 0;语句以明确表示程序正常结束。
上面这个案例是代码短,如果代码非常长,你去复制粘贴有点不现实,那应该怎么办呢?
很简单呀,先在自己的编译器上运行一下,然后将报错提示复制出来给到 ChatGPT 。
举个例子:还是刚刚的代码,这次我不贴代码,我贴报错提示。
小林:我在写C语言代码的过程中,遇到了这样的报错,是什么原因导致的呢?
ChatGPT :这个错误通常是由于缺少分号引起的,C语言的语法比较严格,每个语句都必须以分号结尾。
解决方法是检查代码中是否有缺少分号的情况,特别是在函数定义、结构体定义、枚举定义等地方。
另外,也要检查是否有多余的括号或者缺少括号的情况,这些也可能会导致类似的错误。
你看,不论直接贴代码,还是贴报错提示,GPT 都是可以辅助你学编程的。
四、开发工具怎么选
这章让 GPT 帮我介绍一些C语言开发工具。
小林:请给我推荐一个最适合初学者的C语言开发工具。
GPT:推荐初学者使用 Dev-C++,它是一个免费、开源的 C/C++ 集成开发环境(IDE),具有易于使用和灵活的特点。它是一个流行的开发工具,尤其是在学习 C/C++ 编程时。
以下是一些 Dev-C++ 的特点:
1、具有易于使用的图形用户界面,适合初学者使用。
2、内置编译器,支持多种编译器,例如 MinGW 和 TDM-GCC。
3、提供了一些有用的工具,例如调试器、代码补全、语法高亮等。
4、支持多种文件格式,例如 .cpp、.h、.c 等。
5、具有插件扩展功能,可以通过插件添加更多的功能。
总之,Dev-C++ 是一个不错的 C/C++ 开发工具,适合初学者使用,但是它已经有些年头了,开发者也已经停止更新和维护。
小林:Dev-C++ 是哪一些出现的?
Dev-C++ 开发工具是由 Bloodshed Software 公司开发的,最早发布于 1998 年。
后来,Bloodshed Software 公司停止了 Dev-C++ 的开发和维护,但是该工具的源代码被转移到了一个名为 Orwell Dev-C++ 的项目中,并由 Orwell 继续开发和维护。
Orwell Dev-C++ 是一个开源的项目,旨在提供一个现代、稳定和易于使用的 C/C++ 开发环境。
小林:如果我现在想用 Dev-C++ ,应该去哪里下载?
GPT:您可以前往以下网站下载 Dev-C++:sourceforge.net
小林:请再给我推荐一些C语言开发工具。
GPT:以下是一些常用的 C 语言开发工具。
1、 Visual Studio Code:一个免费的开源代码编辑器,支持 C 语言开发和调试。
2、Code::Blocks:一个免费的跨平台 C/C++ IDE,支持多种编译器和调试器。
3、Eclipse:一个开源的跨平台 IDE,支持多种编程语言,包括 C 语言。
4、NetBeans:一个免费的跨平台 IDE,支持多种编程语言,包括 C 语言。
5、Atom:一个免费的开源代码编辑器,支持 C 语言开发和调试。
6、Sublime Text:一个免费的文本编辑器,支持 C 语言开发和调试。
7、Turbo C++:一个免费的 Windows 平台 IDE,专门为 C/C++ 开发设计。
8、Visual Studio:一个商业化的 IDE,支持多种编程语言,包括 C 语言。
9、Xcode:一个免费的 IDE,专门为 macOS 和 iOS 开发设计,支持 C 语言。
整体来说,推荐开发工具效果还是不错的,能给初学者推荐开发工具,也能介绍开发工具的背景和创始人。
除此之外,还能给提供其他开发工具,这里有好几个小林都没听过,真的是扩宽了我的认知盲区。
五、解惑具体知识
这章通过具体的基础知识,来给大家演示。
小林:我是一名零基础学生,刚接触C语言,发现好多代码都有 return 0,但是我不知道它有什么作用,请以一名教师的身份,详细介绍一下 return 0 的作用。
GPT:在C语言中,return 0是一个非常常见的语句,它的作用是告诉程序执行完毕并且没有发生错误。这个语句通常出现在main函数的末尾,表示程序正常结束。
当程序执行到main函数的末尾时,操作系统会检查程序的退出状态码,如果状态码为0,则表示程序正常退出,否则表示程序发生了错误或者异常情况。
因此,return 0语句的作用是设置程序的退出状态码为0,告诉操作系统程序正常退出。
在实际编程中,我们可以根据需要设置不同的退出状态码,例如返回错误代码或者其他特定的状态码。但是,在大多数情况下,我们都使用return 0语句来表示程序正常结束。
总之,return 0语句是C语言中非常重要的语句之一,它用于告诉操作系统程序的退出状态码,以便操作系统能够正确地处理程序的退出。
上面这个解释够详细了,小林觉得初学者也是可以看懂的。
继续问其他基础,小林:C语言代码中的 printf 是干什么的,它的语法是什么,如何使用 printf,请以C语言教师的身份,详细解释一下。
GPT:在C语言中,printf是一个常用函数,它的作用是将数据输出到标准输出设备(通常是屏幕)。
printf函数可以输出各种类型的数据,例如字符串、整数、浮点数等等。
printf函数的语法如下:
其中,format是一个字符串,它指定了输出的格式。字符串中可以包含普通字符和格式控制符,格式控制符用来指定输出的数据类型和格式。
例如,%d表示输出整数,%f表示输出浮点数,%s表示输出字符串等等。
printf函数还可以接受多个参数,每个参数对应一个格式控制符。
例如,如果要输出一个整数和一个字符串,可以这样写:
在上面的代码中,%d和%s分别对应num和str这两个变量,\n表示换行符。
需要注意的是,printf函数返回值是输出的字符数,也就是输出的字符串的长度。
如果输出失败,返回值为负数。
总之,printf函数是C语言中非常常用的函数,它可以输出各种类型的数据,通过格式控制符可以指定输出的格式,通过多个参数可以输出多个数据。
在实际编程中,printf函数可以帮助我们调试程序、输出结果等等。
GPT 这个回答真的非常详细了,有文字解释,有代码举例,比去百度来的强多了。
继续玩,小林:我现在学到C语言的一维数组了,可是我有点不理解为什么数组的下标要从 0 开始,请以一名C语言教师的身份,给我详细解释一下。
GPT:在C语言中,数组的下标从0开始是一种约定俗成的规定。这个规定源于C语言的设计和实现。
C语言中的数组是一种连续的数据结构,数组的每个元素在内存中都是相邻的。
当我们定义一个数组时,编译器会在内存中为数组分配一段连续的空间,并按照顺序给数组元素编号。
这个编号从0开始,每个元素的编号就是它在数组中的位置。
例如,如果我们定义一个长度为5的整型数组,编译器会为这个数组分配5个整型变量的空间,编号分别为0、1、2、3、4。因此,我们可以通过下标来访问数组中的元素,下标的取值范围是0到数组长度减1。
这种从0开始编号的方式在C语言中被广泛采用,因为它非常直观和方便。
例如,我们可以用a[i]来表示数组a中的第i个元素,这种方式非常直观和自然。
此外,从0开始编号还有一个好处,就是可以和指针运算结合使用。
在C语言中,指针可以看作是数组的下标,指针的偏移量就是数组元素的下标。
因此,从0开始编号可以使指针运算更加方便和自然。
总之,数组的下标从0开始是C语言的一种约定俗成的规定,它源于C语言的设计和实现,也是为了方便和自然。
在实际编程中,我们需要遵守这个规定,以便编写出更加清晰、简洁和高效的代码。
GPT 的这个回复,比小林自己写的文章都要详细多了。
六、辅导编程技巧
小林这些年遇到过最多的情况是,很多学员拿到一道题后,能看懂题目什么意思,但是无从下手,不知道怎么切入。
今天这篇就来写写如何用C语言快速编程。
小林:我现在拿到一道C语言题,能看懂题目的意思,但是不知道怎么下手编程,为什么会出现这种情况?
GPT:这种情况很常见,通常是因为你对某些C语言的概念或者语法不够熟悉,或者对题目的要求没有理解清楚。
小林:能给我一些具体的建议吗?
GPT:当然可以,下面给你一些解决这种情况的建议。
1、理解题目要求
首先要认真阅读题目,理解题目的要求和意图,明确需要编写的程序功能和输出结果。如果有不理解的地方,可以查阅相关资料或者向老师、同学求助。
2、分析问题
在理解题目要求的基础上,需要分析问题,思考如何实现程序功能。可以把问题分解成若干个小问题,逐个解决。可以画图、列表或者写伪代码,帮助自己更好地理解问题。
3、查阅资料
如果遇到不熟悉的C语言概念或者语法,可以查阅相关资料,例如C语言教材、网上教程、编程手册等等。
总之,遇到不知道怎么下手编程的情况,不要慌张,需要认真分析问题,理解题目要求,查阅资料,多进行实践练习,提高自己的编程能力和解决问题的能力。
小林:C语言基础知识,我基本上都知道,就是不会写代码,这是为什么?
GPT:学习C语言的基础知识只是掌握了C语言的语法和概念,但是能否写出代码还需要进行实践练习。
很多初学者在学习C语言时,只是停留在理解概念和语法的层面,没有进行充分的实践练习,导致写代码的能力不够强。
此外,写代码需要一定的思维能力和逻辑思维能力。有些人可能在学习C语言的过程中,没有充分锻炼这些能力,导致写代码的能力不够强。
解决这个问题的方法是多进行实践练习,多写一些小程序、练习题、实验等等,提高自己的编程能力和解决问题的能力。
同时,也要多进行思维训练,提高自己的逻辑思维能力和分析问题的能力。可以通过阅读相关书籍、参加编程培训班、参加编程竞赛等方式来提高自己的编程能力。
小林:请给我一些具体的刷C语言题技巧,我想快速改变这个局面。
GPT:以下是一些刷C语言题的技巧。
1、刷题分类
将题目按照难度、类型等分类,有针对性地进行刷题。可以从简单的题目开始,逐渐提高难度。
2、刷题记录
建立一个刷题记录表,记录每个题目的题目类型、难度、解题思路、时间复杂度、空间复杂度等信息,便于以后查找和复习。
3、多思考实践
在刷题的过程中,要多思考解题思路和算法,多实践编写代码。可以多看看其他人的题解,学习他们的解题思路和算法。
4、考虑边界条件
在编写代码时,要考虑到各种边界条件,例如输入数据的范围、特殊情况等,避免出现错误或程序崩溃。
5、优化代码
在编写代码后,可以进行代码优化,例如使用更高效的算法、减少循环次数、避免重复计算等,提高程序的效率。
6、反复练习
反复练习同一类型的题目,加深对该类型题目的理解和掌握程度。同时,可以多刷一些真实面试题目,提高应对面试的能力。 希望以上技巧能对您有所帮助。
GPT 给的这些建议和刷题技巧非常实用,如果让小林来推荐,也无非是这些内容,想要快速入门C语言,就是刷题。
刚开始看懂代码,能照着敲下来,逐渐不看代码,一边思考一边敲,到后面看到一道题,代码思路直接脑海里就呈现出来。
能到这个阶段,小林认为你已经入门C语言了。
七、类比法学习编程
这章是小林朋友给的启发,朋友提了一个不同视角,这点我之前确实没想到。
小林:你知道C语言 printf 函数吗?
GPT:是的,我知道 C 语言的 printf 函数。printf 函数是 C 语言中常用的输出函数,用于将指定的格式化数据写入标准输出流中。
小林:C语言 printf 我还是有点不理解,你能用生活中我们常见的事,举个例子,让我更直接的理解它的作用吗?
GPT:类比到程序中,printf 函数就是一个可以帮助我们将变量转换为字符串并输出到标准输出流中的工具。
它可以将格式化字符串中的格式化指令和普通字符解析出来,根据指令将变量转换为字符串,并输出到控制台或者文件中。
这个过程类似于我们打印一份文档,只不过是在程序中进行的。
例如,我们可以使用 printf 函数输出一个简单的问候语句:
这段代码的输出结果就是:`Hello, John!`。
可以看到,我们使用了 `%s` 格式化指令将字符串变量 `name` 转换为字符串,并输出到控制台中。
小林:你知道C语言 scanf 函数吗?
GPT:是的,我知道 C 语言中的 scanf 函数。scanf 函数是 C 语言中常用的输入函数,用于从标准输入流 stdin 中读取格式化数据。
小林:scanf 还是有点不理解,你能用生活中常见的事,举个例子,帮助我更直接理解scanf 的作用吗?
GPT:当你去超市购物时,你会用购物清单来记录你需要购买的物品。当你在超市中选择了某个物品后,你会把它的名称和数量记录在清单上。
这就好比使用scanf函数,它可以从用户输入的内容中读取特定的值并将其存储在变量中,就像记录购物清单上的物品名称和数量一样。这样,程序就可以使用这些变量来进行计算或其他操作。
小林:这个案例不够形象,请换个更形象的。
GPT:假设你正在打电话,需要输入对方的电话号码。使用scanf函数就像你在电话上输入数字一样。
当你拨完号码后,电话系统会将你输入的数字存储在系统中,就像scanf函数将输入的数据存储在变量中一样。
这样,程序就可以使用这些变量来进行计算或其他操作。
小林:这个够形象,我一下子理解 scanf 的作用了,谢谢!
GPT:不客气,随时为您服务!如果您还有其他问题,可以随时问我哦!
上面七章,你如果掌握了,足以学好一门编程语言了,最后给大家演示个具体的案例。
八、demo 案例实战
我让 GPT 帮我写个具体的 demo,然后给我解释每一行代码的意思。
1、基础题详解
小林:你能帮我写C语言代码么?
GPT:当然可以,我可以帮您编写C语言代码。请告诉我您需要编写的具体内容,我会尽力为您提供帮助。
小林:今天老师讲了斐波那契算法,我实在听不懂,先帮我用C语言写个斐波那契 demo。
GPT:好的,以下是用C语言写的斐波那契数列的 demo.
小林:你这个代码和老师讲的差不多,我看不懂的是 for 循环里面的算法,请帮我分析一下。
GPT:好的,下面我来分析一下这个 for 循环里面的算法。
在斐波那契数列中,每一项都等于前两项之和,因此我们可以使用两个变量 a 和 b 来分别记录前两项的值。
在循环开始时,a 和 b 分别初始化为 0 和 1,因为斐波那契数列的第一项和第二项分别为 0 和 1。
在循环体中,我们使用变量 c 来记录当前项的值,计算方法是将前两项的值相加。
然后将 a 和 b 的值更新为上一项和当前项,以便计算下一项的值。
最后,将 c 的值输出即可。
需要注意的是,循环的起始值为 3,因为前两项已经在循环外部输出了,所以从第三项开始计算和输出。
循环的终止条件是 i <= n,即计算并输出前 n 项斐波那契数列。
这个算法的时间复杂度为 O(n),因为循环执行了 n-2 次,每次执行的时间复杂度为 O(1)。相比递归算法,非递归算法的时间复杂度更低,效率更高。
小林:懂了,对于 for 语句我掌握的不是很扎实,请以C语言教师的身份,详细给我讲下 for 语句。
GPT:好的,下面我来详细地讲解一下 C 语言中的 for 语句。
for 语句是 C 语言中用于循环执行某段代码的结构,它的语法格式如下:
其中,初始化表达式用于初始化循环变量,循环条件表达式用于判断循环是否继续执行,循环后表达式用于更新循环变量的值。
循环体语句则是需要重复执行的代码块。 for 语句的执行过程如下:
1. 执行初始化表达式,用于初始化循环变量的值;
2. 执行循环条件表达式,判断循环是否继续执行。如果表达式的值为真,则执行循环体语句,否则跳出循环;
3. 执行循环后表达式,用于更新循环变量的值;
4. 回到步骤 2,重复执行上述步骤,直到循环结束。
需要注意的是,for 语句中的三个表达式都可以为空。
如果初始化表达式为空,则不会初始化循环变量的值;如果循环条件表达式为空,则默认为真,将一直循环下去;如果循环后表达式为空,则不会更新循环变量的值。
此外,for 语句还可以与 break 和 continue 语句配合使用,用于控制循环的执行流程。
break 语句用于跳出循环,continue 语句用于跳过当前循环,进入下一次循环。 希望这个解释能够帮助你更好地理解 for 语句的用法。
上述这个案例,是不是很典型,GPT 不仅可以帮小林写代码,还能针对具体的困惑点给出建议,而且当小林对于具体的基础知识不扎实的时候,还能让对方给我再讲一遍。
2、再来个复杂点的冒泡排序
小林:假如你是一名程序员(角色),现在帮我用C语言写个冒泡排序(任务),要求代码有思路和注释(指令)。
下述是 GPT 的回答:
角色:程序员
任务:用C语言写一个冒泡排序
指令:
1. 定义并初始化一个需要排序的数组,例如 int array[] = {5, 3, 8, 4, 2};
2. 利用两层for循环进行排序,外层循环控制排序的次数,内层循环控制每次比较相邻的两个数。
3. 在内层循环中,依次比较相邻的两个数,如果前面的数大于后面的数,则交换两个数的位置。
4. 继续进行排序,直到所有的数都按照从小到大的顺序排列好。
5. 冒泡排序的时间复杂度较高,不适合对大数组进行排序。
代码如下(已注释说明):
以上,学废了嘛。
九、贪吃蛇小项目
小林:假如你是一名初级C语言开发,能否辅助我开发个小游戏。
GPT:当然可以。
小林:请给我写一套完整的游戏开发方案。
GPT:
1、确定游戏类型
首先需要确定你要开发的小游戏类型,例如迷宫游戏、俄罗斯方块、打飞机等。
2、设计游戏逻辑
根据游戏类型,设计游戏的逻辑和规则。这包括游戏的玩法、计分规则、难度等级等。
3、编写代码
根据游戏逻辑,使用C语言编写游戏代码。你可以使用各种C语言库和框架来帮助你实现游戏,例如SDL、OpenGL等。
4、调试代码
在编写代码过程中,需要进行调试和测试,确保游戏可以正常运行,并且没有错误和bug。
5、美化游戏界面
在游戏逻辑和代码实现完成后,可以考虑美化游戏界面,增加游戏的视觉效果。
6、发布游戏
最后,你可以将游戏发布到互联网上,让更多人来体验你的小游戏。
小林:以一名初级C语言开发者的角度,帮我写个贪吃蛇小游戏,要求源码可以在 Devcpp 上编译运行。
GPT:下面是一个简单的贪吃蛇游戏的C语言代码示例。
这个源码,小林在 Devcpp 上运行了,可以正常编译,虽然代码有点不足,但已经具备初级开发的水平了。
前几天小林新学了一招,如果你让 GPT 来帮你写代码,一定要补充一句:
请帮我在代码里增加防注入防黑客的安全校验。
为什么加这句话?
因为不加的话,代码比较简陋,很容易被黑客攻克。
现在 AI 真的很强大了,强大到有点出乎我的意料。
当然了,它依旧有很多不足,昨天还有个朋友给我说:提了几个问题,感觉回复的差强人意,里面的回答出现了明显的错误。
出现错误很正常,你不要把它当成智脑,应该把它当作工具。
学会利用它来提供工作效率,现在就算 GPT4 也不会说 100% 正确,都还需要你后期润笔。
如果它真的强大到不用你的任何润笔,那裁员估计又要来了。
毕竟 AI 可不会说要休息,人家能每天 24 小时高强度工作。
不要有任何排斥不想用的观点,这玩意真的是大势所趋了。
以上,就是今天的分享,信息量有点大,大家收藏慢慢看,记得点个赞呀~
