中学生C++创意编程

978-7-115-58910-1
作者: 方其桂
译者:
编辑: 牟桂玲

图书目录:

详情

本书采用单元和课的形式,通过30个寓教于乐且贴近中学生学习和生活,符合中学生认知的编程案例,帮助学生学习和掌握C++的编程思维和方法。 本书利用流程图厘清编程思路,进而剖析解决问题必须的C++知识,包括常量、变量、顺序结构、选择结构、循环结构、数组、函数、文件操作、算法等。在此过程中,学生可以通过探索体会到编程的乐趣和魅力,并学会运用计算思维来解决问题。 本书适合中学生自主学习使用,可作为青少年编程竞赛的教材,也可作为信息技术教师学习C++语言的入门教材。

图书摘要

版权信息

书名:中学生C++创意编程

ISBN:978-7-115-58910-1

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

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

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

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

著    方其桂

责任编辑 牟桂玲

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

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

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

读者服务热线:(010)81055410

反盗版热线:(010)81055315

内容提要

本书采用单元和课的形式,通过30个寓教于乐且贴近中学生的学习和生活、符合中学生认知的编程案例,帮助中学生学习和掌握C++的编程思维和方法。

本书利用流程图厘清编程思路,进而剖析解决问题必需的C++知识,包括常量、变量、顺序结构、选择结构、循环结构、数组、函数、文件操作、算法等。在此过程中,学生可以通过探索体会编程的乐趣和魅力,并学会运用计算思维来解决问题。

本书适合中学生自主学习使用,可作为青少年编程竞赛的教材,也可作为信息技术教师学习C++语言的入门书。

前言

我们编写本书,不是期望将读者培养成软件工程师,而是想让今天的青少年初步了解编程,感受编程。编程并不是一件高深莫测的事情,而是一种乐趣、一种享受,是为明天种下一粒待萌发的种子。

一、为什么要学编程

想在信息技术无处不在的世界里,更高效地使用它,就必须学会编程;想更好地读懂世界、适应世界、创造未来世界,就要学会编程。学会编程就拥有了一笔宝贵的“人生财富”。学编程,不仅可以提升同学们的自信心,增强成就感,还可以培养同学们的科学探究精神,养成严谨、踏实的良好习惯。学习编程的四大理由如下。

1.培养抽象逻辑思维能力

编程就好比解一道数学难题,首先需要把复杂的问题分解成一个一个简单的小问题,然后逐一突破,最终解决复杂的问题。在这个过程中,同学们的抽象逻辑思维能力能够得到很好的锻炼。

2.培养勇于试错的心态

在编程的世界里,犯错是常态,可以说编程就是一个不断试错的过程,但它的调试周期较短,试错成本较低。这样,同学们在潜移默化中内心会变得越来越强大,能以更加平和的心态面对挫折和失败。无论在哪个人生阶段,良好的心态始终是社会生存的重要支撑。

3.培养学习专注力

爱玩是每个孩子的天性,而编程学习却是一个要求非常专注的过程,这对大部分同学来说是一项挑战。但是编程学习有一个有别于其他学科的巨大优势,那就是可以实现游戏化学习,趣味性十足。这可以让同学们沉浸在编程学习情境中,在无形中提升学习专注力。

4.培养解决问题的能力

编程注重知识与生活的联系,旨在培养同学们的动手能力。编程能够让同学们的想法变成现实,对同学们的创新能力、解决问题能力、动手能力的提升有很大的帮助。

二、为什么学习C++编程

C++是目前非常流行的一种编程语言,它是由C语言发展而来的。C++的语法结构是很多编程语言的基础。目前,全国编程竞赛使用C++作为比赛语言,故C++也成为各类学校与培训机构主要教授的编程语言之一。

学习编程,绕不开代码。中学生可直接学习C++,这对培养同学们的编程能力很有帮助。长远来看,若将来打算走竞赛的道路,学习C++编程也是有必要的。

三、本书特点

本书以单元和课的形式编排,从简单的例子着手,逐渐增加编程项目的难度;以程序讲解为中心,注重算法设计。本书的主要特点如下。

利用故事情境引发学生思考,既独具匠心,又妙趣横生。

利用流程图厘清思路,激发学生的学习兴趣,培养学生的计算思维。

通过探究与实践,让学生在解决问题的过程中体会到编程的乐趣和魅力。

通过分层次练习,探索解决问题的方法。

利用微课视频,辅助学生突破学习难点。

四、适用读者

本书是一本C++编程的启蒙书,希望通过本书能让中学生和更多的读者爱上编程。本书适合以下读者阅读。

想学编程的中学生。 

想教中学生编程的老师和家长。

想在轻松、有趣的环境下探索编程的爱好者。

五、本书使用方法

本书附赠了与书内容同步的PPT课件和微课视频。读者扫描图书封底的二维码,即可获得本书配套资源的下载链接。

我们希望读者在计算机旁阅读本书,遇到问题就上机实践,有不懂的地方可以观看我们提供的微课视频。更希望读者有固定的学习时间,然后坚持学下去。

六、本书作者

参与本书编写工作的有省级教研人员,以及全国、省级优质课竞赛获奖教师,他们不仅长期从事计算机教学方面的研究,而且都具有丰富的计算机图书编写经验。

本书由方其桂担任主编,李怀伦、董俊担任副主编。本书的第1单元、第8单元由董俊编写,第3单元由杨艳萍编写,第4单元由冯士海编写,第5单元由王丽娟编写,第2单元、第6单元和第7单元由李怀伦编写,随书配套资源由方其桂整理并制作。

虽然我们有着10多年撰写计算机图书的经验,并认真构思,反复审核、修改,但书中仍难免有一些疏漏。我们深知一本图书的好坏,需要广大读者去检验,在这里,我们衷心希望您对本书提出宝贵的意见和建议。我们的联系邮箱是muguiling @ ptpress.com.cn。

方其桂

第1单元 魔法天地——初识编程

当我们使用鼠标双击电脑上的歌曲文件时,就能聆听到优美的旋律;当我们用手指在手机相册中划动时,就可以浏览漂亮的照片;当我们对着家庭机器人说“开灯”时,客厅的灯就亮了……这些都是人和机器的“交流”。机器之所以能和人交流、理解人的“意图”,并根据人的指令一步一步去工作,完成某种特定的任务,是因为机器内部有事先编写好的程序。这些程序都是使用程序设计语言编写而成的,而编写的过程就是编程。

目前,C++是主流的编程语言之一。C++语言结构简洁、操作方便、易上手,因此非常适合初学者。本单元我们就一起来认识一下C++语言吧!

学习内容

 第1课 拥有魔法盒——软件安装

 第2课 求生者密码——编程体验

 第3课 交换身份牌——数据类型

 第4课 绝地闯关卡——算术运算

第1课 拥有魔法盒——软件安装

扫一扫,看视频

在“哈利•波特”系列小说中,每一个入门魔法师要想到魔法学校去,都必须到9¾站台去乘坐列车。修炼编程魔法的同学也一样,要想入门编程世界,必须先获取与计算机交流的魔法盒,这样才可以给计算机下达指令,指挥计算机做我们想让它做的事情。那么获取这个魔法盒,就是我们学习编程的第一步。

编程任务:下载并安装Dev-C++软件,打开编程的大门。

1.理解题意

从网络上搜索并下载Dev-C++软件,然后将其安装到自己的计算机中。

2.问题思考

问题1

如何下载并保存Dev- C++软件?

问题2

如何安装Dev- C++软件?

编写程序,我们可以使用Microsoft Word、记事本等软件,但如何让计算机运行程序、接收指令呢?这就需要一个编译软件,我们通常将其称为集成开发环境(Integrated Development Environment,IDE)。支持C++语言的集成开发环境有很多,如C-Free、C++ Builder、Visual Studio、DEV-C++等。本书给大家推荐的是Dev-C++,这个集成开发环境比较简洁,目前在中小学编程中应用得比较广泛。

1. 下载并保存Dev-C++软件

(1)登录Dev-C++软件的官方网站,单击“Download”按钮。

(2)按下图所示进行操作,下载并保存Dev-C++软件。

2.安装Dev-C++软件

按下图所示进行操作,就可以成功地将Dev-C++软件安装到计算机中。

3.设置Dev-C++软件

(1)设置语言。初次运行安装好的Dev-C++软件,系统会提示选择语言,这里我们可以选择“简体中文/Chinese”。

(2)设置字体和字号。单击“工具”→“编辑器选项”,在“编辑器属性”对话框中单击“显示”选项卡,在该选项卡中设置Dev- C++编辑器的字体为Consolas,字号为10。

1.编译器的作用

人说的话计算机是不能直接“听懂”的,计算机之所以能和人进行交流,是因为有程序这个“传令官”。我们通过使用和人类的自然语言比较接近的程序设计语言(如C++、Java等)在程序中表达我们的“旨意”,而程序则负责调度各种计算机资源来实现我们下达的“旨意”。但C++、Java等程序设计语言是高级语言,计算机也不能直接“听懂”,需要一个“翻译官”把高级语言翻译成低级语言——机器语言,这就是编译器的作用。

2.Dev-C++软件的使用

将Dev-C++软件安装、设置好之后,双击桌面上的快捷方式图标,即可运行该软件。然后选择“文件”→“新建”→“源代码”命令,就可以看到下图所示的软件使用界面。编写程序代码、运行程序等操作都是在该界面中进行的。

第2课 求生者密码——编程体验

扫一扫,看视频

“密室逃脱”游戏中,求生者的主要任务就是尽快破译密码机,这样才不会被监管者发现,因此如何在短时间内破译更多的密码机是逃生的关键。玩家杰克发现了一个通用密码——*#06#,每次只需要在计算机屏幕上输出“*#06#”,就能快速破译一个密码机。

编程任务:编写程序,在计算机屏幕上输出密码“*#06#”。

1.理解题意

利用Dev-C++软件编写程序,程序功能是输出一串字符“*#06#”。

2.问题思考

问题1

如何编写输出程序代码?

问题2

如何编译运行程序?

3.算法分析

若使用C++语言,实现在计算机屏幕上输出一串字符,需要用到cout语句输出指令,而指令需要在包含头文件和主函数的框架中执行。后面讲到的每个程序都需要在此框架中执行,初学者可先记住此框架,后面慢慢理解其含义。

程序流程图如下图所示。

1.新建源文件

启动Dev-C++软件,选择“文件”→“新建”→“源代码”命令(或按<Ctrl>+<N>组合键),新建一个源代码文件,默认名称为“未命名1”。要养成良好的编程习惯,即为每次新建的程序文件重新命名。

2.C++程序的基本框架

3.cout语句

cout是输出语句,它的语法格式如下。

格式:cout<<  ;

示例:cout<<"Hello world"; //输出Hello world

             cout<<6+2;              //输出8

功能:输出一个字符常量或一个表达式的值。输出的内容如果用英文的双引号标识,则内容为字符常量,cout语句将按原样输出;如果没有用英文的双引号标识,则内容为表达式,cout语句将输出表达式的值。

4.编译运行

程序代码编写好之后,需要将程序指令翻译成机器语言,让计算机执行,这就是编译。编译的过程需要在Dev-C++中完成。

通常是先编译程序再运行程序。在“运行”菜单中选择“编译”命令,如果提示编译成功,就可以运行程序;也可以在“运行”菜单中选择“编译运行”命令,或者按<F11>键,编译并运行程序。

如果代码中有编写错误,编译时会有红色文字提示,只有先修改代码才能再次尝试编译。

1.编程实现

在代码编辑区编写程序代码,并以“1-2-1.cpp 第2课 求生者密码——编程体验”为文件名保存。

文件名 1-2-1.cpp 第2课 求生者密码——编程体验

2.测试程序

程序运行结果如下图所示。

3.程序解读

在本程序中,我们可以理解为除了第5行的输出语句,其他行的代码构成了C++程序的基本框架,此框架在后面讲到的每个程序中都有应用,读者需牢记。第5行的位置是写程序的地方。本程序是输出一句话,所以就用输出语句cout来实现。

4.易犯错误

在编写程序代码时,除了头文件#include<iostream>和主函数外,每一行语句指令要结束时,其后面都要加上一个英文分号。这个英文分号常常被编程初学者遗漏。此外,要注意代码字母的大小写,指令中出现的符号都是英文符号;不要滥用空格,应合理缩进代码,以保证程序的美观性和可读性。

1.连续输出

如果程序中有多个要输出的内容,如要输出表达式“54*78”以及它的值,我们就可以这样写程序:

cout<<"54*78="<<54*78;

输出结果:

54*78=4212

2.换行输出

如果程序中需要多行输出,就要在需要换行的地方加上换行指令endl。例如,要分两行输出“我是中国人,我爱我的祖国!”,我们就可以这样写程序:

cout<<"我是中国人,"<<endl;
cout<<"我爱我的祖国!";

也可以这样写:

cout<<"我是中国人,"<<endl<<"我爱我的祖国!";

程序运行结果如下图所示。

1.修改程序

下图所示的程序代码,其功能是计算并输出12的平方值,其中有两处错误,请你改正。

练习1

修改程序:①                          

                 ②                          

2.编写程序

试编写一个程序,输出下图所示的金字塔图形。

第3课 交换身份牌——数据类型

扫一扫,看视频

在“三国杀”桌游中,每个玩家都只能有一张身份牌,并且每个玩家有一次赠送身份牌的机会,但每个玩家不能同时有两张身份牌。本轮游戏有3个玩家,玩家a的身份牌是刘备,玩家b的身份牌是曹操,玩家c没有身份牌,现在a和b两个玩家想交换身份牌,他们应该如何操作呢?

编程任务:在符合游戏规则的情况下,帮助a、b两个玩家交换他们的身份牌。

1.理解题意

游戏中,玩家a的身份牌是刘备,玩家b的身份牌是曹操,若要交换身份牌,不能直接把玩家b的身份牌赠送给玩家a。因为如果直接给,玩家a的身份牌只能被直接丢弃,不能赠送给玩家b,所以只能先把玩家a的身份牌保存起来,再把玩家b的身份牌赠送给玩家a。

2.问题思考

问题1

如何存放a、b、c这3个数?

问题2

如何交换a、b两个数?

3.算法分析

为了方便表示,我们把刘备的身份牌当作1、曹操的身份牌当作2,那么就可以表示为a=1、b=2,然后借助玩家c来交换a、b的值。

由下图可以清楚地看出,要交换a、b的值,可以通过以下3步操作来完成。

第1步:把玩家a的身份牌赠送给玩家c。

第2步:把玩家b的身份牌赠送给玩家a。

第3步:把玩家c的身份牌赠送给玩家b。

程序流程图如下图所示。

1.声明变量

顾名思义,变量就是可变的量,它在计算机中起到“容器”的作用,用于存储数据。变量可以通过变量名来访问。简单地说,类似于在计算机存储空间里开辟一个小空间,用于存放数据,这个空间的名称就是变量名。这个空间有多大取决于变量的数据类型。声明变量的语法格式如下。

格式:数据类型 变量名;

示例int a;

功能:声明一个整型的变量a。

2.数据类型

声明变量的时候,首先要声明变量的数据类型,也就是每个数据在计算机中存储时都需要先指定数据类型。在C++中,常用的数据类型有整型和浮点型,此外还有字符型和布尔型。

数据类型

类型说明符

数值范围

示例

整数

整型

int

-2147483648~2147483647

int n=100

超长整型

long long

-9.2E18~9.2E18 (约19位的整数)

long m=123456789

实数

单精度浮点型

float

-3.4E38~3.4E38

float a=3.141592

双精度浮点型

double

-1.7E308~1.7E308

double s=0.6180339887498

字符型

char

用单引号引起来的单个字符

char ch='A'

布尔型

bool

表示真(1)或假(0)

bool c=true

本案例中,声明的3个整型变量可以写成如下形式:

int a,b,c;

3.赋值语句

在程序中,如何把玩家b的身份牌传给玩家a呢?可以用赋值语句来实现。在C++语言中,赋值语句是由赋值表达式加上英文的分号构成的表达式语句,如a=b;,意思是把b的值赋给a,a原来的值被替换掉。其中,“=”称为赋值运算符或赋值号。注意:一定是把右边的值或表达式赋给左边的变量。

格式:变量=常数/变量/表达式;

功能:将“=”右边的值赋给左边的变量,如a=a+1;,意为将变量a的值增加1后重新赋值给变量a。

1.编程实现

在代码编辑区编写程序代码,并以“1-3-1.cpp 第3课 交换身份牌——数据类型”为文件名保存。

文件名 1-3-1.cpp 第3课 交换身份牌——数据类型

2.测试程序

选择“运行”→“编译运行”命令,运行程序,结果如下图所示。

说明变量a的值已由原来的1变成了2,变量b的值已由原来的2变成了1。

3.程序解读

本程序中,定义了3个整型变量,用于存放身份牌信息。a和b是有初始值的,要使两数交换,不能直接让a=b、b=a,因为若这样操作,a中原来的值会丢失。

4.易犯错误

对于本程序,初学编程的同学最易犯的错误是语句后忘记加分号;其次,第8行语句输出a和b时,中间要加个空格,否则输出的两个数会紧挨着,不容易区分。 

5.拓展应用

同学们还可以尝试交换其他类型的两个数。例如,交换两个float类型的数,其程序代码如下。 

想一想,如果要将一个int类型的数与一个float类型的数交换,其程序代码应该如何修改呢?

1.C++程序的编写步骤

编写C++程序,一般需经历以下4个步骤。

分析问题:理解程序需求。

设计算法:构思解决问题的思路,用流程图或者自然语言描述。

编写程序:将设计好的算法转换成程序代码。本书中编写的程序是用C++编译器编写的扩展名为“.cpp”的源文件。

调试运行:编译运行、调试程序。

2.变量的命名规则

在一个程序中,可能要使用多个变量。为了区别不同的变量,必须赋予每一个变量不同的名称,这个名称称为变量名。为了增强程序代码的可读性和易维护性,变量的命名必须遵守一定的规则。在C++中,变量的命名规则如下。

变量名只能由字母(A~Z,a~z)、数字(0~9)和下划线“_”组成。

变量名中的第一位必须是字母或者下划线。

不能使用C++中的关键字来命名变量,以避免冲突。例如,不能使用main、int、if等关键字命名变量。

变量要先定义后使用,并且变量名要区分英文大小写。

变量名的长度一般不超过8个字符。

1.修改程序

下面程序的功能是输入一个圆的半径值,求该圆的面积。其中有两处错误,请你改正。

练习1 计算圆的面积

修改程序:①                          

                  ②                          

2.阅读程序写结果

阅读下面的程序,写出运行结果,然后上机验证。

练习2

输出:                          

第4课 绝地闯关卡——算术运算

扫一扫,看视频

在“绝地生存”游戏中,玩家被空降到一个荒无人烟的海岛上。每个玩家只能靠自己的智慧在海岛上生存。假设该游戏一共有10个关卡,每个关卡入口处都有一个补给站,但是只有回答对补给站的问题,才能享受补给。补给站的问题都很简单,就是给出一个数字,让你快速计算出这个数字的平方。10个关卡给出的数字会越来越大,口算也会越来越困难,所以需要你通过编程来协助解决这个问题。

编程任务:计算一个数字的平方是多少。

1.理解题意

本课的编程任务实际上就是编写一个程序,实现输入一个数字,输出这个数字的平方的功能。

2.问题思考

问题1

如何输入一个数字?

问题2

如何表示一个数字的平方?

3.算法分析

根据第3课所学内容可知,我们需要先声明两个变量来存储这个数字和它的平方,这两个变量为整型。求解过程如下。

第1步:声明两个整型变量a、s。

第2步:输入a。

第3步:计算s。

第4步:输出s。

程序流程图如右图所示。

1.输入数据

输入数据,我们可以使用cin语句。例如,本程序中要输入数字a,则可以这样写程序:

cin>>a;

2.平方运算

计算a的平方,在数学中就是两个a相乘,表示为aa。在C++语言中,乘号用星号“*”表示,a的平方就可以表示为a*a。

1.编程实现

在代码编辑区编写程序代码,并以“1-4-1.cpp 第4课 绝地闯关卡——算术运算”为文件名保存,如下图所示。

文件名 1-4-1.cpp 第4课 绝地闯关卡——算术运算

2.测试程序

选择“运行”→“编译运行”命令,运行程序,输入98,程序运行结果如下图所示。

3.易犯错误

在编写本程序代码时,注意要根据题意来确实变量的数据类型。第3课中我们学到int类型的数据最多能表示2147483647,也就是说a*a的值不能超过2147483647,所以这个程序只能计算不超过46340的平方。

4.拓展应用

如果本程序中给出a的取值范围是1~200000,那么这个程序该如何编写呢?

1.算术运算符

除了“*”之外,C++中还有其他的算术运算符,如“/”“+”等。常用的几个算术运算符的作用及应用示例如下表所示。

算术运算符

+

-

*

/

%

作用

求余

示例

6+2=8

9-7=2

2*3=6

7/2=3

7%4=3

其中,求余运算符是数学中没有的。在计算机中,余数是可以直接求出来的。在程序编写中经常用到求余运算,例如判断一个数是不是偶数,只需要判断这个数除以2有没有余数就可以了。

有的同学可能会问,7除以2的结果为什么是3,而不是3.5呢?这是因为在C++中除法运算与数据的类型有关,如果除数和被除数都是整型,那么除法运算的结果也是整型,且会自动抹去小数部分,如15/4的值是3。但是,如果除数和被除数或其中之一为浮点型,那么运算结果为浮点型,如7/2.0=3.5。

2.C++程序的一般组成结构

在学习编程的初期,很多同学不知道如何编写程序,这里给同学们总结了简单程序一般的组成结构,同学们可以根据这个组成结构编写程序、解决问题。

变量声明:考虑该程序需要几个变量,这些变量都是什么类型。

数据输入:考虑程序中哪些数据是已知的,哪些数据是需要输入的。

数据计算:根据输入的数据或已知的数据计算要求的数据。

数据输出:把最后要求的数据输出。

1.完善程序

下面程序的功能是输入一个整数a(1<a<20000),输出a的三次方。请在横线处补充缺失的语句,使程序完整。

练习1

语句①:                          

语句②:                          

2.阅读程序写结果

阅读下面的程序,写出运行结果,然后上机验证。

练习2

 

输入:10 3

输出:                          

3.编写程序

假设一个笼子里有鸡和兔两种动物,据统计,笼子里有30个头、90只脚。试编写一个程序,计算笼子里鸡和兔各有多少只。

相关图书

代码审计——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++开发指南

相关文章

相关课程