本书是一本专门为中小学生编写的C++编程及算法入门教材。本书由浅入深地讲解了C++语言基础知识,以及编程解题常用的方法和基础算法。每章都是由一个小故事来引出编程思维。书中的案例和练习均由作者精心设计,并与生活和学习紧密结合。本书也介绍了各种有趣的计算机知识,并涵盖了全国青少年软件编程等级考试(C语言)一级和二级考试的知识点。本书配备了完善的题库、课件、教学视频等资源,可以作为中小学编程社团的教材,也可以作为少儿编程培训机构的培训教材,还可以作为GESP等级考试和各类编程竞赛的入门教材。
王桂平 等【编著】【中国】【现当代】
————————————————————
王桂平,重庆交通大学计算机科学与技术专业副教授/硕导,本、硕、博均毕业于重庆大学,曾先后担任重庆交通大学计算机系、大数据与AI系的副系主任。2003年在浙江财经大学开始从事大学生程序设计竞赛指导工作,是国内最早从事大学生程序设计竞赛指导的一批教练。
带队参加过浙江省、重庆市、四川省、广东省大学生程序设计大赛、中国大学生程序设计大赛、国际大学生程序设计大赛、中国高校计算机大赛-团体程序设计天梯赛、蓝桥杯大赛等各类程序与算法设计类大赛,指导的学生获得国家级奖项80余项,省级奖项600余项。连续7年获得蓝桥杯大赛优秀指导教师。出版了《图论算法理论、实现及应用》《程序设计方法及算法导引》《程序设计方法及在线实践指导》等6本著作;主持省部级教学研究项目5项(含重大项目1项),主持重庆市一流课程一门、重庆交通大学校级一流课程一门;以第一作者发表教学研究论文近20篇。以第一作者发表科学研究论文30余篇,其中SCI论文9篇,EI论文11篇,主持省部级科研项目3项,主研国家级科研项目3项(均排名第2)。
蓝桥杯大赛特邀专家,录制了多届省赛和全国总决赛真题讲解视频,开设了多期直播课,并在蓝桥云课平台上开设《离散数学及其应用》《图论算法理论、实现及应用》《程序设计方法及算法导引》等在线课程。多所中小学信息学奥赛(NOI)兼职教练。
针对少儿编程、信息学奥赛,自主研发了完善的课程体系,编写了“Python少儿编程(算法入门篇)”“小学生C++编程及算法入门”“信息学奥赛入门到进阶(初级篇)”“信息学奥赛入门到进阶(中级篇)”,在多次试用中获得了大量的学生好评。
目 录
第1章 什么是程序?
1.1 从生活中的场景说起
1.2 编写程序的工具
1.3 程序的编写、编译和运行
1.4 在线评测系统
1.5 案例1:Hello world!
1.6 案例2:时间换算(1)
1.7 案例3:输出杨辉三角(1)
1.8 练习1:用cout语句输出星号菱形
1.9 练习2:小学比幼儿园远多少米
1.10 练习3:输出数字螺旋矩阵(1)
1.11 拓展阅读:C++关键字
1.12 计算机小知识:Hello world程序
1.13 总结
第2章 变量是一个魔法盒
2.1 记录身高和体重
2.2 用字母代表人、物或数据
2.3 常量和变量
2.4 数据类型
2.5 案例1:求矩形的面积和周长(1)
2.6 案例2:超市购物
2.7 案例3:变量是一个魔法盒
2.8 练习1:长身高
2.9 练习2:剩余座位
2.10 练习3:需要多少块砖
2.11 拓展阅读:基本的数据类型
2.12 计算机小知识:“缺斤少两”的U盘
2.13 总结
第3章 数据从何而来——输入
3.1 更强大的程序
3.2 案例1:求女生的人数
3.3 案例2:时间换算(2)
3.4 案例3:交换两个变量的值(1)
3.5 练习1:交换两个变量的值(2)
3.6 练习2:求矩形的面积和周长(2)
3.7 练习3:速度单位换算(1)
3.8 拓展阅读:在线评测系统的工作原理
3.9 计算机小知识:人和计算机是怎么交互的
3.10 总结
第4章 让计算机帮我们做算术题
4.1 从买酸奶说起
4.2 运算、运算符和表达式
4.3 算术运算符和算术表达式
4.4 商和余数
4.5 除以10、对10取余
4.6 案例1:时间换算(3)
4.7 案例2:赋值运算符练习
4.8 案例3:报数游戏
4.9 练习1:小实验——前置++和后置++
4.10 练习2:数字魔术——三位数还原
4.11 练习3:三位数的数字之和
4.12 拓展阅读:运算符的优先级和结合性
4.13 计算机小知识:C、C++名称的由来
4.14 总结
第5章 精确到小数的运算
5.1 从“打折”说起
5.2 圆的周长及圆周率
5.3 案例1:速度单位换算(2)
5.4 案例2:折扣
5.5 案例3:求长方体的表面积和体积
5.6 练习1:分数→无限循环小数
5.7 练习2:求正方形和圆的面积(1)
5.8 练习3:计算球的表面积和体积
5.9 拓展阅读:自动类型转换和强制类型转换
5.10 计算机小知识:实数与浮点数
5.11 总结
第6章 拿来主义——数学函数的使用
6.1 从工具箱玩具说起
6.2 平方和平方根、立方和立方根
6.3 案例1:勾股定理(1)
6.4 案例2:2的n次方
6.5 案例3:立方体边长和球体直径
6.6 练习1:求正方形和圆的面积(2)
6.7 练习2:浮点数不能精确表示
6.8 练习3:浮点数的整数商和余数
6.9 计算机小知识:复制粘贴是由谁提出来的?
6.10 总结
第7章 一路前行——顺序结构
7.1 从“把大象放进冰箱”说起
7.2 算法就是求解问题的步骤
7.3 程序控制结构
7.4 案例1:三角形的面积
7.5 案例2:鸡兔同笼问题(1)
7.6 案例3:获奖比例
7.7 练习1:预测孩子的身高
7.8 练习2:华氏温度转摄氏温度
7.9 练习3:比赛成绩
7.10 计算机小知识:三种基本的程序控制结构
7.11 总结
第8章 分支结构——if语句
8.1 抱一和妈妈谈“条件”
8.2 条件判断和分支结构
8.3 C++语言中的分支结构
8.4 案例1:加分
8.5 案例2:求三个数的最大值
8.6 案例3:四边形的判断(方法1)
8.7 练习1:3的倍数(方法1,取余运算符)
8.8 练习2:找座位
8.9 练习3:要不要开空调
8.10 总结
第9章 条件怎么形成——关系表达式和逻辑表达式
9.1 又高又壮的同学
9.2 判断和多个判断
9.3 逻辑“与”和逻辑“或”的例子
9.4 布尔型数据
9.5 案例1:语文和数学都考95分以上
9.6 案例2:三角形的判断
9.7 案例3:闰年的判断
9.8 练习1:复杂的逻辑判断
9.9 练习2:四边形的判断(方法2)
9.10 练习3:身高达标吗
9.11 计算机小知识:Bug和Debug
9.12 总结
第10章 多分支与switch语句
10.1 又见“打折”
10.2 案例1:商场打折
10.3 案例2:CCF CSP-J/S比赛成绩
10.4 switch语句
10.5 案例3:VIP顾客等级
10.6 练习1:百分制成绩转五级制成绩
10.7 练习2:9岁男孩的身高标准
10.8 练习3:巧虎机器人(初级版)
10.9 计算机小知识:C++的版本
10.10 总结
第11章 知道要反复执行多少次——for循环
11.1 循环就是重复
11.2 循环结构
11.3 数列及相关问题
11.4 在程序中实现数学上的递推
11.5 案例1:输出广播体操的口令
11.6 案例2:求1+2+3+…+n(1)
11.7 案例3:求阶乘
11.8 练习1:求n个数的和
11.9 练习2:求1~n范围内3的倍数的和
11.10 练习3:求数列前n项和
11.11 计算机小知识:计算机的运算速度有多快
11.12 总结
第12章 依条件而循环——while循环和do-while循环
12.1 给足球打气的两种方式
12.2 while循环和do-while循环
12.3 永真循环、死循环
12.4 案例1:求1+2+3+…+n(2)
12.5 案例2:前n项和超过m
12.6 案例3:输出整数的每一位数
12.7 练习1:数列1, 1, 2, 1, 2, 3, 1, 2, 3, 4,…的第n项
12.8 练习2:3的倍数(方法2,求各位和)
12.9 练习3:等比数列第几项超过m
12.10 总结
第13章 一个结构套另一个结构——结构的嵌套
13.1 俄罗斯套娃玩具——嵌套
13.2 程序控制结构的嵌套
13.3 计数器和累加器
13.4 案例1:吃苹果
13.5 案例2:求整数中非零数字的个数
13.6 案例3:兔子问题——斐波那契数列(1)
13.7 练习1:求n个数的最大值
13.8 练习2:闰年的个数
13.9 练习3:求等差数列的和
13.10 总结
第14章 退出循环和跳过当前这一轮循环
14.1 抄写古诗和数字20遍
14.2 退出循环和跳过当前循环
14.3 案例1:质数的判定(break语句)
14.4 案例2:输出1~100中的质数
14.5 案例3:用while(true)循环求数列和
14.6 练习1:数列1, 2, 3, 2, 3, 4
14.7 练习2:斐波那契数列(2)
14.8 练习3:斐波那契数列(3)
14.9 总结
第15章 循环包含循环——循环的嵌套
15.1 九九乘法表的规律
15.2 循环的嵌套
15.3 枚举算法的思想
15.4 案例1:数字之和(1)
15.5 案例2:输出数字图案
15.6 案例3:鸡兔同笼问题(2)
15.7 练习1:统计1~N范围内的质数个数
15.8 练习2:百钱百鸡问题
15.9 练习3:勾股定理(2)
15.10 总结
第16章 存多个数据的容器——(一维)数组
16.1 带格子的收纳盒——数组的引入
16.2 数组和元素
16.3 案例1:某年某月的天数
16.4 通过循环处理一维数组
16.5 案例2:斐波那契数列(4)
16.6 案例3:数列1, 2, 3, 2, 3, 4, 3, 4, 5, 4, 5, 6,…的前n项和
16.7 练习1:数列1, 1, 2, 1, 2, 3, 1, 2, 3, 4,…的前n项和(1)
16.8 练习2:将一个正整数逆序
16.9 练习3:求一组数的最值和平均值
16.10 总结
第17章 表格型容器——二维数组
17.1 方格作业本——二维数组的引入
17.2 用数组存储多个有关联的数据
17.3 二维数组就是二维表格
17.4 用循环处理二维数组
17.5 案例1:求二维数组中的最大元素
17.6 案例2:求一个矩阵中的鞍点
17.7 案例3:输出数字螺旋矩阵(2)
17.8 练习1:二维1, 2, 3, 2, 3, 4, 3, 4, 5, 4,…
17.9 练习2:统计矩阵中各类数的个数
17.10 练习3:输出杨辉三角形(2)
17.11 拓展阅读:三维数组
17.12 总结
第18章 非数值型数据——字符和字符串
18.1 从身份证号说起
18.2 字符和字符串
18.3 ASCII编码
18.4 字符、字符串和字符数组
18.5 用字符数组读入一个整数
18.6 案例1:字符转换——模运算符
18.7 案例2:简单的字符串加密
18.8 案例3:统计各类字符的个数
18.9 练习1:数字之和(2)
18.10 练习2:计算单词的得分
18.11 练习3:提取连续的数字字符串
18.12 计算机小知识:汉字编码
18.13 总结
第19章 “逢十进一”的由来——进位计数制
19.1 开关面板——二进制的引入
19.2 数位和计数单位
19.3 进位计数制
19.4 二值的表示
19.5 二进制、十六进制加减运算
19.6 计量数据大小的单位
19.7 用二进制数数
19.8 理解整型(int, long long)的范围
19.9 案例1:猜数字魔术(心灵感应魔术)
19.10 案例2:以八进制、十六进制输出数据
19.11 案例3:以八进制、十六进制输入数据
19.12 二进制、八进制和十六进制的相互转换
19.13 练习1:生日蜡烛
19.14 练习2:二进制数
19.15 计算机小知识:程序员节
19.16 总结
第20章 进制转换问题
20.1 单位换算问题
20.2 一斤十六两
20.3 进制的转换
20.4 案例1:十进制换位运算
20.5 案例2:其他进制转十进制
20.6 案例3:十进制转其他进制
20.7 练习1:数码1的位置
20.8 练习2:字节内容
20.9 练习3:雷劈数
20.10 总结
第21章 字符及字符串处理
21.1 用草串着卖的鸡蛋
21.2 字符串处理函数
21.3 字符串类string
21.4 案例1:计算两个字符串的相关性
21.5 案例2:校验和
21.6 案例3:从整数中提取出4个字符
21.7 练习1:比较大整数的大小关系
21.8 练习2:输出月份(二维字符数组)
21.9 拓展阅读:万能头文件
21.10 总结
第22章 通过函数实现功能分解
22.1 设计师的梦想
22.2 函数就是功能
22.3 函数的分类
22.4 案例1:质数的判定(用函数实现)
22.5 案例2:求两个数的较大者(用函数实现)
22.6 案例3:数组元素逆序(用函数实现)
22.7 练习1:斐波那契数列(5)
22.8 练习2:区间内所有质数(用函数实现)
22.9 练习3:闰年的判定(用函数实现)
22.10 总结:如何设计函数的参数和返回值
22.11 计算机小知识:结构化程序设计
22.12 总结
第23章 递归及递归函数设计
23.1 从前有座山
23.2 案例1:递归求阶乘
23.3 递归函数
23.4 案例2:猴子吃桃问题
23.5 案例3:求最大公约数
23.6 练习1:斐波那契数列(6)
23.7 练习2:角谷猜想(用递归实现)
23.8 练习3:数字之和(3)
23.9 总结
第24章 简单排序算法
24.1 从顺序说起
24.2 排序及排序函数
24.3 字典序
24.4 案例1:插入排序
24.5 案例2:冒泡排序
24.6 案例3:简单选择排序
24.7 练习1:字符串排序
24.8 练习2:坐电梯取钻石游戏
24.9 练习3:字符排序
24.10 总结
第25章 排序问题及处理
25.1 致柔的游戏规则
25.2 sort排序函数
25.3 案例1:谁在中间
25.4 案例2:前20%和后20%
25.5 练习1:合影效果
25.6 练习2:单词重组
25.7 总结
第26章 如何高效地查找?
26.1 折纸和剪线
26.2 查找
26.3 案例1:顺序查找
26.4 案例2:二分查找
26.5 练习1:猜数字游戏
26.6 关于二分查找的相关函数
26.7 练习2:有多少个元素比b小(大)
26.8 总结
第27章 结构体
27.1 设计一种新的笔
27.2 自定义数据类型——结构体
27.3 一级排序和二级排序
27.4 排序时指定排序规则——cmp函数
27.5 案例1:成绩排序
27.6 案例2:按照个位数排序
27.7 练习1:序列排序
27.8 练习2:病人排队
27.9 总结
第28章 枚举算法
28.1 送你一个智慧
28.2 枚举算法的思想及实现要点
28.3 算法及算法的效率
28.4 案例1:求x2 \+ y2 = n的正整数解
28.5 案例2:既是平方数也是立方数
28.6 练习1:验证哥德巴赫猜想
28.7 练习2:和为给定数
28.8 计算机小知识:1秒钟100 000 000次运算
28.9 总结
第29章 模拟算法
29.1 从模拟考试说起
29.2 模拟算法的思想及实现要点
29.3 案例1:出列游戏
29.4 案例2:单身贵族游戏
29.5 练习1:爬动的蠕虫
29.6 练习2:求一个整数的回文数步数
29.7 总结
第30章 数据结构基础知识
30.1 结束不是终止,而是一个新的开始
30.2 数据结构基本概念
30.3 标准模板库
30.4 向量
30.5 队列
30.6 案例1:数列1, 1, 2, 1, 2, 3, 1, 2, 3, 4,…前n项和(2)
30.7 案例2:输出杨辉三角形(用向量实现)
30.8 练习1:出列游戏(用队列实现)
30.9 练习2:机器翻译
30.10 总结
后 记
参考文献
附 录 课程资源使用说明