|
关于我们
新书资讯 新书推荐 |
CCF GESP直通车:C++二级三级精讲精练 本书针对GESP二级和三级的C++考试大纲量身定制。全书知识讲解深入浅出,例题丰富,还有一些延伸阅读,旨在增加趣味性和扩展知识面。全书分为六部分:第一部分为编程辅助工具,介绍计算机网络、流程图、数据类型转换、ASCII编码及数学函数;第二部分为数组与嵌套,介绍一维数组、多层分支、多层循环,以及它们在字母矩阵、数字三角形方面的应用;第三部分为递推与枚举,介绍递推、迭代和枚举的解题方法,并举例说明如何应用;第四部分为进制转换、数据编码和位运算,举例说明位运算在加密方面的应用;第五部分为字符串,分为C语言风格的字符串和C++风格的字符串;第六部分为集合、字典和其他,介绍集合、字典及算法的概念,同时也初步介绍函数的概念。本书的适读人群为自学编程的学生,以及从事中小学生编程教育的老师,特别适合准备参加GESP考试的学生。 1.全方位覆盖GESPC++二级三级大纲,从计算机基础到编程实战,一步到位。2.深入原理性探讨,拓展数学与编程的跨界知识。3.精选例题+历年真题+课后习题,及时巩固所学。4.一题多解,难易兼顾,满足不同学生的学习需求。5.6.附赠PPT课件与视频讲解,扫码即得,让学习更轻松。 前言 < PREFACE > 若希望深入了解本书的创作初衷和编写背景,建议先阅读本系列第一册《CCF GESP直通车:C++一级精讲精练》(本书后面简称《一级》)中的“致大朋友”部分(可扫描右侧二维码阅读)。 作为该系列的第二本,本书全方位涵盖CCF GESP认证考试C++语言科目的二级和三级考核大纲内容。 具体而言,二级内容包括第一部分“编程辅助工具”、第二部分“数组与嵌套”和第三部分“递推与枚举”,包含以下核心知识点: 计算机的存储与网络。 程序设计语言的特点。 流程图的概念与描述。 ASCII编码。 数据类型的转换。 常用数学函数。 max函数、min函数。 一维数组。 多层分支/循环结构。 递推、迭代和枚举。 代码效率。 三级内容包括本书第四部分“进制转换、数据编码和位运算”、第五部分“字符串”和第六部分“集合、字典和其他”,深入探讨如下内容: 数据编码(原码、反码、补码)。 进制转换(二进制、八进制、十进制、十六进制)。 位运算[与(&)、或(|)、非(~)、异或(^)、左移(<<)、右移(>>)]。 算法的概念与描述(自然语言描述、流程图描述、伪代码描述)。 一维数组基本应用。 字符串及其函数。 倒推算法。 集合、字典。 函数初探。 (1)效率专题的独立设计。 从二级阶段开始,本书在教学目标上进行了重要升级:在确保代码正确的基础上,新增专门章节系统性地讲解代码效率优化。涵盖时间复杂度分析基础、常见算法效率对比及实际编程中的优化技巧等内容,旨在帮助学习者建立性能优化意识,为后续进阶学习奠定基础。 (2)一维数组的分级设计。 虽然一维数组未被正式列入GESP二级考试大纲,但通过对历年真题的分析发现,数组相关知识点在二级考试中频繁出现。为此,本书在二级内容中科学融入了基础数组知识模块,帮助考生有效应对实际考试需求。在三级部分,则进一步深入讲解数组的高级应用技巧,包括用字符型数值定义数组长度、数组边界安全访问等进阶内容,以及一维数组在实际编程中的典型应用场景。 (3)超前知识点的合理引入。 在三级内容设计中,本书审慎引入部分超出大纲但实际考试中涉及的重要知识点。例如,倒推算法和函数基础虽未列入三级大纲,但真题中多次出现相关应用,且某些编程题使用函数编写代码能显著简化代码结构。再如,集合和字典同样在三级大纲中未曾提及,但其难度很适合三级学员,且使用这两个数据类型能大幅简化特定题型的解法,提升代码可读性和执行效率。 (4)模块化分段式编排。 本书采用模块化知识体系设计,将二级和三级知识点科学划分为6个循序渐进的学习单元。每个单元均包含核心知识模块和知识点总结。这种“学习—沉淀—内化”的螺旋式教学设计,旨在帮助学习者建立系统化的知识框架,掌握科学的学习节奏,实现知识的有效迁移,并培养学习者的自主总结能力。该结构设计参考了认知心理学中的“间隔学习效应”理论,通过合理的知识分段和复习节点设置,可提升20%~30%的学习 效率。 (1)注重思维过程的引导。 如《一级》教材所述,本书的特色之一在于完整呈现每道编程题的思考轨迹,这一特点在二、三级教材中体现得更为突出。随着题目的难度提升,更需要向学习者清晰地展示问题解决的思维路径。为了循序渐进地推导出最终答案,部分题目会呈现多个中间代码版本—这些版本可能存在逻辑缺陷,或是正确但效率欠佳。尽管这种呈现方式会增加教材篇幅,但正是这些真实的思考过程,能帮助学习者掌握编程思维的精髓,这也是本书最具教学价值的部分。 (2)系统化解题方法的归纳。 除思维引导外,本书还针对典型算法题型进行了系统的方法总结。重点梳理了递推(含正向递推与逆向递推)、迭代、枚举等核心算法的标准化解题流程,并在例题演示及习题解析中严格践行这些规范步骤。以逆向递推为例,其标准流程明确包含3个关键环节:首先确定数列构成要素,其次设定初始条件,最后建立普适的递推关系—其中递推关系的建立必须确保对所有数据具有一致性,这直接决定了循环结构的正确性。建议学习者牢固掌握这些标准化步骤,这样才能在实战中从容应对各类算法问题。 (3)拓展数学与编程的跨界知识。 本书的另一大特色在于引入了诸多趣味数学概念,如雷劈数、自守数、中空数、位增数、黑洞数(如495)及两头蛇数等。这些在常规数学课程中很少涉及的数学概念,不仅丰富了学习者的知识视野,更通过编程实践生动展现了数学之美。通过将抽象的数学概念转化为具体的编程实现,既增强了学习的趣味性,又直观地体现了编程解决实际问题的能力,从而有效激发学生的学习兴趣和探索欲望。 (4)创新性编程题库建设。 相较于《一级》,本书显著增加了原创编程习题的比重。特别值得一提的是,即使面对看似与编程无关的概念,笔者也精心设计了配套的编程实践题目。这些原创题目具有双重教学价值:其一,通过编程深化对抽象概念的理解,展现所学知识的实际应用场景;其二,有效提升学习者的算法实现能力。例如,在进制转换章节(见第四部分),笔者设计了完整的进制转换系列题目,涵盖十进制转二进制、八进制、十六进制乃至任意k进制的编程实现;在位运算部分,则创新性地开发了基于异或运算和移位运算的字符串加密算法题目,使抽象的理论知识转化为具有实用价值的编程实践。 (5)梯度化难度设计。 本书在习题编排上呈现出鲜明的“分层递进”特征,每章均设置3或4道编程题,形成由浅入深的难度梯度。特别值得注意的是,每章的最后一道题均经过精心设计,相当具有挑战性。这种编排基于以下教学考量:从二级课程开始,学习者的编程能力开始呈现差异化发展。笔者既需要确保基础薄弱的学生能够稳步提升,同时也必须为学有余力的学生提供充分的发展空间。这些具有挑战性的题目不仅能激发优秀学生的潜能,更能帮助他们为后续的编程竞赛打下坚实基础,实现个性化成长。 (6)深入原理性探讨。 本书的延伸阅读部分在延续“拓展知识视野”的基础上,更加注重对计算机科学本质问题的深度剖析。笔者精选了诸如数值越界、宏定义、补码机制、头文件等核心概念进行了本质性探讨。这些内容虽然需要学习者具备更强的抽象思维能力,但一旦领悟,往往能达到融会贯通的境界,并能显著提升解决问题的效率。以补码运算为例,传统的“原码→反码→加1”求解方式,代码实现烦琐(需处理复杂的连环进位问题),难以被初学者掌握。但若理解了补码的本质是“将原数加上232得到的一个正整数”(这里的原数是指32位负整数),即可将复杂的补码计算转化为简单的正整数二进制转换问题,实现代码的极致简化。这种对问题本质的把握,往往能带来编程思维质的飞跃。 本书具有广泛适用性,主要面向以下3类读者群体。 编程培训教师:可作为系统化教学用书,每章内容设计为两个标准课时(每课时60分钟)。 自学编程学员:支持个性化学习进度安排,可根据自身基础灵活调整学习节奏。 GESP等级考试备考者:本书的知识体系与训练题目专门针对考试要求设计。 教学内容采用分层设计结构,除概念讲解外,还有很多练习。练习分为如下4类。 【例题】:作为知识讲解的组成部分,建议以老师讲授或自主阅读方式学习,并不要求读者自己解答。 【真题解析】:与例题一样,以老师讲解或自主阅读方式学习,区别在于这些题目是以往考试的真题。 【课堂练习】:作为互动式练习的部分,建议学生先独立完成,再由教师讲评。对于自学的学生,也应先自主解题,然后参考答案。 【课后作业】:作为巩固加强的部分,学生应自主解答。 配套资源说明。 完整习题解析:所有课后作业均附详细解答,可自行下载。 数字化教学资源:配套教学PPT课件和知识点讲解视频。 获取方式:扫描图书封底二维码即可下载全部数字资源。 规范的代码编写要求 一份高质量的代码应当具备以下特征。 (1)完整性。 包含必要的头文件声明。 包含命名空间声明。 具有完整的main函数结构。 (2)规范性。 严格的代码缩进(建议4个空格)。 所有分支/循环结构的代码块必须另起一行。 单行仅包含一个赋值语句。 合理使用空行分隔逻辑块。 详尽的注释说明。 本书对代码的特殊处理 出于版面考虑,本书示例代码采用紧凑型排版。 左花括号统一放在行尾,包括main函数和所有语句块。 单行if/else语句如果比较简短,则直接跟在条件之后。 多条简单赋值语句可能放在同一行,以逗号分隔。 注释优先放在行末。 严格控制空行使用。 二级代码示例仅展示main函数体,三级代码示例包含完整头部信息。 重要说明 本书的紧凑写法仅为节省版面,实际编程时应严格遵守标准代码规范,保持代码良好的可读性。规范的代码风格是专业开发的基本要求,初学者应从一开始就养成良好的习惯。 一本书的问世离不开很多人的共同努力。在此,我怀着无比感恩的心情,向所有支持本书创作的人们致以最诚挚的谢意。 特别感谢中国计算机学会GESP组委会主席王延平教授、《软件简史》和《软件调试》作者暨格蠹科技创始人张银奎老师、Boolan首席咨询师及C++专家吴咏炜老师,感谢他们在百忙之中为本书撰写推荐语,他们的专业认可给予我莫大的鼓舞。 诚挚感谢清华大学出版社的王中英编辑,她不厌其烦地协助文字润色、图片编辑和版面设计,为本书的品质提供了坚实保障。感谢其团队的专业支持,使本书得以顺利出版。 衷心感谢国网湖南省岳阳公司高级工程师余捻宏老师,是他的启发和鼓励,让我萌生了将教学心得整理成书的想法。 感谢学生家长赵娟、朱博渊、阮小芬、黄婷婷、严翠红、罗文浩、商晶莹等,感谢你们对我编程培训工作的鼎力支持,感谢他们愿意与我分享孩子成长的喜悦和生活点滴。 深深感谢我的家人,感谢妻子陶娟女士的默默付出与后勤保障,感谢儿子的理解与陪伴,愿我们永远幸福安康。 本书真题解析均引自CCF历年GESP考试真题,部分图片素材来源于网络资源,在此一并致以谢忱。 由于时间所限,书中难免存在疏漏之处,恳请广大读者不吝指正。您的宝贵意见将是我不断完善的重要动力。 沈根成 2026年1月28日于上海学漄乐码学堂 沈根成,1995年毕业于复旦大学数学系,获得复旦大学优秀毕业生称号,后面试直升至东华大学攻读硕士学位。1998年硕士毕业后,在软件行业工作20余年,在多家跨国公司历任开发工程师、技术经理、部门经理等职位,精通C、C++、Java等编程语言。2024年初,尝试青少年编程培训工作,对中小学生的学习特点有充分的了解,对编程培训也有自己独特的见解。 目录 CONTENTS · 二级 · 第一部分 编程辅助工具 第1章 计算机网络与存储 / 4 1.1 计算机网络 / 4 1.1.1 资源共享 / 4 1.1.2 信息传递 / 5 1.1.3 拓扑结构 / 5 1.1.4 网络分类 / 7 1.1.5 互联网 / 7 1.1.6 因特网协议 / 8 1.2 计算机地址 / 8 1.2.1 IP地址 / 9 1.2.2 域名地址 / 10 1.3 数据的存储 / 11 1.3.1 RAM、ROM、Cache / 11 1.3.2 存储介质 / 12 1.3.3 存储单位 / 13 课后作业 / 13 延伸阅读:128位的二进制数到底有多少个 / 13 第2章 程序设计语言与流程图 / 15 2.1 程序设计语言 / 15 2.1.1 机器语言 / 16 2.1.2 汇编语言 / 16 2.1.3 高级语言 / 16 2.1.4 C++语言的特性 / 17 2.1.5 代码质量 / 17 2.2 流程图 / 18 2.2.1 顺序结构的流程图 / 19 2.2.2 分支结构的流程图 / 19 2.2.3 循环结构的流程图 / 20 课后作业 / 22 第3章 数据类型转换 / 24 3.1 为什么需要数据类型转换 / 24 3.2 强制类型转换 / 25 3.3 隐式类型转换 / 25 3.3.1 赋值时的隐式类型转换 / 25 3.3.2 表达式中的隐式类型转换 / 26 3.3.3 两种隐式类型转换同时发生 / 28 3.4 数值越界 / 28 3.5 除数为0 / 29 课后作业 / 30 延伸阅读:数值越界的本质 / 31 第4章 字符编码与ASCII编码系统 / 33 4.1 字符编码的概念 / 33 4.2 ASCII编码 / 33 4.2.1 ASCII编码的字符集 / 34 4.2.2 ASCII编码字符与数字的对应关系 / 34 4.2.3 ASCII编码表的规律 / 38 4.2.4 ASCII编码的应用 / 39 4.3 其他编码 / 41 4.3.1 定长编码 / 42 4.3.2 不定长编码 / 42 4.4 实现你自己的编码 / 43 课后作业 / 43 第5章 初级数学函数 / 45 5.1 科学记数法 / 45 5.2 数学库函数 / 46 5.2.1 绝对值函数 / 46 5.2.2 取整函数 / 46 5.2.3 幂函数 / 48 5.2.4 平方根函数 / 48 5.3 随机数 / 50 5.3.1 随机数函数 / 50 5.3.2 随机数种子函数 / 51 5.4 最值函数 / 52 课后作业 / 53 延伸阅读:“宏”的本质 / 54 第6章 代码的时间效率 / 55 6.1 时间效率 / 55 6.2 素数判断的几种解法比较 / 55 6.3 完全平方数判断的几种解法比较 / 57 课后作业 / 60 编程辅助工具总结 / 61 知识点总结 / 61 课后作业 / 65 第二部分 数组与嵌套 / 67 第7章 一维数组 / 68 7.1 什么叫数组 / 68 7.2 定义数组 / 68 7.3 数组的初始化 / 69 7.4 数组所占的空间 / 70 7.5 访问数组元素 / 70 7.5.1 为什么下标从0开始 / 71 7.5.2 可以直接对数组赋值吗 / 71 7.6 遍历数组 / 72 7.7 数组的应用 / 73 课后作业 / 74 第8章 多层分支 / 76 8.1 switch的妙用 / 76 8.2 多层分支的概念 / 78 8.3 给整数分类 / 79 8.4 数字重排 / 80 8.5 连环进位 / 82 课后作业 / 84 第9章 多层循环 / 86 9.1 雷劈数判断 / 86 9.2 自幂数判断 / 88 9.3 自守数判断 / 90 课后作业 / 92 第10章 字形矩阵 / 94 10.1 输出字母矩阵 / 94 10.2 输出字母三角形 / 97 10.3 输出数字等腰三角形 / 99 10.4 输出汉字图案 / 101 课后作业 / 102 数组与嵌套总结 / 105 知识点总结 / 105 课后作业 / 106 第三部分 递推与枚举 / 109 第11章 递推 / 110 11.1 什么叫递推 / 110 11.2 递推问题的解答方法 / 110 11.3 用递推法求解斐波那契数列 / 115 11.4 用递推法求阶乘 / 118 11.5 递推法和数组法的区别 / 119 课后作业 / 120 延伸阅读:斐波那契数列和黄金分割率的关系 / 121 第12章 递推应用 / 123 12.1 爬楼梯问题 / 123 12.2 整数构建 / 124 12.3 回文数判断 / 127 12.4 位增数判断 / 128 课后作业 / 129 第13章 迭代 / 131 13.1 迭代问题的解答方法 / 131 13.2 黑洞数495 / 131 13.3 角谷猜想 / 133 13.4 求平方根 / 134 课后作业 / 135 第14章 枚举 / 136 14.1 用枚举解题的方法 / 136 14.2 韩信点兵 / 136 14.3 完全平方数 / 138 14.4 百鸡问题 / 139 课后作业 / 142 递推与枚举总结 / 144 知识点总结 / 144 课后作业 / 146 二级综合练习 / 149 · 三级 · 第四部分 进制转换、数据编码和位运算 / 161 第15章 N进制数与十进制数的转换 / 162 15.1 二进制数转十进制数 / 162 15.1.1 整数部分 / 162 15.1.2 小数部分 / 163 15.2 八进制数转十进制数 / 164 15.3 十六进制数转十进制数 / 164 15.4 十进制数转二进制数 / 165 15.4.1 整数部分 / 165 15.4.2 小数部分 / 165 15.5 浮点数的不精确性 / 166 15.6 十进制数转八进制数和十六进制数 / 167 15.7 任意进制数与十进制数的互转 / 167 课后作业 / 167 第16章 N进制数之间互转 / 169 16.1 十六进制数转二进制数 / 169 16.2 二进制数转十六进制数 / 169 16.3 八进制与二进制互转 / 170 16.4 八进制与十六进制互转 / 170 16.5 不同进制的数的比较 / 170 16.6 用代码进行进制转换 / 171 16.7 用进制控制符进行进制转换 / 175 课后作业 / 175 第17章 数据编码 / 177 17.1 数据编码的概念 / 177 17.2 原码 / 177 17.3 反码 / 179 17.4 补码 / 179 17.4.1 从十进制数求补码的步骤 / 180 17.4.2 从补码求十进制数的步骤 / 181 17.4.3 二进制常数 / 181 17.5 机器数 / 182 17.6 无符号数 / 182 17.6.1 无符号数的取值范围 / 182 17.6.2 无符号数的二进制表示 / 182 17.6.3 无符号数与有符号数的转换 / 183 课后作业 / 184 延伸阅读:补码的本质 / 184 第18章 位运算 / 187 18.1 位运算的概念 / 187 18.2 4个“定位”运算符 / 187 18.2.1 “按位与”运算& / 187 18.2.2 “按位或”运算| / 188 18.2.3 “异或”运算^ / 189 18.2.4 “按位非”运算~ / 189 18.2.5 复合形式 / 190 18.3 4个“定位”运算符的特性 / 190 18.3.1 数值的特性 / 190 18.3.2 交换性和结合性 / 191 18.3.3 优先级 / 192 18.4 位运算的应用 / 192 18.4.1 “按位与”运算的应用 / 192 18.4.2 “异或”运算的应用 / 194 18.4.3 “按位非”运算的应用 / 194 课后作业 / 196 第19章 移位运算 / 199 19.1 左移运算<< / 199 19.2 右移运算>> / 200 19.3 复合形式 / 201 19.4 移位运算符的优先级 / 201 19.5 利用位运算实现数据加密 / 203 19.5.1 使用“异或”运算加密 / 203 19.5.2 使用移位运算加密 / 205 课后作业 / 207 进制转换、数据编码和位运算总结 / 209 知识点总结 / 209 课后作业 / 213 第五部分 字符串 / 215 第20章 再谈一维数组 / 216 20.1 数组的长度 / 216 20.2 数组的初始化 / 216 20.3 数组越界访问 / 217 20.4 动态获取数组的长度 / 220 20.5 求数组元素的最值 / 220 20.6 数组应用 / 221 20.6.1 平衡序列 / 221 20.6.2 小格的储蓄 / 223 课后作业 / 224 延伸阅读:怎么求复合条件相反的条件 / 226 第21章 C语言风格的字符串 / 227 21.1 C语言风格的字符串的表示 / 227 21.2 C 语言风格的字符串的长度 / 228 21.3 C语言风格的字符串的输入 / 230 21.4 C语言风格的字符串函数 / 231 21.4.1 字符串比较函数 / 232 21.4.2 字符串复制函数 / 233 21.4.3 字符串转整数 / 233 21.4.4 大小写转换函数 / 234 课后作业 / 234 第22章 C++风格的字符串 / 236 22.1 定义C++风格的字符串 / 236 22.2 C++风格的字符串的输入 / 236 22.3 string的函数 / 237 22.3.1 长度函数 / 237 22.3.2 字符串比较 / 237 22.3.3 字符串复制 / 238 22.3.4 字符串拼接 / 238 22.3.5 字符串查找 / 238 22.3.6 字符串替换 / 239 22.3.7 字符串插入 / 239 22.3.8 取子字符串 / 239 22.3.9 用下标访问字符 / 240 22.4 两种字符串混合使用 / 241 课后作业 / 242 延伸阅读:面向对象的编程语言的特性 / 244 第23章 字符串应用 / 245 23.1 字母求和 / 245 23.2 字符串转整数 / 246 23.3 进制判断 / 247 23.4 打印数字 / 249 23.5 回文拼接 / 251 23.6 拆分字符串 / 253 课后作业 / 256 字符串总结 / 258 知识点总结 / 258 课后作业 / 259 第六部分 集合、字典和其他 / 263 第24章 集合 / 264 24.1 什么是集合 / 264 24.2 定义set变量 / 266 24.3 使用set / 266 24.3.1 插入元素 / 266 24.3.2 求元素的个数 / 267 24.3.3 其他函数 / 267 24.3.4 遍历 set / 269 课后作业 / 269 第25章 字典 / 272 25.1 什么是字典 / 272 25.2 定义map变量 / 273 25.3 使用map / 274 25.3.1 添加键值对 / 274 25.3.2 读取键值 / 274 25.3.3 判断键是否存在 / 275 25.3.4 其他函数 / 276 25.3.5 遍历 map / 278 课后作业 / 279 第26章 倒推 / 282 26.1 倒推问题的解答方法 / 282 26.2 猴子摘桃子 / 283 26.3 小猫分鱼 / 284 26.4 小格存钱 / 287 课后作业 / 288 第27章 算法 / 290 27.1 算法的概念和特征 / 290 27.2 算法的描述 / 291 27.3 算法的优劣 / 292 27.3.1 空间复杂度 / 292 27.3.2 时间复杂度 / 293 27.4 入门算法 / 294 27.4.1 枚举法 / 294 27.4.2 模拟法 / 294 27.5 基础算法之递推法 / 295 27.6 解答编程题的流程 / 295 课后作业 / 299 第28章 函数初探 / 300 28.1 函数的概念 / 300 28.1.1 函数的组成部分 / 300 28.1.2 函数的调用 / 301 28.1.3 参数传递 / 302 28.2 定义自己的函数 / 302 28.2.1 闰年判断 / 303 28.2.2 求三角形的面积 / 304 28.3 实际应用 / 304 28.3.1 单位转换 / 304 28.3.2 密码合规检测 / 307 课后作业 / 309 延伸阅读:头文件的本质 / 310 集合、字典和其他总结 / 312 知识点总结 / 312 课后作业 / 314 三级综合练习 / 317
你还可能感兴趣
我要评论
|

新书资讯





