书名:C++案例趣学
ISBN:978-7-115-54723-1
本书由人民邮电出版社发行数字版。版权所有,侵权必究。
您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。
我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。
如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。
主 编 张 森 董 晶
副 主 编 陆 昀 范仲春 刘跃平
主 审 孙哲南
责任编辑 吴晋瑜
人民邮电出版社出版发行 北京市丰台区成寿寺路11号
邮编 100164 电子邮件 315@ptpress.com.cn
网址 http://www.ptpress.com.cn
读者服务热线:(010)81055410
反盗版热线:(010)81055315
副 主 编
审
责任编辑
本书主要讲解C++语言的语法知识,打破了传统教材中的分章模式,采用按知识点组织课程的形式,力求更适合中小学教师在人工智能时代背景下的教学以及学生学习。
全书包括22课和1个附录。第1~3课介绍C++基本语法,包括程序框架、数据定义和输入/输出;第4~6课讲解各种运算符及表达式;第7~12课介绍选择和循环程序结构;第13~15课讲解数组及其应用;第16~18课介绍字符数组与字符串以及文件操作;第19~20课讲解函数及其应用;第21课介绍结构体及其应用;第22课介绍类和对象;附录介绍C++集成开发环境的相关内容。
本书适合作为信息学竞赛的培训教材,也适合对C++感兴趣的中小学生自学。
近几年来,青少年编程教育在世界各国开展得如火如荼。在国内,青少年编程教育方兴未艾,如星星之火一般在祖国大地上蔓延开来。人们逐渐意识到在人工智能技术飞速发展的今天,编程应该成为一种必备的技能。
本书属于信息学竞赛编程入门读本。信息学主要是指利用计算机及其程序设计来分析问题、解决问题的学科,信息学竞赛则是以信息学尤其是编程相关知识为基础的中小学学科竞赛活动。
本书以生动幽默的语言,通过大量的实例,讲述了C++语言面向过程部分的基本语法知识。全书分为22课和1个附录。第1~3课简述了C++基本语法包括程序框架、数据定义和输入/输出等;第4~6课涉及了各种运算符及表达式;第7~12课阐述了选择和循环程序结构;第13~15课讨论了数组类型及其应用;第16~18课举例说明了字符数组与字符串以及文件操作;第19~20课探讨了函数及其应用;第21课解释了结构体及其应用;第22课介绍了类和对象。附录说明了C++集成开发环境——Dev-C++的安装和使用。
本书与传统信息学竞赛类教材相比,具有如下特点。
(1)语言通俗易懂,内容风趣幽默,难度适中,既有知识性,又注重趣味性,适合中小学生入门学习。
(2)在内容组织上,打破传统编程教材分章模式,按知识点组织课程,将课程分为知识讲解和实例练习两种,在形式上更接近中小学师生教与学的习惯。
(3)知识讲解通过实际例题介绍知识,从具体到抽象,符合中小学生的认知特点。书中每一节的知识讲解都分为如下六个部分。
① “看一看”部分通过漫画和故事形式描述例题,引起读者兴趣。
② “想一想”部分针对本课知识提出问题,启发读者思考。
③ “做一做”部分给出例题源程序,指导读者实践。
④ “听一听”部分结合例题和图示讲解内容,引领读者构建知识。
⑤ “总结”部分使用简单语句建立知识框架,辅助读者梳理所学。
⑥ “练一练”部分根据本节课程列举相关习题,引导读者复习。
(4)实例练习紧随相关知识讲解之后,用以帮助读者巩固相关知识的学习。
(5)书中例题都分为问题描述、数学分析、算法说明和程序实现4个步骤,循序渐进讲解了例题,符合程序设计的思维方式。
(6)书中练习题在配套资源包中都有源代码及相关说明,可供教师备课和学生自学。
本书主要适用于9~16岁学生,既可以作为学生自学的读本,又可以作为教师教学的参考,还可以作为学校或机构信息学竞赛的培训教材。
如果把本书当作信息学竞赛的培训教材,那么可以根据不同学生的年龄作如下课时安排。
(1)对于9~12岁(小学中、高年级)的学生,建议将“练一练”部分作为课堂内容完成,每一课的教学时间为180分钟(4课时)。如果每周安排2课时,共44个教学周完成。
(2)对于12~16岁(初中以上)的学生,建议将“练一练”部分作为课后作业完成,每一课的教学时间为90分钟(2课时)。若每周安排2课时,共22个教学周完成。
本书在编写和出版期间得到了多方人士的支持和帮助。中国科学院自动化研究所孙哲南研究员总体策划了本项目的实施并审阅了全部书稿。北京市西城区教育研修学院的石沙老师、林志奕老师、熊雪亭老师以及北京教育学院石景山分院的牛静老师帮助联系了各位顾问,并请各位顾问审阅了书稿内容。
在成书过程中,上海它趣教育科技有限公司的李丽、牛宏伟等完成了书中漫画的绘制,王舜谦、张思琪等完成了文字的初次校对工作,苏鹤年等完成了部分程序代码的校对工作;天津中科智能识别产业技术研究院有限公司的矫金鑫、庞晓静、梁颜铭、秦蓉等整理了书中的程序代码,完成了配套资源包的开发以及图书的校对工作。
本书是在中国科学院自动化研究所智能感知与计算研究中心、天津中科智能识别产业技术研究院有限公司等单位的领导关怀和鼓励下出版的。此外,本书的出版离不开人民邮电出版社吴晋瑜编辑的大力支持和协助。
在此谨对所有支持和协助本书编写和出版的人员表示最诚挚的敬意和最衷心的感谢。
由于时间仓促,加之作者水平有限,书中疏漏之处在所难免,希望各位专家和广大读者批评指正。另外,书中部分例题和练习来源于信息学奥林匹克竞赛试题并稍作改动,特此说明。
张 森
于中国科学院自动化研究所
主 审 孙哲南
主 编 张 森 董 晶
副 主 编 陆 昀 范仲春 刘跃平
参编人员 顾铁成 张新征 肖继潮 王舜谦 张思琪 李 丽
总 顾 问 孙哲南 中国科学院自动化研究所
王旭明 北京市第五十六中学校长
王教凯 人大附中北京经济技术开发区学校校长
牛 静 北京教育学院石景山分院教研员
石 沙 北京市西城区教育研修学院教研员
朱 霞 北京育才学校党委副书记
刘 杰 北京市第十四中学副校长
李先平 北京市古城中学校长
李华艳 北京师范大学附属中学副校长
连玉宏 北京市第六十六中学副校长
肖伟华 北京景山学校远洋分校副校长
张结实 北京大学附属中学石景山学校副校长
林乐光 北京市第九中学校长
林志奕 北京市西城区教育研修学院教研员
熊雪亭 北京市西城区教育研修学院教研员
王 晨 北京市西城区第一六一中学分校校长
本书由异步社区出品,社区(https://www.epubit.com/)为您提供相关资源和后续服务。
本书为读者提供源代码。
要获得以上配套资源,请在异步社区本书页面中单击,跳转到下载界面,按提示进行操作即可。注意:为保证购书读者的权益,该操作会给出相关提示,要求输入提取码进行验证。
作者和编辑尽最大努力来确保书中内容的准确性,但难免会存在疏漏。欢迎广大读者将发现的问题反馈给我们,帮助我们提升图书的质量。
如果读者发现错误,请登录异步社区,按书名搜索,进入本书页面,单击“提交勘误”,输入勘误信息,单击“提交”按钮即可。本书的作者和编辑会对读者提交的勘误进行审核,确认并接受后,将赠予读者异步社区的100积分(积分可用于在异步社区兑换优惠券、样书或奖品)。
我们的联系邮箱是contact@epubit.com.cn。
如果读者对本书有任何疑问或建议,请发邮件给我们,并请在邮件标题中注明本书书名,以便我们更高效地做出反馈。
如果读者有兴趣出版图书、录制教学视频,或者参与图书翻译、技术审校等工作,可以发邮件给我们;有意出版图书的作者也可以到异步社区在线投稿(直接访问www.epubit.com/selfpublish/submission即可)。
如果读者来自学校、培训机构或企业,想批量购买本书或异步社区出版的其他图书,也可以发邮件给我们。
如果读者在网上发现有针对异步社区出品图书的各种形式的盗版行为,包括对图书全部或部分内容的非授权传播,请将怀疑有侵权行为的链接发邮件给我们。这一举动是对作者权益的保护,也是我们持续为广大读者提供有价值的内容的动力之源。
“异步社区”是人民邮电出版社旗下IT专业图书社区,致力于出版精品IT图书和相关学习产品,为作译者提供优质出版服务。异步社区创办于2015年8月,提供大量精品IT图书和电子书,以及高品质技术文章和视频课程。更多详情请访问异步社区官网https://www.epubit.com。
“异步图书”是由异步社区编辑团队策划出版的精品IT专业图书的品牌,依托于人民邮电出版社近40年的计算机图书出版积累和专业编辑团队,相关图书在封面上印有异步图书的LOGO。异步图书的出版领域包括软件开发、大数据、人工智能、测试、前端、网络技术等。
异步社区
微信服务号
卡路和路西是亲兄妹。卡路是哥哥,他心地善良,做事认真,是个真正的“小学霸”。路西是妹妹,她聪明美丽,乖巧可爱,总是把哥哥当作自己的偶像。
兄妹俩还有一位共同的好朋友——科迪。科迪是一只机器小熊,从卡路和路西很小的时候起,就开始陪伴兄妹俩了。科迪个头不大,但是它“神通广大”,懂得很多知识。
最近,妹妹路西迷上了C++程序设计,整天叫嚷着要成为一名伟大的计算机科学家,用程序改变世界。这不,刚放学回到家,她就坐在计算机前敲来敲去,连哥哥叫她吃饭都不理。
这让卡路很有危机感,“我可是妹妹的偶像,不能被她赶超了啊!”他心想,“我也要赶快学会编程,成为更伟大的计算机科学家!”有了这个想法,卡路就去缠着小熊科迪,也要开始学习程序设计。
【例1-1】 编写程序,在屏幕上显示“Hello,World!”。
输入:无。
输出:1行:一个字符串“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. }
提示
请先按照附录中的说明,在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
)。这行代码用于实现声明功能,通常作为程序的第一行,告诉计算机将输入/输出流库文件包含在本程序中。这样,在程序中就可以使用基本输入/输出语句了,如例1-1中的cout (输出语句)。包含库文件语句的说明如图1-1所示。
图1-1 包含库文件语句的说明
注意
这一行的各部分之间通常可以没有空格作为分隔符。
小知识
C++程序中的一条命令又叫作一条语句。
(2)第2行——使用标准命名空间。命名空间是C++中的一种规则,用来解决不同类库的同名冲突问题。你可以暂时不理解它的具体含义,记住就好。使用命名空间语句的说明如图1-2所示。
图1-2 使用命名空间语句的说明
注意
(1)using namespace
std;
中的前三部分要用空格分隔,第四部分“;
”与“std
”之间可以没有空格。
(2)在C++中,“;
”表示语句结束。除了少数特殊语句,大部分C++语句使用分号作为结束标志。这很重要,因为没有语句结束标志,执行C++程序时就会报错。
(3)第3行——主函数名。这一行是主函数(main function)的名字说明。函数就是完成某种功能的程序段(语句集合)。主函数main()
是C++程序运行的起始点。无论主函数在程序的开头、结尾还是中间,主函数中的代码总是在程序开始运行时第一个被执行。主函数头的说明如图1-3所示。
图1-3 主函数头的说明
注意
(1)在int
和main
之间要有一个空格分隔,而main
和小括号之间不能有空格。
(2)小括号中即使是空的,也不能省略。
小知识
主函数main()
是一个特殊的函数。一段C++程序可以有一个或多个函数,当它只有一个函数的时候,这个函数必须是主函数;当它有多个函数的时候,也必须有且仅有一个主函数,其他函数统称为“非主函数”。程序的执行总是从主函数开始并以主函数结束。主函数可以调用任何非主函数,非主函数之间可以互相调用,但非主函数不能调用主函数。
(4)第3行和第6行—— 一对大括号“{}”。大括号就像一件衣服把函数语句包裹起来。左大括号表示函数语句的开始,右大括号表示函数语句的结束,二者必须成对出现。
(5)第4行——输出字符串。cout << "Hello,World!";
语句是本程序中的核心功能语句。输出语句的说明如图1-4所示。
注意
(1)这条语句的各部分之间通常不加空格,即各部分之间没有分隔符。(2)C++规定由双引号开始和结束的内容叫作字符串。字符串输出时要按原样输出,也就是说,双引号内有什么,屏幕上就显示什么。(3)如果要在程序中使用“cout
”,必须在程序开始处声明将头文件“iostream
”包括在程序中。
图1-4 输出语句的说明
(6)第5行——函数结束返回操作系统。return 0;
表示返回语句,一般是函数的最后一条可执行语句。返回语句的说明如图1-5所示。
注意
return
和( )
之间通常由空格分隔,0
和;
之间通常没有分隔符。
图1-5 返回语句的说明
由例1-1可知,一个简单C++程序的框架如图1-6所示。
图1-6 一个简单C++程序的框架
顺口溜
井号包含I/O流,使用标准命名头;整型紧拽主函数,小大括号不能丢;
函数完成要返回,分号表示语句尾;要想玩转编程序,程序框架要牢记。
本课的主要内容如下。
(1)C++程序框架的介绍,包括如何包含库文件、使用命名空间和定义主函数。
(2)本课提到的关键字:using
、namespace
、int
和return
。
练习 在屏幕上输出“我爱中国!”。
输入样例:无
输出样例:
我爱中国!
最近,妹妹路西学习了周长的概念,把正方形周长、长方形周长和圆形周长等各种相关的公式记得滚瓜烂熟。她觉得很奇妙:给出边长或者半径,就能计算出周长,太有意思了!这引发了科迪的灵感,它兴冲冲地给卡路出了一道程序题:编写一个程序,输入圆的半径,求圆的周长,如例2-1所示。
【例2-1】 计算圆周长。
输入样例:
5
输出样例:
圆的周长=31.4
【数学分析】
圆心:是圆的中心。
半径():是圆的边到圆心的直线距离。
圆周率():是圆的周长与直径的比值,一般用希腊字母
表示,是一个在数学及物理学中普遍存在的数学常数。其值约等于3.14。
圆的周长()= 2×圆周率×半径 =
例如,当半径为5cm时,周长=
。
该题的数学解法如下。
解:设圆的半径是,周长是
,
= 3.14。 (定义数据)
(输入数据)
(计算处理)
答:圆的周长是31.4cm。 (输出结果)
【算法描述】
在添加程序框架后,在主函数中:
(1)定义圆周率(程序实现中为常量
PI
),定义圆的半径变量r
和圆的周长变量C
;
(2)输入圆的半径变量r
;
(3)计算圆的周长C
= 2r
(注意,程序中以PI
代替);
(4)输出圆的周长。
(1)程序有没有固定的编写格式呢?
(2)该如何定义程序中用到的圆周率、半径和周长呢?
计算机圆周长问题的程序实现如代码清单2-1所示。
代码清单2-1
1. #include<iostream> //调用iostream库
2. using namespace std;
3. int main(){
4. const double PI=3.14; //PI是符号常量,代表3.14
5. double r,c; //定义实型变量
6. cin>>r; //输入半径r的值
7. c=2*PI*r; //计算圆的周长
8. cout<<"圆的周长="<<c; //显示计算结果
9. return 0;
10. }
小知识
上述程序中“//”后面的部分称为注释。注释不参与程序编译和运行,只起到对代码进行解释说明的作用。
正如第1课提到的,无论一个C++程序有多少个函数,都必须有且仅有一个主函数,这个主函数就是程序主体。例如,计算圆周长的实现程序就只有一个主函数。在后续接触更复杂的程序结构之前,我们见到的程序均只有一个主函数。
那么,对于主函数,有没有一个编写的格式呢?答案是有!
除了基本框架,程序(主函数)主要由4个部分组成:定义数据、输入变量、计算处理和输出结果。在编写程序时,我们要针对这4个部分思考问题。简单程序的说明如图2-1所示。
当然,这4个部分不是全都必须要有的,有些部分可以省略。例如,在例 1-1显示“Hello,World!
”的程序中,省略了定义数据、输入变量和计算处理部分,只有输出结果部分。
图2-1 简单程序的说明
顺口溜
定义数据在前头,后面输入跟着走,计算处理我为主,最后结果要输出。
程序通常是用来处理数据的,程序中的定义部分一般就是指定义数据。在C++中,定义数据是相当灵活的,既可以预先全部定义后再使用,又可以等到使用时再定义。为了使程序结构更整齐和更容易理解,我们建议预先全部定义后再使用,即把数据定义都放在函数开始的部分,如代码清单2-1中对半径、周长和圆周率的定义。
程序中的数据分为两种——常量和变量,它们都有各自的特点,即数据类型。在定义数据时,无论是常量还是变量,我们都要给它们起个容易理解的好名字。
常量就是常数,是指在程序中使用的一些具体的数、字符等。例如,第1课中的“Hello,World!
”是个字符串常量,代码清单2-1中出现的2
和3.14
都是常量。在程序中,常量一经定义,它的值就不能被更改了,就像泰山不能移动一样。
你可以直接使用常量,也可以给它取个名字——这就是符号常量,其语法格式有以下两种:
#define 常量名 常量值
const 数据类型 常量名=常量值;
第一种符号常量的定义形式称为“编译预处理”指令(凡是以“#”开头的均为预处理指令,如#include
、#define
等)。
第二种符号常量的定义形式是C++常量定义语句,代码清单2-1中定义的圆周率PI就是采用这种定义格式。常量定义的说明如图2-2所示。
图2-2 常量定义的说明
小知识
标识符就是用户编程时使用的各种名字。
关键字(keyword)又称保留字,是预先保留的标识符。每个C++关键字都有特殊的含义,用于声明函数、类型、命名空间和对象等。C++ 11标准中的关键字共有73个,都是C++中的关键单词,需要一边学习一边记忆。
变量的“灵活多变”是指变量中的数值可以随时改变。变量就像一个有名字的盒子如图2-3所示,程序随时都能存取和修改盒子中的数据,变量一经定义,只需要使用变量名,就可以操作它里面存储的数值。
图2-3 变量就像一个有名字的盒子
变量定义的说明如图2-4所示。
图2-4 变量定义的说明
例如:
int i,j=0,k=1; //定义i、j和k为整型变量并初始化j为0,k为1
char a,b,c; //定义a、b和c为字符变量
double x=1.0,y=2.3; //定义x和y为实型变量,并初始化x为1.0,y为2.3
常量名和变量名都是我们自己命名的标识符,那么标识符的命名规则是什么呢?
(1)标识符只能由字母、数字和下划线(“_”)组成,不能以数字开头。
(2)对于变量名的长度,不同的C++语言编译器有不同的规定,建议变量名的长度不要超过8个字符。
(3)严格区分标识符的大小写,即标识符a和标识符A是不同的标识符。
(4)自定义的标识符不能是关键字。
(5)在程序中用到的自定义标识符要“先定义后使用”,通常标识符不能重复定义。
(6)对标识符的命名,建议遵循“见名知义”的原则,即用一些有意义的单词作为变量名,可以用拼音加大驼峰表示法表示标识符。
例如:
判断下列哪个标识符为合法标识符。
month、_age、s2、 m.k.jack、a<=b、9y
解析:
month
、_age
、s2
为合法的标识符;m.k.jack
、a<=b
、9y
为不合法的标识符。
小知识
大驼峰表示法即标识符中每个拼音的首字母大写,这样标识符好像骆驼的驼峰一样,如表示人数的标识符可以写成“RenShu
”,表示圆面积的标识符可以写成“YuanMianJi
”。
样例输出:
C++提供了丰富的数据类型,如基本数据类型、自定义数据类型等。这里介绍的基本数据类型,包括逻辑型、字符型、整型和实型,其中实型又分单精度实型和双精度实型,它们都是系统定义的简单数据类型。常用的基本数据类型及其所占长度如图2-5所示。
图2-5 常用的基本数据类型及其所占长度
逻辑型又称为布尔型,用bool
表示。逻辑型的值只有两个:“真”和“假”。在程序中,如果运算结果为逻辑型,那么用“1”表示真,用“0”表示假;如果是运算过程中的逻辑型,那么用“非零”表示真,用“0”表示假。逻辑型的说明如表2-1所示。
表2-1 逻辑型的说明
数据类型 |
定义标识符 |
数值范围 |
占字节数 |
---|---|---|---|
逻辑型 |
|
真( |
1字节(8位) |
字符型通常表示的是一个加单引号的字符。存储内容是字符的ASCII编码。ASCII (美国国家标准信息交换代码)基本编码共有128个字符,如'a'、'A'和'0'等(注意:ASCII是区分大小写的)。在ASCII中,字符'A'的序号是65,字符'a'的序号是97,字符'0'的序号是48。基于字符型数据的这个特点,它可以和int变量一样进行加减运算。ASCII编码表(节选)如图2-6所示。
图2-6 ASCII编码表(节选)
小知识
在C++语言中,a
、'a'
和"a"
这三者含义是不同的。a
是标识符,可以表示一个变量名、常量名或函数名等;'a'
是一个字符常量,代表数字97(ASCII码);"a"
是一个字符串常量。可以用下面这个顺口溜记忆:“不带引号标识符,单引表示单字符,双引号内字符串,三者区别要明辨。”
在程序中,还有一种转义字符形式表示控制字符、特殊字符等。常用的转义字符如表2-2所示。
表2-2 常用的转义字符
转义字符 |
含 义 |
转义字符 |
含 义 |
---|---|---|---|
|
回车换行 |
|
单引号 |
|
跳到下一区域开始处,一个区域是4个字符 |
|
双引号 |
|
后退一格 |
|
一个反斜杠字符 |
|
空字符 |
整型是不带小数点的数字类型,如“123”是整数。在C++中,常用的整数类型主要有4种,如表2-3所示。其中最常用的整型是基本整型(int
)。
表2-3 常用整型说明
数据类型 |
定义标识符 |
数值范围 |
占字节数 |
---|---|---|---|
短整型 |
|
2字节(16位) |
-32768~32767 |
基本整型 |
|
4字节(32位) |
-2147483648~2147483647 |
长整型 |
|
4字节(32位) |
-2147483648~2147483647 |
超长整型 |
|
8字节(64位) |
-9223372036854775808~9223372036854775807 |
实型是带小数点的数字类型,如“123.0”“3.14”是实型数。常用的实型有单精度实型(float
)和双精度实型(double
),二者的区别主要是小数点后数值的位数不同,双精度实型小数点后的位数更多(即精度更高),如表2-4所示。
表2-4 实型说明
数据类型 |
定义标识符 |
数值范围 |
占字节数 |
小数点后有效位数 |
---|---|---|---|---|
单精度实型 |
|
-3.4E+38~3.4E+38 |
4字节(32位) |
6~7位 |
双精度实型 |
|
-1.7E+308~1.7E+308 |
8字节(64位) |
15~16位 |
格式: sizeof
(标识符)。
功能:用于返回数据类型占用内存字节数。
阅读代码清单2-2,写输出结果。
代码清单2-2
1. #include<iostream>
2. using namespace std;
3. int main(){
4. int a;
5. float b;
6. double c;
7. char d;
8. bool e;
9. cout<<sizeof(a)<<","<<sizeof(b)<<","<<sizeof(c)
10. <<","<<sizeof(d)<<","<<sizeof(e)<<endl;
11. return 0;
12. }
输出结果如下:
4,4,8,1,1
注意
sizeof
用于求类型所占内存字节数(即类型长度)而不是数据的位数。因此,在上例中,sizeof(a)
与sizeof(int)
是等效的,都是求整型的长度。
提示
上面示例中程序的第9行和第10行是一条语句,C++程序允许将一条语句分多行书写,也可以将多条语句写在一行。
本课的主要内容如下。
(1)通常程序(函数)包含4个部分(有些可省略)。
(2)数据分为常量和变量。
(3)常量和变量的定义。
(4)基本数据类型分为4种:逻辑型(bool
)、字符型(char
)、整型(int
)和实型(float/double
)。
(5)本章介绍的C++关键字有const
、bool
、char
、short
、int
、long
、float
、double
、sizeof
、true
和false
。
练习2-1 显示ASCII码。
输入一个a~z的小写字母并存入字符型变量ch
,再将其赋值给一个整型变量a
,输出其ASCII码。
输入:一行,一个小写字母。
输出:一行,输入字母对应的ASCII码。
样例输入:
b
样例输出:
98
练习2-2 大小写字母的转换。
将小写字母转换成大写字母,将大写字母转换成小写字母。
样例输入:
aA
样例输出:
A a
提示
因为所有小写字母的ASCII码值要比对应大写字母的ASCII码值大32,所以小写字母的ASCII码值减去32后便得到原来小写字母的大写形式。反之,大写字母的ASCII码值加上32后便得到原来大写字母的小写形式。
练习2-3 计算数据类型占用内存字节数。
定义int
、float
类型的变量各一个,并依次输出其数据类型占用内存字节数(单位:字节)。
输入:无。
输出:一行,两种类型各自占用内存字节数。
样例输入:无
4 4
提示
使用sizeof
运算符。