编程入门
文章平均质量分 94
编程入门
_Rye_
左手代码右手诗
一行代码一行诗
展开
-
30 | 毕业设计:实现你自己的计算器程序
到了这里,关于如何利用表达式树来解决表达式计算问题,我们就解释完了。最后,我们就来看一下,确定运算符计算顺序的处理技巧。原创 2024-04-11 15:44:08 · 954 阅读 · 0 评论 -
29 | 尝试升级(下):“链表”知识在测试框架中的应用
上节课中,我们通过参考 gtest 的输出,完善了我们自己的测试框架的输出信息,也就是添加了测试用例的名称、运行结果以及运行时间。。就是要开发新的功能之前,我们应该先考虑清楚实现这部分功能相关的数据,在系统中的存储与使用的情况,只有这样,才能更好地完成功能的实现与迭代优化。今天迎来我们整个测试框架项目的最后一节课。这节课的目的,一是对前几节课内容进行一个总结,二是向你说明我们现在开发的测试框架代码,其实还有很多优化的空间。至于这个优化空间是什么呢?原创 2024-04-11 14:56:35 · 758 阅读 · 0 评论 -
28 | 尝试升级(上):完善测试框架的功能与提示
在上一节课中呢,我们学习了测试框架的主要功能流程,完成了最重要的 RUN_ALL_TESTS 函数的功能逻辑。并且在这个学习期间,我们还使用了注册函数的技巧,就是让一些函数先于主函数执行,将测试用例函数信息记录在一个函数指针数组中,为后续的 RUN_ALL_TESTS 函数功能的执行作铺垫。可你有没有发现,我们上节课程所完成的代码,只能让我们的测试框架在整体流程功能上跑通,然而程序的输出内容却不如 gtest 丰富。原创 2024-04-11 14:23:02 · 983 阅读 · 0 评论 -
27 | 牛刀小试(下):实现一个自己的测试框架
上节课中,我们讲到了软件开发一般分为前中后三个部分,提到作为技术人员的我们,一般主要负责在软件开发中期的编码与测试阶段。还有,我还讲到我们一般会综合运用白盒测试与黑盒测试这两种方法来进行程序测试。更主要的是,我们还介绍了 Google 的单元测试框架 gtest,并对测试框架代码进行了一番解读。其中提到代码中的 TEST 是一个宏,那它展开后被替换的内容是什么呢?还有, RUN_ALL_TESTS 函数是如何依次执行程序中所有的测试用例函数的?原创 2024-04-11 10:27:51 · 981 阅读 · 0 评论 -
26 | 牛刀小试(上):实现测试框架前的基础准备
经历了千难万险,我们终于来到了这次编程探险旅程的最后一个阶段“综合项目篇”。还记得开篇的时候,跟你讲过的,要带你看看这片编程森林中最有趣的地方,不知道你感受到这份乐趣了吗?接下来的最后几节课,是为你精心准备的,作为你编程入门学习之行的完成礼物,同时,也是对整个专栏学习内容的一个总结升华。对于本章的学习,你需要综合运用“语言基础篇”“编码能力训练篇”以及“算法数据结构篇”中所学知识,完成两个小项目,一个是“个人测试框架开发”,另一个是“自制简易计算器”。原创 2024-04-11 09:13:24 · 671 阅读 · 0 评论 -
做好闭环(四):二分答案算法的代码统一结构
不知不觉,我们已经讲完了“算法数据结构篇”的全部内容。说是“讲完”,其实更意味着你的算法数据结构的学习之路才刚刚开始,因为编程的核心与灵魂就是算法和数据结构。但这毕竟是一个入门课,所以,整个这部分的内容,我更多是侧重说说那些你可能比较陌生的,且有趣的思维与结构。希望通过这个过程,能够激起你对于算法数据结构的学习热情。时至今日,我相信你应该更能深刻地理解我在开篇词里说到的,“学编程,不等于学语言“这句话的含义。看一看我的参考答案,和你的思考结果之间,有什么不同吧。原创 2024-04-10 18:05:53 · 530 阅读 · 0 评论 -
25 | 动态规划(下):背包问题与动态规划算法优化
关于状态定义,我们首先来分析 0/1 背包问题中的。原创 2024-04-10 16:52:30 · 612 阅读 · 0 评论 -
24 | 动态规划(上):只需四步,搞定动态规划算法设计
同时,它们也分别代表了学会一个动态规划问题的四个方面。原创 2024-04-10 16:15:02 · 1210 阅读 · 0 评论 -
23 | 深入理解:容斥原理与递推算法
接下来,我将用前面的兔子繁殖问题为例,说明递推问题求解的前两个步骤。最后一步的程序设计与编写,将作为作业题,留给你来完成。原创 2024-04-10 15:47:32 · 766 阅读 · 0 评论 -
22 | 栈与单调栈:最大矩形面积
上节课我们讲了单调队列这种具有单调性的结构,并且说明了单调队列适合:维护中的区间最大值,并且我还提到单调队列只是一个铺垫,搞清楚了单调队列的内容,才能更好地学习新的数据结构。今天将带你学习一种队列和单调队列的兄弟数据结构,它的性质也很有趣,就是:栈与单调栈。学习这个数据结构的时候呢,我还是要再次强调一下那句话:数据结构,就是定义一种性质,并且维护这种性质。原创 2024-04-10 15:17:55 · 1017 阅读 · 0 评论 -
21 | 队列与单调队列:滑动区间最大值
上节课呢,我们学习了二分查找的基本思想,以及明确了二分答案所使用的问题模型,你会发现,正因为问题具有单调性,我们才可以使用二分查找算法对问题求解过程进行加速。今天呢,将带你学习一种性质有趣、简单且高效的数据结构,叫做:单调队列。学习这个数据结构的时候呢,我们还是要强调一下那句话:数据结构,就是定义一种性质,并且维护这种性质。原创 2024-04-10 15:01:24 · 950 阅读 · 0 评论 -
20 | 二分查找:提升程序的查找效率
上节我们讲了链表的基础结构,以及体会了一把链表结构在思维逻辑层面的作用,就是面对看似复杂的问题,当我们把它转换成链表结构思维去解决的时候,这些问题和困难都迎刃而解。今天呢,将带你学习一种简单、有趣且高效的算法,叫做二分查找。在学习二分查找之前呢,有一个关于二分查找的笑话,你必须知道。话说,在学校图书馆的计算机科学相关书籍借阅区里面,有一个女生抱着 40 本书往外走,经过图书馆安检机器的时候,安检机器发出了警报声。这时候,女生很无奈,就把书放到了地上,准备一本一本地去试,看看究竟是哪一本书没有消磁。原创 2024-04-10 14:29:25 · 713 阅读 · 0 评论 -
19 | 重新认识数据结构(下):有趣的“链表思维”
和。原创 2024-04-10 10:14:09 · 921 阅读 · 0 评论 -
18 | 重新认识数据结构(上):初识链表结构
你应该玩过拼装式的玩具吧,类似于高达机器人之类的。面对这样的玩具,我一般在拼装之前看看说明书,知道这个玩具包含哪几部分,然后对这些部分进行拼装,等把各部分拼好了后,再把它们组合起来,最终的成品就完成了。原创 2024-04-09 17:57:46 · 791 阅读 · 0 评论 -
做好闭环(三):编码能力训练篇的思考题答案都在这里啦!
不知不觉,我们已经学完了编码能力训练篇的全部内容。其实还有很多东西想给你讲,可限于篇幅,所以咱们整个编码能力训练篇中的内容,都是与接下来的算法数据结构篇有很大的联系,并且它们对于理解程序设计,也是非常基础且重要的内容。有道是,授之以鱼,不如授之以渔,我也相信只要你跟着课程学习,一定会感觉到自己收获到了“钓鱼工具”。如果能引发你的主动思考,进而触类旁通,举一反三,那这场学习过程就更加有意义啦。选择在今天这样一篇文章中,给你进行一一的解答。看一看我的参考答案,和你的思考结果之间,有什么不同吧。原创 2024-04-09 17:56:50 · 594 阅读 · 0 评论 -
17 | 数据结构(下):大整数实战,提升 Shift-And 算法能力
上节呢,我们讲了大整数表示法的相关知识,并且给你演示了大整数加法及乘法处理过程。其实,你是否掌握了大整数表示法是次要的,主要是你可以在这个过程中,认识到数据结构的作用,也就是强调的。原先,我们之所以无法做较大整数的运算,那是因为我们所掌握的数据类型,无法表示很大的数字,有了大整数表示法以后,我们就可以做特别特别大的整数表示了。之前也一直在说,算法是做数据计算的,它和数据结构是程序设计中非常重要的两部分。既然是两部分,说明。关于这点呢,你可以想想上节课我们学的大整数加法,它其实就是算法。为什么这么说呢。原创 2024-04-09 16:46:38 · 809 阅读 · 0 评论 -
16 | 数据结构(上):突破基本类型的限制,存储更大的整数
上两节呢,我们讲了素数筛这个算法,并且用素数筛算法演示了程序设计过程中的框架思维。其中提到了欧拉筛法,不知道勤奋的你有没有课后自己去学习一下呢?如果你学习了欧拉筛法以后,你会对我所说的框架思维有更深刻的体会。在之前的文章中,我们介绍过算法和数据结构的作用。当时我讲到,算法的作用是做数据的计算,并且它对于编程的重要意义,不止是停留在那些叫得上来名字的具体算法上面,而是我们称之的算法思维。算法思维的具体表现,就是我们处理得到相同信息时,所采用的不同的流程方法。原创 2024-04-09 15:01:42 · 835 阅读 · 0 评论 -
15 | 框架思维(下):用筛法求解其他积性函数
上一节,我们讲了素数筛这个算法,并且强调了,要按照框架思维去学习算法代码,因为当你学会这么做的时候,它就可以变成解决多个问题的利器了。本节将带你具体使用素数筛算法框架,去解决一些其他简单的数论问题。通过解决这几个具体问题的过程,我希望你能找到“框架思维”的感觉。原创 2024-04-09 14:21:57 · 635 阅读 · 0 评论 -
14 | 框架思维(上):将素数筛算法写成框架算法
所谓素数筛,是将其产出的信息存储在一个标记数组中,数组的第 i 位,标记的是 i 这个数字是否是合数的信息。如果 i 这个数字是合数,数组下标为 i 的位置就被标记成为 1,如果 i 不是合数,则数组下标为 i 的位置就是 0。素数筛就是通过一套算法流程,产生一个这样的数组。可以看到,素数筛的作用就是把所有合数标记出来,在知道了这个范围内所有的合数之后,也就很容易找出这个范围内所有的素数了。沿着这个思路,算法中要解决的第一个问题,就是如何标记合数?原创 2024-04-09 10:40:19 · 773 阅读 · 0 评论 -
13 | 程序设计原则:把计算过程交给计算机
上一节中,咱们说了数学思维对于编程的重要性,并且跟你介绍了一种最重要的程序设计思维:数学归纳法。这个思维,不仅可以帮助我们设计程序,而且还可以帮助我们理解及证明程序的正确性。不过说了这些数学对编程的重要性,可能你还觉得不过瘾,感觉只是停留在理论层面,还是有一层窗户纸没有捅破。今天呢,我就给你带来一道具体的编程问题,从这个具体的问题中,让你过把瘾。原创 2024-04-09 09:13:48 · 758 阅读 · 0 评论 -
12 | 数学归纳法:搞定循环与递归的钥匙
今天我们正式开始“编码能力训练篇”的学习。这里给你一个建议,在刚刚完成了语言基础篇的学习后,我希望你用心地体验“螺旋式上升”的学习过程。就是前面的基础篇虽然学完了,可并不是意味着,不需要再学习更多的语言相关的东西了,你可以做如下两件事情:1. 对于语言基础,你可以选择学习第二遍,当你站在第一遍的基础上,再回头看的时候,肯定会对之前的知识有更深的理解;2. 选择在其他参考资料中,继续学习语言中更多的知识点。原创 2024-04-08 17:47:37 · 686 阅读 · 0 评论 -
做好闭环(二):函数是压缩的数组,数组是展开的函数
不知不觉,我们已经学完了语言基础篇的全部内容。其实还有很多东西想给你讲,可限于篇幅,所以咱们整个语言基础篇中的内容,都是那些,我认为你自学容易忽视的,容易学错的知识点。有道是,授之以鱼,不如授之以渔,我也相信只要你跟着课程学习,一定会感觉到自己收获到了“渔具”。如果能引发你的主动思考,进而触类旁通,举一反三,那这场学习过程就更加有意义啦。对于文章中的思考题呢,由于要给你充足的思考时间,所以选择在今天这样一篇文章中,给你进行一一的解答。看一看我的参考答案,和你的思考结果之间,有什么不同吧。原创 2024-04-08 17:38:06 · 981 阅读 · 0 评论 -
11 | 预处理命令(下):必须掌握的“黑魔法”,让编译器帮你写代码
与。原创 2024-04-08 17:10:40 · 799 阅读 · 0 评论 -
10 | 预处理命令(上):必须掌握的“黑魔法”,让编译器帮你写代码
这次这个任务呢,我们将分成两节来讲解,这是因为,想要掌握程序设计中的这门“黑魔法”,真的急不来,咱得慢慢来。本次这个任务呢,和输出有关系:请你实现一个打印“漂亮日志格式”的方法。你可能想用 printf 直接打印,别着急,听我详细说完这个打印日志的功能介绍以后,你可能就知道什么叫做“魔法般的方法”了。首先我们先说“日志”的作用,程序中的“日志”,通常是指在程序运行过程中,输出的一些与程序当前状态或者数据相关的一些信息。原创 2024-04-08 14:20:32 · 936 阅读 · 0 评论 -
09 | 函数:自己动手实现低配版 scanf 函数
今天呢,我们的学习课程也将迎来里程碑式的一课。所谓里程碑,是因为在这一节之前,你写的程序,只是片段,只是思想的随意表达,而通过了本节的学习,你的程序结构将发生翻天覆地的变化,会变得规格严整,变得可以复用,变得易于找错。前面的课程,我们主要就是在一些基本的程序结构中做学习,包括顺序结构,分支结构以及循环结构。今天这一节中,我们将要认识的函数,可以将功能封装成可以复用的模块,就像创造乐高积木一样,废话不多说,开始今天的学习吧。原创 2024-04-08 11:32:32 · 1107 阅读 · 0 评论 -
08 | 指针系列(二):记住,指针变量也是变量
上节我们介绍了结构体相关的基础知识,也介绍了指针变量,并且教给你了最重要的一句话“指针变量也是变量”。这句话的意思在于告诉你,所有你对变量的理解,都可以放到指针变量上,例如:变量有类型,变量有大小,变量里面的值支持某些操作等等。今天呢,我们就来详细地聊一下指针变量。原创 2024-04-08 10:33:43 · 806 阅读 · 0 评论 -
07 | 指针系列(一):记住,指针变量也是变量
这次的任务,是需要我们结合两次学习(本节内容和下一节内容)才能完成,到底是什么呢?int x, y;} a[2];你会看到,如上代码中,其实就是输出 a[1].x 的地址值。到了这里,你可能对结构体还不熟悉,并且,你可能对于这个任务应该如何完成还是一头雾水,没关系,暂时忘了这个任务,我们先来讲讲可以解决任务的一些基础知识,再回来看这个任务。进行下面的学习之前,我还是要强调一下那句话,这句话是我们这两次学习的重点,也是帮助你学习指针的利器,叫做“指针变量也是变量。原创 2024-04-08 09:32:32 · 719 阅读 · 0 评论 -
做好闭环(一):不看答案可能就白学了
这一篇中,我们学习了数组的基本用法,学会了定义一组数据存储区的方法。并且,围绕着数组知识,完成了“计算数字二进制表示中 1 的个数”的递推程序的设计与实现。相关的课后思考题呢,也是希望你使用数组来完成相关任务,如果有好奇的朋友,可以到原文章看看《数组:一秒钟,定义 1000 个变量》。最后让我们来看看这篇文章的参考答案吧。思考题:去掉倍数i < n;i <= m;原创 2024-04-08 09:01:41 · 800 阅读 · 0 评论 -
06 | 字符串:彻底被你忽略的 printf 的高级用法
之前我们学习了基础数据类型,还有 scanf 函数和 printf 函数,这些知识都是单独的出现在我们之前的文章中的。今天呢,我将把它们组合在一起,给你展现一片新天地,你会掌握一种数据处理技巧,本质上是在上述几种数据类型之间做转换,从而使你对 scanf 函数和 printf 函数的理解更加深刻。今天呢,将介绍一种特殊的数组:字符数组,一种用来存储字符串信息的数组。来,跟我一起看看到底是怎么回事吧!原创 2024-04-07 20:35:46 · 801 阅读 · 0 评论 -
05 | 数组:一秒钟,定义 1000 个变量
通过前几节的学习,你已经了解了基本的程序结构。我们来简单总结一下,其中第一种结构就是顺序结构,它指的是我们所写的按照顺序执行的代码,执行完上一行,再执行下一行这种的。第二种就是分支结构,主要是用 if 条件分支语句来实现,主要特征是根据表达式的真假,选择性地执行后续代码。最后一种就是循环结构,用来重复执行某段代码的结构。如果把程序比喻成工厂的话,现在你的工厂中已经有了各种各样的流水线,但这个工厂只是能生产产品还不行,还需要有存储的空间。原创 2024-04-07 20:06:39 · 582 阅读 · 0 评论 -
04 | 随机函数:随机实验真的可以算 π 值嘛?
上次课里关于判断和循环的内容你做练习了么?其实这两部分内容都不复杂,你想,判断就是“如果…就…”,而循环就是重复做一件事情。程序里,只是我们换了一种方式来描述和抽象这两个场景。原创 2024-04-07 19:31:14 · 716 阅读 · 0 评论 -
03 | 判断与循环:给你的程序加上处理逻辑
不知道上一讲的内容,你自己做练习了么?你是否还觉得 C 语言枯燥无味呢?不管你有没有练习,我都还要啰嗦下,学习编程,就像是学骑自行车,你只看别人怎么骑,你只看自行车的原理,那永远也不可能学会骑自行车,对于你来说,唯一的捷径就是多练习,多思考。在上一讲小试牛刀之后,今天将带你领略一下算法和逻辑层面的小惊喜。原创 2024-04-07 18:44:12 · 865 阅读 · 0 评论 -
02 | 第一个程序:教你输出彩色的文字
从今天开始,将正式进入 C 语言的编程世界。我们总会听到这样一种说法:兴趣是最好的老师。引起你对编程的兴趣,就是今天这讲的目的。如果你之前对于 C 语言的认知还停留在黑白纯色阶段的话,今天就让我们一起来进入一个彩色的 C 语言世界,来,跟我一起给它点儿颜色!原创 2024-04-07 17:45:13 · 2044 阅读 · 0 评论 -
01 | 学习编程,我到底该选择哪门语言?
上图中的时间,只是一个参考,可能你比较有天赋,会比图中所标记时间用时短,可绝大多数的人,只会多于图上的时间,不会更少的。其实,编程语言设计者,更多的还是为了让人们使用自己的编程语言进行开发,所以语言设计本身都会有前辈语言的主流特征,这也就是为什么,只要你学习了一门主流语言后,会大大降低你学习第二门语言的成本。不同的人编写代码可能有不同的风格,就像 C 语言,10 个人可能就有 10 种风格,但 Python 的代码风格就像人的指纹,它是天生的,不管多少人用 Python 编写代码,可能也只有一种风格。原创 2024-04-07 17:13:50 · 1057 阅读 · 0 评论 -
开篇词 | 别闹了,学编程 ≠ 学语言
所以在专栏的设置上,除了有语言基础的讲解、部分算法及数据结构的讲解外,还在中间加入了一个特别的章节,叫作“编码能力训练篇”,这里其实就是帮你把分析具体问题的思路转换成代码的技巧,也就是实战写代码的能力。对于三者的学习顺序呢,则应该是反过来的:当你掌握了一定的语言基础以后,应该先从编程范式开始学起,然后是数据结构,最后是算法,整个过程采用传统的螺旋式上升的方式进行,这样才能获得最好的学习效果。站在你面前的我,已经全副武装,就等着你的加入了,我将带你去到这片编程森林中最有趣的地方,你不来一起看看么?原创 2024-04-07 16:59:06 · 804 阅读 · 0 评论