教孩子学编程 C++入门图解

978-7-115-61512-1
作者: 党松年方泽波
译者:
编辑: 赵祥妮
分类: C++

图书目录:

详情

本书通过C++知识点图解,翔实的编程案例和充满趣味性的编程训练,循序渐进地介绍如何用C++编程,旨在帮助青少年锻炼逻辑思维,培养分析问题、解决问题的能力。本书主要包括计算机程序的奥秘、数据处理、顺序结构、选择结构、循环结构、函数、数组、指针、结构体与共用体、文件等内容。   本书可作为编程爱好者,特别是青少年爱好者学习C++编程的入门图书,也可作为青少年编程培训机构、兴趣班的教材,还可作为青少年准备信息学奥林匹克竞赛的参考书。

图书摘要

版权信息

书名:教孩子学编程 C++入门图解

ISBN:978-7-115-61512-1

本书由人民邮电出版社发行数字版。版权所有,侵权必究。

您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。

我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。

如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。


版  权

著    党松年 方泽波

责任编辑 赵祥妮

人民邮电出版社出版发行  北京市丰台区成寿寺路11号

邮编 100164  电子邮件 315@ptpress.com.cn

网址 http://www.ptpress.com.cn

读者服务热线:(010)81055410

反盗版热线:(010)81055315

内 容 提 要

本书通过C++知识点图解,翔实的编程案例和充满趣味性的编程训练,循序渐进地介绍如何用C++编程,旨在帮助青少年锻炼逻辑思维,培养分析问题、解决问题的能力。本书主要包括计算机程序的奥秘、数据处理、顺序结构、选择结构、循环结构、函数、数组、指针、结构体与共用体、文件等内容。

本书可作为编程爱好者,特别是青少年爱好者学习C++编程的入门图书,也可作为青少年编程培训机构、兴趣班的教材,还可作为青少年准备信息学奥林匹克竞赛的参考书。

前  言

2019年,我们写的《教孩子学编程(信息学奥赛C语言版)》出版以后,收到许多读者的反馈, 我们在以它为教材进行教学的过程中,也发现许多内容需要改进升级。自NOIP 2022开始,全国青少年信息学奥林匹克竞赛(National Olympiad in Informatics,NOI)系列赛事将仅支持C++。因此,我们决定将其升级为C++版本。

要学习编程,先要选择一种编程语言。当前流行的编程语言有很多,如C++、Python、Java等。C++是在C语言的基础上发展而来的,是一种面向对象的高级语言,具有语法结构严谨清晰、功能灵活强大、运行效率高等优点,比较适合作为学习计算机编程的入门语言。

本书作为C++编程的入门图书,主要介绍了计算机程序的奥秘、数据处理、顺序结构、选择结构、循环结构、函数、数组、指针、结构体与共用体、文件等内容。

本书尽量用通俗的语言和形象的比喻来解释各种编程术语,同时用大量的图示来帮助读者理解和分析编程问题。本书的大部分章节在讲解各个知识点之后,都配有若干编程案例,同时还配有充满趣味性的编程训练,供读者自己动手实践。

本书配套资源中含有各章配套的课件,以及全部编程案例和编程训练的源代码,源代码文件编号与书中编程案例和编程训练编号一一对应;配套资源中提供了5个扩展阅读文档,“编程训练问题分析”包含书中所有编程训练的分析,读者可以参考该文档进行编程练习,“揭开计算机的神秘面纱”“类和对象”供感兴趣的读者阅读,“ASCII标准码表”“C++常见保留字”方便读者使用时查找。

读者可登录异步社区,在本书页面中的【配套资源】处下载配套资源。

同时可查看课件的在线演示文稿(https://slides.com/dangsn/c-01)。

我们在编写本书的过程中参考了大量的资料,谨向这些资料的作者表示感谢,同时也感谢人民邮电出版社的各位编辑在本书出版过程中的大力支持和帮助。

由于水平有限,书中难免存在疏漏和不足之处,敬请各位读者批评指正。

党松年 方泽波

资源与支持

资源获取

本书提供如下资源:

编程案例源代码、编程训练源代码、课件、扩展阅读

本书思维导图

异步社区7天VIP会员

要获得以上资源,您可以扫描下方二维码,根据指引领取。

提交勘误

作者和编辑尽最大努力来确保书中内容的准确性,但难免会存在疏漏。欢迎您将发现的问题反馈给我们,帮助我们提升图书的质量。

当您发现错误时,请登录异步社区(https://www.epubit.com/),按书名搜索,进入本书页面,点击“发表勘误”,输入勘误信息,点击“提交勘误”按钮即可(见下图)。本书的作者和编辑会对您提交的勘误进行审核,确认并接受后,您将获赠异步社区的100积分。积分可用于在异步社区兑换优惠券、样书或奖品。

与我们联系

我们的联系邮箱是contact@epubit.com.cn。

如果您对本书有任何疑问或建议,请您发邮件给我们,并请在邮件标题中注明本书书名,以便我们更高效地做出反馈。

如果您有兴趣出版图书、录制教学视频,或者参与图书翻译、技术审校等工作,可以发邮件给我们。

如果您所在的学校、培训机构或企业,想批量购买本书或异步社区出版的其他图书,也可以发邮件给我们。

如果您在网上发现有针对异步社区出品图书的各种形式的盗版行为,包括对图书全部或部分内容的非授权传播,请您将怀疑有侵权行为的链接发邮件给我们。您的这一举动是对作者权益的保护,也是我们持续为您提供有价值的内容的动力之源。

关于异步社区和异步图书

异步社区”(www.epubit.com)是由人民邮电出版社创办的IT专业图书社区,于2015年8月上线运营,致力于优质内容的出版和分享,为读者提供高品质的学习内容,为作译者提供专业的出版服务,实现作者与读者在线交流互动,以及传统出版与数字出版的融合发展。

异步图书”是异步社区策划出版的精品IT图书的品牌,依托于人民邮电出版社在计算机图书领域30余年的发展与积淀。异步图书面向IT行业以及各行业使用IT技术的用户。

第1章 计算机程序的奥秘

计算机是20世纪以来人类最伟大的发明之一,它对人类的生产和生活产生了极其重要的影响。计算机在诞生之初主要应用于军事领域,随着时间发展,其应用范围越来越广,并且推动了各个领域的技术进步。时至今日,计算机已遍及人类生产和生活的各个方面,成为人类社会必不可少的工具。计算机程序是计算机至关重要的组成部分,本章将对计算机程序进行简单的介绍。

1.1 程序设计语言

1.1.1 程序的基本概念

程序(Program)就是控制计算机各个部件运行的指令和相关数据的集合。计算机完成的各种复杂运算任务,都是由存储在计算机存储器中的各种程序来控制的。这里的运算可以是数学运算,如求两个数的和;也可以是符号运算,如查找和替换文档中的某个词等。从根本上讲,计算机是由数字电路组成的电子运算机器,只能做数字运算。计算机之所以能够做符号运算,是因为符号在计算机内部是用数字表示的。此外,计算机还可以处理声音和图像,因为声音和图像在计算机内部也是用数字表示的,这些数字最终都通过专门的计算机硬件和软件(多个程序的集合)转换成人可以听到的声音和看到的图像。

计算机程序都是由一系列基本操作组成的。这些基本操作可分为以下几类。

输入(input):从文件或输入设备获取数据。

输出(output):把数据显示到屏幕,或存入一个文件,或发送到其他输出设备。

基本运算:最基本的数据访问和数学运算(加、减、乘、除等)。

判断和分支:判断某个条件,然后根据不同的判断结果执行不同的后续操作。

循环:重复执行一系列操作。

任何一个计算机程序,不管多么复杂,都是按这几类基本操作一步步执行的。

编写程序就是把复杂的任务分解成多个子任务,再把每一个子任务进一步分解成更简单的任务,层层分解,直到任务可以用以上几类基本操作来完成。

1.1.2 机器语言和汇编语言

编写程序必须遵循一定的规则和方法,这些规则和方法称为程序设计语言。由于计算机内部只能进行二进制数据的识别和运算,因此最初的计算机程序都是用二进制代码来表达指令和数据,这种计算机硬件可以直接识别并执行的、由二进制代码组成的程序设计语言称为机器语言。例如执行数字2和3的加法,16位计算机上的机器语言指令如下:

11010010 00111011                       // "2+3"的机器语言指令

机器语言是最底层的计算机语言,可以看作计算机的母语。用机器语言编写的程序都是由8位二进制数构成的,每个8位的二进制数都是有特定含义的指令或数据。可是人类看到的都是0和1的组合,很难判断出各个组合表示什么。于是就有人发明了另一种编程方法,根据表示指令功能的英语单词给每一种指令起一个相似的名字,并用这个名字来代替表示指令的0和1的二进制数组合,而数据则用人类更容易接受的十进制数或十六进制数来表示。这种类似英语单词的名字叫作助记符,使用助记符的编程语言称为汇编语言。例如执行数字2和3的加法,汇编语言指令如下:

mov result, 2                     ; 将数值2存入result寄存器中
add result, 3                     ; 将result中的数值加3

汇编语言的助记符、数据与机器语言的二进制代码都是一一对应的,两者都是针对计算机硬件的,也就是说都是面向机器的语言。因为不同计算机硬件所用的助记符和二进制代码是不一样的,所以这样的程序通用性不好,如果把它移植到其他计算机上就无法正常运行了。机器语言和汇编语言通常称为低级语言,这种语言直接使用计算机硬件可以识别的指令和数据来编写程序,编写的程序可以在相应的计算机系统中直接运行。

1.1.3 高级语言

与低级语言相比,高级语言是更加接近自然语言的程序设计语言,使用人类易于接受的文字(通常用英文)和数学公式来编写程序。例如执行数字2和3的加法,用高级语言编写的代码如下:

result = 2 + 3;                         //结果存放在result中

源代码(Source Code)指未编译的按照一定程序设计语言规范书写的人类可读的文本文件。源代码使用高级语言编写,书写规范只与编程语言有关,与计算机的体系结构无关,同一种编程语言在不同计算机上的表达方式是一致的。

高级语言并不特指某一种具体的语言,而是包括很多种编程语言,如C、C++、C#、Pascal、BASIC、Java、Python、Lisp、PHP等。使用这些编程语言编写程序代码所要遵循的书写规范(语法、命令格式)各不相同。

用高级语言编写的源代码不能直接被计算机的中央处理器(Central Processing Unit,CPU)识别和执行,必须要转换成对应的目标代码(机器语言),这种转换过程称为编译(Compile)。编译任务实际上是由一种特定的程序来执行的,这种执行源代码编译任务的程序称为编译器(Compiler)。因为不同的高级语言的语法与命令格式都不一样,将源代码转换为目标代码(机器语言)的方式也不一样,所以每一种高级语言都有对应的编译器。

以C++为例,C++源代码(文件扩展名为cpp)在执行前,必须经过C++编译器转换为由机器指令表示的目标程序(文件扩展名为obj),然后将目标程序与相关的C++库函数链接,形成完整的可在操作系统中独立执行的程序,即可执行程序(文件扩展名为exe),如图1.1所示。

图1.1 C++源代码的编译过程

1.2 程序设计方法

1.2.1 面向过程的结构化程序设计

程序设计是指设计、编写、调试程序的方法和过程。程序设计方法有两种:一种是面向过程的结构化程序设计,另一种是面向对象程序设计。

面向过程的结构化程序设计的主要思想是分解功能并自顶向下逐步求解。简单地说,过程就是程序中执行某项操作的一段代码。面向过程的结构化程序设计是指把一个复杂的程序按照不同的功能分解成若干相对简单的独立过程(代码段),即模块,而每个模块的结构可以由顺序结构、选择结构和循环结构这3种基本结构组成。使用这样的程序设计方法可降低程序的复杂性。

顺序结构、选择结构和循环结构这3种基本结构如图1.2所示。

图1.2 程序的3种基本结构

1.2.2 面向对象程序设计

与面向过程的结构化程序设计相比,面向对象程序设计是一种更优秀的程序设计方法。

面向对象程序设计的主要思想是把问题分解成各种独立而又可以互相调用的对象。这与传统的面向过程的结构化程序设计的思想不同:面向过程的结构化程序设计将程序看作一系列独立过程(模块)的集合,而各个过程所实现的功能一般都是单一且独立的;面向对象程序设计中的每一个对象都应该能够接收数据、处理数据并将数据传递给其他对象,因此每一个对象都可以被看作一个小型且功能完备的“机器”。

面向对象程序设计中的主要概念是对象。对象是一个具有各种属性值和方法(某种操作功能)的实体,类是对象的抽象定义。可以把类理解为建造某种东西的设计图,那么对象就是依据这张设计图建造的一个实物。

开发人员在设计对象和类时尽可能地模拟了人类的思维,也就是将抽象的问题转换为具体的对象,这使得程序设计更加符合人类的认知。

C++是当今应用最广泛的面向对象程序设计语言之一,它对C语言进行了扩充和完善。C语言是一种面向过程的结构化程序设计语言,C++与C语言最大的区别就是C++增加了类和对象。事实上,任何合法的C语言程序都是合法的C++程序。虽然C++源于C语言,但C++并不只是简单地增加了类和对象,所以应该把C++当作一门新的面向对象程序设计语言来学习。

1.2.3 程序与算法

编程是为了让计算机解决特定的问题,编程之前需要先明确计算机解决该问题的具体步骤。这里的步骤就是编写该程序所需要的算法

编程就是通过某一种程序设计语言(如C++)来实现算法。

算法如同菜谱,但是仅有菜谱是做不出美味佳肴,还需要各种食材,程序所需的食材就是需要用到的各种数据。可以把一个程序简单地理解为算法与各种关联的数据的和。图1.3所示为程序、算法、数据之间的关系。

图1.3 程序、算法、数据之间的关系

解决同一问题的算法有多种(见图1.4),编程时需要选择运行效率最高的算法。程序运行效率的高低用两个指标来衡量:一个是程序运行时占用的内存,占用的内存越少,运行效率越高;另一个是程序运行时间,运行时间越短,运行效率越高。

图1.4 解决同一问题的不同算法

1.2.4 算法描述

设计好一种算法后,必须清楚、准确地将所设计的求解步骤记录下来,即生成算法描述。可以用自然语言、流程图、N-S图(又称盒图)、伪代码和问题分析图(Problem Analysis Diagram,PAD)等来描述算法,本书只介绍最常见的用流程图描述算法的方法。用流程图描述算法需采用一组特定的图形符号(见表1.1),这些图形符号的主要优点是直观易懂,能表示程序的控制流程。

表1.1 流程图中的常见图形符号及其含义

图形符号

名称

含义

起止框

表示算法的开始或结束

处理框

表示对数据的各种处理和运算操作

输入和输出框

用于描述数据的输入和输出

判断框

表示条件判断,可决定如何进行后续的操作(用于选择结构和循环结构中)

连接点

用于连接断开的流程线。当流程图较大时,如果因跨页而中断,则用连接点连接

流程线

表示程序的运行方向

结构化程序设计中常用的3种程序结构分别是顺序结构、选择结构和循环结构,这3种结构的流程图描述如图1.5所示。

图1.5 顺序结构、选择结构和循环结构的流程图描述

1.3 C++程序开发环境

1.3.1 C++程序开发过程

一个C++程序从编写代码到生成可执行文件,再到正确运行,需要经过编辑、编译、链接、运行和调试等几个阶段。

编辑阶段:在C++程序开发环境的代码编辑窗口中输入和编辑源代码,检查无误后将其保存为扩展名为cpp的C++源文件。

编译阶段:对源代码进行编译,生成扩展名为obj的目标文件,该目标文件是由机器语言指令组成的目标代码。

链接阶段:将编译生成的目标文件与相关的库文件链接(调用库函数),生成扩展名为exe的可执行文件。

运行阶段:运行生成的可执行文件(程序)。

调试阶段:如果在编译阶段或链接阶段出错,就需要重新编辑源代码,修正错误后,再进行编译和链接;另外,如果程序的运行结果出错,那么也需要重新编辑源代码。

C++程序开发过程如图1.6所示。

图1.6 C++程序开发过程

1.3.2 Dev-C++集成开发环境

“工欲善其事,必先利其器”,要学习编程,必须有一个合适的编程工具,这个编程工具就是程序的开发环境。对程序设计语言的初学者来说,找到一个标准化程度高、兼容性好和可移植性强的程序开发环境是非常重要的。

C++开发环境就是编写和运行C++程序的平台,又称为C++编译器。常见的C++编译器有Dev-C++、Visual C++、Code::Blocks等。这些编译器都提供了强大且易于编写、修改、编译、调试C++程序的环境,因为它们把编程所需的各种功能都集成在了一起,所以被称为集成开发环境(Integrated Development Environment,IDE)。

Dev-C++是一个适用于Windows系统的、轻量化(内存占用率低)但功能齐全的C/C++集成开发环境。它有很多版本,使用较多的是Embarcadero Dev-C++ 6.3,但它在输出中文时会出现乱码,目前还没有较好的解决办法。本书使用的是RedPanda Dev-C++,它能提供高亮语法显示、代码自动补全和完善的调试功能,特别适合C++初学者。下面对它的下载、安装、用户配置及使用做简单介绍。

1.下载和安装

访问SourceForge官网,搜索“RedPanda C++”,找到图1.7所示的安装包(https://sourceforge.net/projects/redpanda-cpp/),单击【Download】按钮下载该安装包。

图1.7 从SourceForge官网下载RedPanda C++的安装包

下载以后的安装过程如下。

第一步:双击下载的文件,打开图1.8所示的对话框,在对话框的下拉列表中选择【中文(简体)】选项,单击【OK】按钮。

图1.8 在下拉列表中选择【中文(简体)】选项

第二步:在弹出的【许可证协议】界面中单击【我接受】按钮,如图1.9所示。

图1.9 【许可证协议】界面

第三步:在弹出的【选择组件】界面中的【选定的安装的类型】下拉列表中选择【Full】选项,如图1.10所示,然后单击【下一步】按钮。

图1.10 【选择组件】界面

第四步:在弹出的【选择安装位置】界面中,单击【浏览】按钮选择安装目录,如图1.11所示,然后单击【安装】按钮。

图1.11 【选择安装位置】界面

第五步:程序安装结束,弹出图1.12所示的界面,勾选【运行Red Panda C++ 2.6】复选框,单击【完成】按钮。

图1.12 程序安装结束

首次运行RedPanda C++,会弹出图1.13所示的【选择主题】对话框。在弹出的【选择主题】对话框中选择编辑器的主题颜色,【缺省语言】选择C++,然后单击【确定】按钮,打开图1.14所示的源代码编辑窗口。在菜单栏中,选择【视图】→【显示全部工具面板】选项,可以打开或关闭源代码编辑窗口左侧和底部的工具面板;也可以选择【视图】→【工具面板】选项,在打开的子菜单中选择打开或关闭对应的工具面板。

图1.13 【选择主题】对话框

图1.14 源代码编辑窗口

2.用户配置(可选)

首次运行RedPanda C++时,已经设置了编辑器的主题颜色。如果要更改配色方案,可以在菜单栏中选择【工具】→【选项】选项,打开【选项】对话框,在左侧列表中选择【编辑器】→【配色】选项,在右侧出现的【配色方案】下拉列表中选择自己喜欢的配色方案,如图1.15所示,单击【应用】按钮使更改生效。

图1.15 更改编辑器的配色方案

在【选项】对话框左侧的列表中选择【编辑器】→【代码模板】选项,在右侧单击【新文件模板】选项卡,在下面的编辑框中输入缺省代码片段,如图1.16所示,单击【应用】按钮即可使更改生效。这样设置后,每次新建的源代码文件中都会包含这段缺省代码。

图1.16 添加缺省代码

在【选项】对话框左侧的列表中选择【编辑器】→【自动保存】选项,在右侧勾选【启用自动保存】复选框,设置自动保存的时间间隔,如图1.17所示,单击【应用】按钮,启用自动保存功能。

图1.17 启用自动保存功能

3.创建、编译和运行程序

(1)新建、保存和打开源程序。

在RedPanda C++中,新建一个源代码文件[1]有以下几种途径。

[1] 源代码文件在其他资料中也称为源文件。

在菜单栏中选择【文件】→【新建】→【新建源代码文件】选项。

单击工具栏中的图标。

按快捷键“Ctrl+N”。

新建一个无标题的源代码文件后,可以在源代码编辑窗口中进行代码的编辑与修改,如图1.18所示。

图1.18 无标题的源代码文件

保存源代码文件有以下几种途径。

在菜单栏中选择【文件】→【保存】选项或【文件】→【另存为】选项。

单击工具栏中的图标。

按快捷键“Ctrl+S”。

首次保存源代码文件时,会弹出图1.19所示的【另存为】对话框,选择保存路径,在【文件名】文本框中输入文件名,【保存类型】下拉列表中默认选择【C++语言文件(*.cpp*.CC*.CXX)】选项,单击【保存】按钮即可。

图1.19 【另存为】对话框

打开一个已经创建的C++源代码文件有以下几种途径。

在菜单栏中选择【文件】→【打开】选项。

单击工具栏中的图标。

按快捷键“Ctrl+O”。

在弹出的【打开】对话框中,选择要打开的文件,如图1.20所示,单击【打开】按钮。

图1.20 打开已经创建的C++源代码文件

(2)编译、链接和运行源程序。

源程序创建完毕,还需要编译、链接、运行,才能输出结果。

编译和链接源程序有以下几种途径。

在菜单栏中选择【运行】→【编译】选项。

单击工具栏中的图标。

按快捷键“F9”。

如果源程序编译出错,源代码编辑窗口下面的【编译器】选项卡中就会列出具体错误及其位置(行、列等);同时,在源代码编辑窗口中,出错代码的行号左侧会出现红色错误标识,如图1.21所示。编译完成后,如果没有错误,就可以运行程序。

图1.21 源代码编辑窗口提示出错代码信息

运行程序有以下几种途径。

在菜单栏中选择【运行】→【运行】选项。

单击工具栏中的图标。

按快捷键“F10”。

运行编译后生成的可执行文件,就可以在Windows的命令行界面中输出结果,如图1.22所示。

图1.22 在Windows的命令行界面输出结果

相关图书

代码审计——C/C++实践
代码审计——C/C++实践
CMake构建实战:项目开发卷
CMake构建实战:项目开发卷
C++ Templates(第2版)中文版
C++ Templates(第2版)中文版
C/C++代码调试的艺术(第2版)
C/C++代码调试的艺术(第2版)
计算机图形学编程(使用OpenGL和C++)(第2版)
计算机图形学编程(使用OpenGL和C++)(第2版)
Qt 6 C++开发指南
Qt 6 C++开发指南

相关文章

相关课程