图书前言

致大朋友 

随着科技的日益发达和计算机的普及,编程已经成为一项必备的技能。教育部也已经发出了通知,要求把信息技术课程从兴趣课变为必修课,并大幅度提升了学生在编程、算法方面的思维要求。可以说,编程教育已经得到国家层面和很多有识之士的重视,并且编程学习日趋低龄化。 

与此同时,中国计算机学会发起并主办的 GESP,即编程能力等级认证(Grade Examination of Software Programming),为青少年计算机和编程学习者提供了一个学业能力验证的平台。GESP 覆盖中小学全学段,符合条件的青少年均可参加认证。GESP 旨在提升青少年的计算机和编程教育水平,推广和普及青少年计算机和编程教育。 

获得 GESP 证书,不仅可以体现学生的编程水平,而且可以受到各省市重点中学的欢迎,比如现在很多重点中学都把获得 GESP 作为招生条件之一。很多中小学生也趁此机会,早早地投入到了编程学习中,各种编程培训机构也如雨后春笋般涌现出来,推出各种形式的编程培训课程,笔者也是在这个大潮流中投身到了中小学生编程教育之中。 

在对中小学生进行编程培训的过程中,笔者发现,目前市面上虽然有很多 C++ 书籍,但是跟 GESP 完全匹配的几乎没有。GESP 的考试内容覆盖面很广,从计算机发展历史到计算机组成、计算机工作原理、计算机网络,从编程到算法、流程图、数据编码,甚至还涉及GESP本身的一些考试规则等,可以说包罗万象、一应俱全,但另一方面又都不是很深。

而目前市面上的 C++ 书籍,不仅没有涵盖那么多编程语言之外的东西,而且没有跟 GESP的 8 个等级适配,有些书一本就覆盖了 GESP 一级到五级甚至六级的内容。因而,笔者深刻感受到需要一套与 GESP 完全适配的书籍的重要性。 

另外,在培训期间,笔者也意识到,针对成年人的教课方式不能照搬到中小学生身上。因为很多知识点是存在依赖关系的,一般成年人的教课方式都是遵循点—线—面的方式并且按照逻辑顺序来的,先讲述各个概念,再讲解它们能干什么,然后讲解在实际生活中的应用。比如,对于数据类型、变量、算术运算,按照逻辑顺序应该先讲解数据类型,然后讲解变量,再讲解算术运算,因为要讲解算术运算,就离不开变量,因为程序中的算术运算都是对变量的运算;而要讲解变量又离不开数据类型,因为变量声明时必须指定数据类型。 

在笔者的第一期课程中,就采取了这种方式。但是发现小朋友们听得云里雾里。数据类型对大家来说是个全新的概念,整型和长整型到底有啥区别,单精度和双精度又有什么不同?你跟他们讲所占的空间不同,存储方式不同,大家也是似懂非懂。然后再讲变量,变量到底是个什么概念,为什么变量要有数据类型?中小学生由于知识和思维的局限,对这些概念很难掌握。加上有些孩子同时在学习 Scratch 和 Python,不同的语言定义的数据类型并不一样,很多概念堆在一起就会打架。 

为此,在第二期课程中,笔者放弃了这种传统的点—线—面的方式,先不讲数据类型和变量,一上来就先讲算术运算,需要定义变量的地方就先让大家照抄。因为编程的核心价值是算法,而算法的基础是运算,NOI 最终考查的也是算法,所以运算才是重点,数据类型和变量都是辅助性质的东西。等到基本的运算讲完以后,再慢慢引入数据类型和变量的概念,大家就容易理解多了。 

还有一个例子是关于布尔类型、逻辑表达式以及分支语句。分支语句需要使用逻辑表达式,而逻辑表达式的值是布尔类型的,所以要严格按照顺序来讲,则必须先讲布尔类型,然后讲逻辑表达式,再讲分支语句。但是布尔类型太抽象了,如果逻辑表达式不结合具体例子,那么也讲不明白。所以在讲解时,笔者先讲分支语句,即先讲应用,再讲逻辑表达式,最后讲布尔类型。 

还有很多其他的例子,这里不一一列举。笔者想说的是,为了让这些内容便于中小学生理解,笔者花了大量的心思,有时候一节一小时的课程,准备讲义要花好几天,要反复修改好几次。但是,当发现这样的讲解小朋友们更容易听得懂时,感觉一切付出都是值得的。 

中小学生是祖国的未来和希望,培养中小学生是整个社会的责任。笔者觉得,自己在中小学生编程培训方面的经验和体会不应该自己独有,应该分享给全天下从事中小学生编程培训的老师。于是,笔者把所有的讲义整理成文字,每级一本或每两级一本,形成一个系列,希望能给大家带来帮助。 

基于此,这个系列最大的特点是与 GESP 完全适配,这也是与其他 C++ 书籍最大的区别。这个系列严格按照 GESP 的 8 个等级以及历年的考试真题来安排内容,这句话有两个含义。第一,内容的广度跟 GESP 大纲匹配,比如一级里讲到了计算机历史、计算机组成部分,二级里会讲到网络基础和流程图等。第二,它讲解的深度跟 GESP 大纲匹配,同时又稍许超前一点点。这是因为,GESP 的考试经常会有一些“超纲”的题目,比如说数组,在大纲里是属于三级的,但在二级的考题里也有一些数组的影子,这就使得本书中的有些主题要在不同的级别里讲解两次,第一次比较浅,第二次比较深。 

本书涵盖的内容 

本书是这个系列中的第一本,涵盖 GESP C++ 一级的大纲,包括: 

? 计算机基础与编程环境。 

? 计算机历史。 

? 变量的定义与使用。 

? 基本数据类型(整型、浮点型、字符型、布尔型)。 

? 控制语句结构(顺序、循环、选择)。 

? 基本运算(算术运算、关系运算、逻辑运算)。 

? 输入输出语句。 

本书分成 4 部分。第一部分编程基础,内容包括 GESP 介绍、二进制基础、计算机硬件和发展历史、程序的概念和编程的流程等;第二部分算术运算,讲解数据类型、变量的定义与使用、各种算术运算、输入输出语句、位数拆分、时间转换等;第三部分分支结构,介绍 if-else 语句、switch 语句、逻辑运算符、数据类型转换,以及它们在奇偶数判断、k幸运数判断、回文数判断、水仙花数判断、闰年判断、优等生判断、特长生判断、凯撒加密、公约数、公倍数等方面的应用;第四部分循环语句,讲解 for 循环、while 循环、do-while循环,以及它们在素数判断、完全平方数判断、数列求和、幂运算、阶乘运算等方面的应用。本书的特点 

(1)与 GESP 一级的考试大纲完全适配,前面介绍过这是本系列最大的特点。 

(2)文风轻松、接地气,深入“为什么”的层面。本书对各种概念和语法娓娓道来,就像和人聊天的感觉。不像有些书籍只是把概念往那儿一放,本书仔细地讲解了为什么需要引入这些概念,比如为什么要有数据类型,为什么需要定义变量,为什么需要输出语句,为什么需要布尔数据类型,等等,确保大家不但知其然,而且知其所以然。 

(3)数学知识先解释。在讲解各种应用的时候,自然离不开一些数学知识,比如什么叫素数,什么叫完全平方数,什么叫平方根。为了兼顾不同年龄段的学生,本书对所有的数学知识都先解释一遍,并反复举例。 

(4)实战演练。在讲解各种语法知识时,会通过大量的例题和练习来帮助消化,其中很多都是 GESP 真题,几乎涵盖了 GESP 自推出以来所有的考题。 

(5)一题多解。本书对同一个问题有时会给出多种解法,并对有些解法进行非常详细的解释,比较它们的优劣,这些解释可能会用到一些大家还没有学到的概念,读者可以根据自己的实际情况选择阅读或跳过。比如素数的判断,给出了 3 份代码,前两份效率差,但易于理解,第三份效率高,但用到了平方根的概念,低年级的小朋友理解起来就有点困难,这时就可以跳过第三份代码。 

(6)难易兼存。每章后面都有很多作业,这些作业有难有易,这样各个年龄段的孩子都能各取所需,避免有些孩子望而生畏,而另一些孩子又觉得过于简单。本书中的编程题,题面描述一般都很简单,这一方面是为了节约版面,另一方面也是为了让大部分孩子都能理解。但 GESP 的考题(包括其他信息学的竞赛)题面描述都很长,非常考验大家的阅读理解能力。为了尽量让准备参加 GESP 考试的孩子适应 GESP 的考试模式,本书中的部分题目也采用了场景式的题目描述,即先构造一个应用场景,再延伸出一道题目,让题目看起来很“复杂”。 

(7)例题的连贯性。随着知识点的深入,例题会越来越难,但大部分书中的例题是互不相关的。笔者觉得,虽然知识点越来越难,但它们是连贯的,那么例题是不是也可以连贯起来呢?在笔者的精心构思下,创造出了一个连贯的主题“重点中学的招生政策”。这个政策开始为“优等生策略”,即各门功课都很优秀,解题时使用逻辑运算符与(&&);然后推出“特长生策略”,即只要有一门特别优秀就行,解题时使用逻辑运算符或(||);然后推出“组合招生政策”,即优等生和特长生二选一,解题时需要同时使用逻辑运算符与和或;接着又推出“招生政策 2.0”,加入新的课程,条件更加复杂,避免了“跛脚”(即有一门课特别差)的现象,代码中需要用到各种逻辑运算符以及隐式类型转换;最后又推出“招生政策 3.0”,不是看一次成绩,而是看几次的平均成绩,这时就需要在原来的基础上添加循环。就这样,通过一个招生的主题,把所学到的知识全部连贯在了一起。 

本书的适用人群 

本书是为 GESP 量身定制的,因而特别适合准备参加 GESP 等级考试的学生,以及从事 GESP 编程培训的老师。同时由于本书结构上的安排,对于那些不以考试或竞赛为目的的学生来说,也是一个很好的选择。对于编程老师,每章基本上对应两课时(按 1 小时 1 课时计算),对于自学编程的学生,则可根据自己的实际情况动态调整进度。 

除课后作业外,书中有很多例题和练习,分成 3 类: 

【例题】:这类题目是正文内容的一部分,以老师讲解或者自己看书为主,并不要求大家自己解答。 

【真题解析】:这类题目跟例题一样,以老师讲解为主,区别在于这些题目是以往考试的真题。 

【课堂练习】:这类题目是给学生练习的,学生先自己做,然后老师再讲解答案。对于自学的学生,也应该先自己尝试解答,然后再看答案。 

所有的课后作业都附带了答案,在本书的最后。 

本书另外附带 PPT 课件和视频讲解,供大家参考,扫描封底的“本书资源”二维码即 

可获得这些资源。 

致谢 

特别感谢中国计算机学会 GESP 组委会主席王延平教授、《软件简史》和《软件调试》作者暨格蠹科技创始人张银奎老师、Boolan 首席咨询师及 C++ 专家吴咏炜老师,感谢你们在百忙之中为本书撰写推荐语,你们的专业认可给予我莫大的鼓舞。 

诚挚感谢清华大学出版社编校团队,感谢你们的专业支持,使本书得以顺利出版;特别感谢王中英编辑,您不厌其烦地协助文字润色、图片编辑和版面设计,为本书的品质提供了坚实保障。 

衷心感谢国网湖南省岳阳公司高级工程师余捻宏老师,是您的启发和鼓励,让我萌生了将教学心得整理成书的想法。感谢学生家长赵娟、朱博渊、阮小芬、黄婷婷、严翠红、罗文浩、商晶莹等,感谢你们对我编程培训工作的鼎力支持,感谢你们愿意与我分享孩子成长的喜悦和生活点滴。 

还要感谢我的妻子陶娟女士和我的儿子,感谢他们在生活中的陪伴,感谢妻子为我做默默无声的后勤工作,才让本书能够尽早跟大家见面。祝愿我们永远幸福、健康、快乐。 

书中引用的真题解析,都来自 CCF 历年的 GESP 试卷,书中部分图片来自网络,在此一并表示感谢! 

最后,由于时间仓促,书中难免有错误疏漏之处,还请读者批评指正。 

沈根成 

2025 年 4 月 18 日于上海联航路盛格塾

致小朋友 

小朋友们,大家好!你听说过编程吗?编程就是在电脑上编写代码来解决实际问题,比如算一算你今年一共收了多少压岁钱,或者你这次考试,各门功课加起来一共考了多少分,或者如果你很厉害,还可以编一个小游戏。想一想吧,你不再需要拿出纸和笔,把数据记录下来,列个竖式来计算。你只要打开电脑,运行你编写的程序,把数据输入进去,它就能帮你计算出结果。而且你只要编写一次,以后可以反复使用。这是多么神奇和有趣的事情啊! 

实际上,上面所列举的只是两个很简单的例子。编程的应用非常广泛,如今我们的生活早就离不开程序了。我们跟别人聊天沟通使用的微信是一个程序,我们在网上购物时进入的淘宝网站是一种程序,我们写文章使用的 Word、做讲义使用的 PPT 都是程序,甚至在我们的各种家电设备中,都有小程序存在。另外,我们如果想要让电脑模拟人类来思考,更是离不开程序。 

编程不光神奇和有趣,学习编程还有很多好处。编程可以让大家养成严谨的习惯,编写代码时,要求大家严格按照代码规范来书写,不可以有半点马虎。编程能提高大家的抽象思维和想象的能力,编程时我们往往要在脑海里构思一幅图画,想清楚代码的结构,使用什么算法等。编程也能提高大家的总结能力和举一反三的能力,通过分析不同题目的代码,找出其中的规律,可以总结出一个结论,进而就能解决类似的问题。编程还能提高大家的创新能力,通过对同一道题目采用不同的解法,打开我们的思路,让我们的大脑变得更加灵活。 

此外,编程对小朋友们的升学也有实实在在的好处。通过学习编程,去参加编程能力等级认证(即 GESP)考试,获得 GESP 证书,就可以轻松进入你喜欢的重点中学。如果沿着这条路走下去,后续参加全国青少年信息学奥林匹克竞赛(NOI)并获奖,那么像北大、清华这样的高等名校就会向你抛来橄榄枝。 

编程有好几种语言可以选择,到底应该选择哪种语言呢?其实这并没有绝对的答案,GESP 一~四级的认证可以选择 3 种语言:Scratch、Python、C++。Scratch 有点类似搭积木,在游戏中学习编程,适合低年级的小朋友。但是 GESP 五~八级就没有 Scratch 了,只剩Python 和 C++,其中 Python 简单易学,初学者容易上手。但是到了 NOI 竞赛,又只能选择 C++ 了。所以综合考虑下来,笔者觉得不如一开始就学习 C++。 

那么,如何才能学好 C++ 编程呢?一本好的教材是必要的。虽然目前市面上有不少关于少儿编程的书籍,但是完全跟 GESP 考试大纲吻合的还没有。本书是完全按照 GESP考试大纲编排的教程,涵盖了 GESP 一级 C++ 的所有内容。本书在讲解各个概念时,尽量使用小朋友们能够看得懂的语言,并且列举了大量的例子。本书有大量的真题解析,这些真题全部来自 GESP 的试卷。本书也配有很多课后作业,这些作业难度有深有浅,大家可以根据自己的实际情况来选择。如果小朋友们想自学的,本书也附带视频讲解,只需扫描封底的二维码就可以找到视频链接。 

本书还有一个特点,就是大部分章节的最后都会有延伸阅读,这些延伸阅读的内容大多是一些有趣的小故事,可以帮助大家理解本章学习的内容,同时拓宽大家的视野。比如在讲解闰年判断的时候,延伸阅读部分就讲解了闰年的形成原因;在讲解水仙花数判断的时候,延伸阅读部分就介绍了自幂数的知识。 

最后,希望小朋友们喜欢这本书,希望每个小朋友都能成为编程高手! 

沈根成 

2025 年 4 月 18 日于上海联航路盛格塾