书名:信息学竞赛:C++一本通
ISBN:978-7-115-67169-1
本书由人民邮电出版社发行数字版。版权所有,侵权必究。
您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。
我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。
如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。
著 张 森
责任编辑 吴晋瑜
人民邮电出版社出版发行 北京市丰台区成寿寺路11号
邮编 100164 电子邮件 315@ptpress.com.cn
网址 http://www.ptpress.com.cn
读者服务热线:(010)81055410
反盗版热线:(010)81055315
本书打破了传统教材中的分章模式,采用按知识点组织课程的形式,讲解C++语言的语法知识,力求更适合中小学教师在人工智能时代背景下的教学以及学生学习。
全书包括22课和2个附录。第1~3课介绍C++基本语法,包括程序格式、数据定义和输入输出等;第4~6课讲解各种运算符及表达式;第7~12课介绍选择和循环程序结构;第13~15课讲解数组及其应用;第16~18课介绍字符数组与字符串以及文件操作;第19~20课讲解函数及其应用;第21课介绍结构体及其应用;第22课介绍类和对象。本书还为读者提供了两个附录(电子版),附录A介绍C++集成开发环境的相关内容,附录B为课后练习的参考答案。
本书适合作为信息学竞赛的培训教材,也适合对C++感兴趣的中小学生自学。
近几年来,青少年编程教育在世界各国开展得如火如荼。在我国,青少年编程教育方兴未艾,如星星之火一般在祖国大地上蔓延开来。人们逐渐意识到在人工智能技术飞速发展的今天,编程应该成为一种必备的技能。
本书属于信息学竞赛编程入门读本。信息学主要是利用计算机及其程序设计来分析问题、解决问题的一门学科,信息学竞赛则是以信息学尤其是编程相关知识为基础的中小学学科竞赛活动。
本书以生动幽默的语言,通过大量的实例,讲述了C++语言的基本语法知识。全书分为22课和两个附录。第1~3课简述了C++基本语法,包括程序格式、数据定义和输入输出等;第4~6课涉及了各种运算符及表达式;第7~12课阐述了选择和循环程序结构;第13~15课讨论了数组类型及其应用;第16~18课举例说明了字符数组与字符串以及文件操作;第19~20课探讨了函数及其应用;第21课解释了结构体及其应用;第22课介绍了类和对象。
本书与传统信息学竞赛类教材相比,具有如下特点。
(1)语言通俗易懂,内容风趣幽默,难度适中,既有知识性,又注重趣味性,适合中小学生入门学习。
(2)在内容组织上,打破传统编程教材分章模式,按知识点组织课程,将课程分为知识讲解和实例练习两种,在形式上更符合中小学师生教与学的习惯。
(3)知识讲解通过实际例题介绍知识,从具体到抽象,贴近中小学生的认知特点。书中大部分课程的知识讲解都分为如下6个部分。
① “看一看”部分通过漫画和故事形式描述例题,引起读者兴趣。
② “想一想”部分针对本课知识提出问题,启发读者思考。
③ “做一做”部分给出例题源程序,指导读者实践。
④ “听一听”部分结合例题和图示讲解内容,引领读者构建知识框架。
⑤ “总结”部分使用简单语句梳理知识框架,辅助读者回顾所学。
⑥ “练一练”部分根据本课内容列举相关习题,引导读者复习。
(4)实例练习紧随相关知识讲解之后,用以帮助读者巩固相关知识的学习。
(5)书中例题按照循序渐进的节奏设置,符合程序设计的思维方式。
(6)书中练习题在配套资源包中都有源代码及相关说明,可供教师备课和学生自学。
本书主要适用于9~16岁学生,既可以作为学生自学的读本,又可以作为教师教学的参考,还可以作为学校或机构信息学竞赛的培训教材。
如果把本书当作信息学竞赛的培训教材,那么可以根据不同学生的年龄做如下课时安排。
(1)对于9~12岁(小学中、高年级)的学生,建议将“练一练”部分作为课堂内容完成,每一课的教学时间为180分钟(4课时)。如果每周安排2课时,共44个教学周完成。
(2)对于12~16岁(初中以上)的学生,建议将“练一练”部分作为课后作业完成,每一课的教学时间为90分钟(2课时)。若每周安排2课时,则共需22个教学周完成。
本书在编写和出版期间得到了多方人士的支持和帮助。中国科学院自动化研究所孙哲南研究员总体策划了本项目的实施并审阅了全部书稿。北京市西城区教育研修学院的石沙老师、林志奕老师、熊雪亭老师以及北京教育学院石景山分院的牛静老师帮助联系了各位顾问,并请各位顾问审阅了书稿内容。
在成书过程中,上海它趣教育科技有限公司的李丽、牛宏伟等完成了书中漫画的绘制,王舜谦、张思琪等完成了文字的初次校对工作,苏鹤年等完成了部分程序代码的校对工作;天津中科智能识别有限公司的矫金鑫、庞晓静、梁颜铭、秦蓉等整理了书中的程序代码,完成了配套资源包的开发以及图书的校对工作。
本书是在中国科学院自动化研究所智能感知与计算研究中心、天津中科智能识别有限公司等单位领导的关怀和鼓励下出版的。此外,本书的出版离不开人民邮电出版社吴晋瑜编辑的大力支持和协助。
在此谨对所有支持和协助本书编写和出版的人员表示最诚挚的敬意和最衷心的感谢。
由于作者水平有限,书中疏漏之处在所难免,希望各位专家和广大读者批评指正。另外,书中部分例题和练习来源于全国青少年信息学奥林匹克竞赛试题并稍做改动,特此说明。
张 森
于中国科学院自动化研究所
本书提供如下资源:
● 本书源代码;
● 本书思维导图;
● 异步社区7天VIP会员;
● 两个附录(电子版)。
要获得以上资源,读者可以扫描下方二维码,根据指引领取。
作者和编辑尽最大努力来确保书中内容的准确性,但难免会存在疏漏。欢迎读者将发现的问题反馈给我们,帮助我们提升图书的质量。
当读者发现错误时,请登录异步社区(https://www.epubit.com),按书名搜索,进入本书页面,单击“发表勘误”,输入勘误信息,单击“提交勘误”按钮即可(见右图)。本书的作者和编辑会对读者提交的勘误进行审核,确认并接受后,将赠予读者异步社区的100积分。积分可用于在异步社区兑换优惠券、样书或奖品。
我们的联系邮箱是wujinyu@ptpress.com.cn。
如果读者对本书有任何疑问或建议,请发送邮件给我们,并请在邮件标题中注明本书书名,以便我们更高效地做出反馈。
如果读者有兴趣出版图书、录制教学视频,或者参与图书翻译、技术审校等工作,可以发邮件给我们。
如果读者所在的学校、培训机构或企业,想批量购买本书或异步社区出版的其他图书,也可以发邮件给我们。
如果读者在网上发现有针对异步社区出品图书的各种形式的盗版行为,包括对图书全部或部分内容的非授权传播,请将怀疑有侵权行为的链接发邮件给我们。这一举动是对作者权益的保护,也是我们持续为广大读者提供有价值的内容的动力之源。
“异步社区”(www.epubit.com)是由人民邮电出版社创办的IT专业图书社区,于2015年8月上线运营,致力于优质内容的出版和分享,为读者提供高品质的学习内容,为作译者提供专业的出版服务,实现作者与读者在线交流互动,以及传统出版与数字出版的融合发展。
“异步图书”是异步社区策划出版的精品IT图书的品牌,依托于人民邮电出版社在计算机图书领域多年来的发展与积淀。异步图书面向IT行业以及各行业使用IT技术的用户。
卡路 |
路西的哥哥,一个聪明的小男孩,心地善良,做事认真,是个“小学霸”。 |
路西 |
卡路的妹妹,一个聪慧美丽的小女孩,乖巧可爱,总是把哥哥当成偶像。 |
科迪 |
它是卡路和路西兄妹俩共同的好朋友。科迪是卡路家里的一只机器小熊。在卡路和路西很小的时候,它就开始陪伴兄妹俩了,谁也不知道它的来历。虽然科迪个头不大,但是它“神通广大”,懂得很多知识。 |
贝贝 |
卡路最好的朋友,非常淘气。他们从小就一起玩耍,在卡路和科迪的熏陶下,贝贝也喜欢上了科学,学习越来越好,后来也成了“小学霸”。 |
小虎 |
他也是卡路的好朋友。小虎身强体壮,凡是出力气的活,他都抢着干。 |
卡路和路西是亲兄妹。卡路是哥哥,他心地善良,做事认真,是个“小学霸”。路西是妹妹,她聪明美丽,乖巧可爱,总是把哥哥当作自己的偶像。
兄妹俩还有一位共同的好朋友——科迪。科迪是一只机器小熊,从卡路和路西很小的时候起,它就开始陪伴兄妹俩了。科迪个头不大,但是“神通广大”,懂得很多知识。
最近,妹妹路西迷上了C++程序设计,整天叫嚷着要成为一名伟大的计算机科学家,用程序改变世界。这不,刚放学回到家,她就坐在计算机前敲来敲去,连哥哥叫她吃饭都不理。
这让卡路很有危机感,“我可是妹妹的偶像,不能被她赶超了啊!”他心想,“我也要赶快学会编程,成为更伟大的计算机科学家!”有了这个想法,卡路就去缠着小熊科迪,也要开始学习程序设计。
【例1-1】 编写程序,在屏幕上显示“Hello,World!”。
输入:无。
输出:一行,一个字符串“Hello,World!
”。
输入样例:无
输出样例:
Hello,World!
(1)什么是程序设计?
(2)为什么要学习程序设计?
(3)如何进行程序设计?
例1-1的程序实现如代码清单1-1所示。
代码清单1-1
1. #include<iostream> 2. using namespace std; 3. int main(){ 4. cout<<"Hello,World!"; 5. return 0; 6. }
提示
请先按照附录A中的说明,在Windows操作系统上安装Dev-C++软件,再按照附录中的说明编辑、编译和执行例1-1中的程序。
程序(program)是一些命令的集合。这些命令用于控制计算机实现指定的功能,如写文章、播放音乐和玩游戏等。计算机还可以实现更多的功能,这是多么令人期待和神奇的事情啊!例1-1就是一个程序,这个程序的功能是让计算机显示字符串“Hello,World!
”。
要用命令让计算机实现某些功能,就要用计算机的语言与它“对话”。平时我们交流使用的语言,如汉语、英语等,是计算机不能直接理解的,需要有专门的单词和语法来“告诉”计算机该做什么,这就是计算机语言。计算机语言种类非常丰富,包括C/C++、Java和Python等。
程序设计就是使用计算机语言编写程序控制计算机完成相应功能的过程。许多工程师、科学家都是通过程序设计来完成自己的工程任务或科学研究的。你也可以通过程序设计控制计算机实现自己想要的功能,是不是很厉害?
本书介绍的就是C++程序设计语言(以下简称C++)。C++是于1983年由美国贝尔实验室的科学家发明的。C++最初是作为C语言的增强版出现的,被称为“带类的C”(C with classes)。后来随着C++功能的增强,其逐渐演变成一种独立的程序设计语言。利用C++,人们开发了许多软件。例如,很多大型游戏是用C++开发的;Windows、macOS等操作系统,以及谷歌搜索引擎、微软Office等也是以C++为主进行开发的。另外,C++也是信息学奥林匹克竞赛指定的编程语言之一。
小知识
程序不仅可以控制计算机的工作,还能控制其他电子产品。无论是火箭发射、飞机起飞,还是机器人、电梯,甚至空调、智能电视机等的正常工作,程序均在发挥着重要的作用。
在我们身边,有许多“程序”在悄然运行,如清晨的闹钟会叫醒我们,老师用投影仪或者智能电视机播放课件,我们上网查找学习资料……可以说,程序无处不在。为了更好地让程序为我们所用,我们有必要了解一些程序设计的方法。
学习程序设计有助于培养我们的计算思维。计算思维包括数学思维和工程思维两个部分。从小培养我们的计算思维——从现实问题中总结数学模型,然后用计算机语言进行工程实现以解决问题,这种思维方式会让我们一生受益。
学习程序设计也有助于培养我们的创新能力。创新能力是指以新颖、独创的方法解决问题的能力,是我们应对未来最重要的能力之一。在学习程序设计的过程中,我们可以从模仿到创新,不断探索,用自己的方法解决不同的问题。
上文介绍了程序设计的概念和学习目的,那么该如何进行程序设计呢?我们先来分析一下例1-1的实现程序。
(1)第1行——声明本程序包含输入输出流库文件(iostream
)。这行代码用于实现声明功能,通常作为程序的第一行,告诉计算机将输入输出流库文件包含在本程序中。这样,在程序中就可以使用基本输入输出(Input/Output,I/O)语句了,如例1-1中的cout (输出语句)。包含库文件语句的说明如图1-1所示。
图1-1 包含库文件语句的说明
注 意
这一行的各部分之间通常可以没有空格作为分隔符。
小知识
C++程序中的一条命令又叫作一条语句。
(2)第2行——使用标准命名空间。命名空间是C++中的一种规则,用来解决不同类库的同名冲突问题。你可以暂时不理解它的具体含义,记住就好。使用命名空间语句的说明如图1-2所示。
注 意
(1)using namespace
std;
中的前3个部分要用空格分隔,“;
”与“std
”之间可以没有空格。
(2)在C++中,“;
”表示语句结束。除了少数特殊语句,大部分C++语句使用分号作为结束标志。这很重要,因为没有语句结束标志,执行C++程序时就会报错。
图1-2 使用命名空间语句的说明
(3)第3行——主函数名。这一行是主函数(main function)的名字说明。函数就是完成某种功能的程序段(语句集合)。主函数main()
是C++程序运行的起始点。无论主函数在程序的开头、结尾还是中间,主函数中的代码总是在程序开始运行时第一个被执行。主函数头的说明如图1-3所示。
图1-3 主函数头的说明
注 意
(1)在int
和main
之间要有一个空格分隔,而main
和小括号之间不能有空格。
(2)小括号中即使是空的,也不能省略。
小知识
主函数mai
n
()
是一个特殊的函数。一段C++程序可以有一个或多个函数,当它只有一个函数的时候,这个函数必须是主函数;当它有多个函数的时候,也必须有且仅有一个主函数,其他函数统称为“非主函数”。程序的执行总是从主函数开始并以主函数结束。主函数可以调用任何非主函数,非主函数之间可以互相调用,但非主函数不能调用主函数。
(4)第3行和第6行—— 一对大括号“{}”。大括号就像一件衣服把函数语句包裹起来。左大括号表示函数语句的开始,右大括号表示函数语句的结束,二者必须成对出现。
(5)第4行——输出字符串。cout<<
"
Hello,World!
"
;
语句是本程序中的核心功能语句。输出语句的说明如图1-4所示。
图1-4 输出语句的说明
注 意
(1)这条语句的各部分之间通常不加空格,即各部分之间没有分隔符。(2)C++规定由双引号开始和结束的内容叫作字符串。字符串输出时要按原样输出,也就是说,双引号内有什么,屏幕上就显示什么。(3)如果要在程序中使用“cout
”,必须在程序开始处声明将头文件“iostream
”包括在程序中。
(6)第5行——函数结束返回操作系统。return 0;
为返回语句,一般是函数的最后一条可执行语句。返回语句的说明如图1-5所示。
图1-5 返回语句的说明
注 意
return
和0之间通常由空格分隔,0和;
之间通常没有分隔符。
由例1-1可知,一个简单C++程序的框架如图1-6所示。
图1-6 一个简单C++程序的框架
顺口溜
井号包含I/O流,使用标准命名头;整型紧拽主函数,小大括号不能丢;
函数完成要返回,分号表示语句尾;要想玩转编程序,程序框架要牢记。
本课的主要内容如下。
(1)C++程序框架的介绍,包括如何包含库文件、使用命名空间和定义主函数。
(2)本课提到的关键字:using
、namespace
、int
和return
。
输入样例:无
输出样例:
我爱中国!