内容简介
本书是CCF全国青少年信息学奥林匹克竞赛(NOI)教程的第一册,旨在普及计算机科学与程序设计知识。书中遵循由浅入深、逻辑严密的编写思路,辅以丰富的实例解析,引领读者逐步提升计算思维能力。全书共七章,全面覆盖了NOI系列竞赛大纲入门级别的内容,包括编程基础知识、数据的存储与读入、程序的选择执行、程序段的反复执行、数据的批量存储、模块化程序设计、NOI系列竞赛相关规定等。
本书可作为信息学奥林匹克竞赛的教学用书,也可作为青少年学习计算机科学知识、了解信息学奥林匹克竞赛的参考资料。
目录
丛书序
前言
第一章 编程基础知识
第一节 初识C++程序3
一、情境导航3
二、知识探究3
(一)C++程序的基本结构3
(二)集成开发环境4
三、实践应用5
四、总结提升7
第二节 整数算术运算9
一、情境导航9
二、知识探究9
(一)cout语句9
(二)算术运算符10
三、实践应用11
四、总结提升12
五、学习检测14
第三节 实数算术运算15
一、情境导航15
二、知识探究15
(一)C++语言中实数的概念15
(二)实数与整数的区别16
(三)常用的数学函数16
三、实践应用17
四、总结提升18
五、学习检测21
本章回顾22
第二章 数据的存储与读入
第一节 变量和变量的类型25
一、情境导航25
二、知识探究25
(一)变量和数据类型25
(二)数据类型转换26
三、实践应用28
四、总结提升33
五、学习检测36
第二节 赋值语句和数学表达式37
一、情境导航37
二、知识探究38
(一)赋值语句38
(二)变量的自增自减38
(三)常量定义39
三、实践应用39
四、总结提升43
五、学习检测46
第三节 变量的读入47
一、情境导航47
二、知识探究47
(一)cin语句47
(二)顺序结构程序设计48
三、实践应用49
四、总结提升53
五、学习检测56
第四节 scanf语句和printf语句57
一、情境导航57
二、知识探究58
(一)printf格式输出函数58
(二)scanf格式输入函数59
三、实践应用60
四、总结提升65
五、学习检测66
本章回顾68
第三章 程序的选择执行
第一节 if语句和关系表达式71
一、情境导航71
二、知识探究71
(一)if语句的格式71
(二)分支语句中关系表达式的设计72
三、实践应用73
四、总结提升76
五、学习检测78
第二节 逻辑表达式和条件表达式79
一、情境导航79
二、知识探究80
(一)逻辑运算和逻辑表达式80
(二)逻辑型变量81
(三)条件表达式81
三、实践应用82
四、总结提升85
五、学习检测86
第三节 嵌套if语句87
一、情境导航87
二、知识探究88
(一)嵌套if语句的概念88
(二)嵌套if语句使用的注意事项88
三、实践应用89
四、总结提升96
五、学习检测99
第四节 switch语句100
一、情境导航100
二、知识探究101
(一)switch语句的格式101
(二)switch语句使用的注意事项102
三、实践应用102
四、总结提升106
五、学习检测109
本章回顾110
第四章 程序段的反复执行
第一节 for语句113
一、情境导航113
二、知识探究114
(一)循环结构114
(二)for语句的格式114
三、实践应用115
四、总结提升120
五、学习检测122
第二节 while语句125
一、情境导航125
二、知识探究125
(一)while语句的格式125
(二)模拟法126
三、实践应用127
四、总结提升132
五、学习检测134
第三节 do while语句136
一、情境导航136
二、知识探究137
(一)do while语句的格式137
(二)位运算138
三、实践应用139
四、总结提升144
五、学习检测146
第四节 多层循环148
一、情境导航148
二、知识探究149
(一)多层循环149
(二)枚举法150
三、实践应用151
四、总结提升159
五、学习检测161
本章回顾165
第五章 数据的批量存储
第一节 一维数组169
一、情境导航169
二、知识探究170
(一)一维数组170
(二)数组的初始化170
三、实践应用171
四、总结提升174
五、学习检测177
第二节 活用数组和数组下标179
一、情境导航179
二、知识探究179
三、实践应用180
四、总结提升189
五、学习检测193
第三节 字符数组与字符串196
一、情境导航196
二、知识探究196
(一)字符数组196
(二)字符串198
三、实践应用200
四、总结提升207
五、学习检测209
本章回顾214
第六章 模块化程序设计
第一节 自定义函数217
一、情境导航217
前言/序言
1984年,中国计算机学会创办了以程序设计为形式的全国青少年信息学奥林匹克竞赛(NOI)。从此,无数青少年通过NOI系列活动了解编程,并走上计算机科学研究的道路。
近年来,随着人工智能的普及,编程教育越来越受关注,青少年学习编程和参加竞赛的热情也越来越高。在这样的背景下,启动全国青少年信息学奥林匹克竞赛教程的编写工作,有必要清楚而明确地回答以下两个问题。
第一个问题:C++程序设计类书籍那么多,为什么要再写一本?
在多年的编程教学中,我们深刻体会到程序设计不是靠读书实现的,但是一本好的程序设计书籍却能开启智慧,引人领略程序之美,架起从文字转化为个人能力的桥梁。我们的初衷正是要写出这样一本“不一样”的书——让读者尤其是中小学生看得进去,更能看得出去。
看得进去,是希望能用深入浅出的文字,化刻意的严谨为轻松的引领。
看得出去,是希望读者通过本书,不仅能收获字里行间的知识,更能收获字面之外的深度思考和学习方法。
第二个问题:本书有何特色?在内容上,如何实现目标?
为写出一本“不一样”的书,本书从关注学习过程、强调反思意识、引导主动探究、建构知识体系四个方面入手,为读者提供源于知识、又超越知识本身的丰富资源。
1.关注学习过程
本书每一节都沿着“情境导航——知识探究——实践应用——总结提升”四个环节依次展开。从实际问题出发,引导读者在分析问题的基础上,寻求解决方案,再由方案转化为程序。而转化过程中的知识空白,便是本节要学习的新知识。反过来,学习了新知识,便能编写程序,更能实现预设方案,最后解决实际问题。在这个过程中,知识的出现,恰逢其时;学习知识,有其背景更有其意义。体现了学习计算机科学的一个重要特点——亲历发现问题、解决问题的过程,实现知识与能力的提升。
2.强调反思意识
本书在解决每个实际问题之后,加入“思考”“实验”等内容。其中,思考部分引导读者学会提出问题并尝试解决;实验部分引领读者通过上机操作解决疑问,确认思考结论。大部分章节还设置了“学习检测”环节,通过练习帮助读者巩固知识、夯实基础。
在最初接触本书时,读者可能会跟随书中设计的“思考”“实验”亦步亦趋;但是经过一段时间的学习后,会逐渐养成多想一点、多做一点的习惯。这种潜移默化的影响,远胜于单纯的讲授,它带给读者的不仅是学习程序设计的方法,更是自主和高效学习的能力。
3.引导主动探究
每个人的阅历、习惯、解决问题的能力都有差异。这种差异是客观存在的。本书在关注广大初学者的同时,还为那些有更高需求的读者设计了“拓展”内容。
每节的“总结提升”环节,既总结重点内容,也提出拓展方向,为读者提供回顾反思的基础,也驱动读者进一步探索学习、提升能力,向着优化解决方案或者解决更多问题的方向努力。
这些拓展内容不仅不影响书的完整性,通过学习这些内容还能拓展视野,提升解决问题的效率。
4.建构知识体系
全书共七章,分别指向NOI竞赛大纲中入门级别的内容,为读者构建该级别应具备的完整知识框架。
在具体呈现上,一方面,注意结合4~7年级学生的年龄特点选择题目,使读者能聚焦编程学习的主干与核心,避免因题目背景分散注意力;另一方面,在每章结尾,又以思维导图的形式梳理学习内容,进一步明晰了知识点以及例题与竞赛大纲的联系。
从细节设计到篇章导向,本书实现了编程知识与考纲条目的联通,也建构起编程入门的知识体系,使得读者能够立于更高处看待知识,看清知识学习的规律与彼此间的关联。
本书作为全国青少年信息学奥林匹克竞赛教程的第一册,力求为读者开启智慧、培养习惯,为后续的学习奠定基础。虽然立意美好,但我们自知能力有限。在思考中实践,在实践中思考。路很长,唯以真诚相邀,期待青少年读者、教育同行、计算机专业工作者多提宝贵意见,一起努力成就编程教育的诗和远方。
邱桂香
2024年5月