版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第1章
C++语言概述1.1计算机语言发展概述1.2C++语言的特点及其程序的开发过程1.3C++程序的结构1.4VisualC++6.0开发环境1.1计算机语言发展概述C++语言是当前应用范围很广泛的程序设计语言,它是C语言的继承、丰富和发展,它适合开发面向过程的程序,更适合开发面向对象的程序。本章节主要介绍面向过程和面向对象的概念,简单的C++程序以及VisualC++6.0集成开发环境。计算机语言是驱动计算机进行工作的语言。随着计算机应用领域的不断扩大,计算机语言也进一步完善和发展,其功能不断壮大,并朝着易读、易维护和易编程的方向发展。下一页返回1.1计算机语言发展概述1.1.1程序和程序设计语言计算机系统由硬件和软件两部分组成。一个计算机要充分发挥其功能,必须依靠硬件和软件的良好结合。计算机系统的硬件是构成计算机系统的物理实体,它包括组成计算机的各个部件及外部设备。计算机部件主要包括微处理器芯片,存储器芯片和输入、输出接口芯片等。能使计算机硬件系统顺利和有效工作的程序集合称为软件。计算机的软件系统可分为系统软件和应用软件。上一页下一页返回1.1计算机语言发展概述要使计算机解决各种问题就必须规定计算机执行的动作,计算机执行的动作就是计算机的指令,执行动作的集合构成计算机程序。抽象地说:指令是计算机可以识别的命令。程序是计算机完成某种功能的指令集合。目前计算机能直接识别的指令代码只有“0”和“1”。人通过计算机可以接收的语言来指挥计算机,目前计算机程序设计语言可以分为机器语言、汇编语言和高级语言。机器语言是用二进制指令表示的、计算机能够直接识别并执行的语言,执行速度快是计算机机器语言的主要优点。上一页下一页返回1.1计算机语言发展概述汇编语言是用一些易读、易记的助记符来表示机器指令,如ADD、CALL等。使用汇编语言编写程序提高了编程速度,也能够编写出质量较高的程序,检查、维护也比较容易。但汇编语言抽象层次低,程序员编写程序的工作量还是比较大。
高级语言屏蔽了机器语言的细节,提高了语言抽象层次。程序中采用了具有一定含义的、容易理解的执行语句。高级语言不受计算机类型的限制,通用性强,易于理解、学习和掌握。使用高级语言减少了的编程工作量。目前比较广泛使用的高级语言有BASIC、FORTRAN、PASCAL和C语言。而C++则是一个功能强大、应用广泛、面向过程和面向对象兼顾的程序设计语言。上一页下一页返回1.1计算机语言发展概述1.1.2结构化程序设计软件设计的主要工作就是设计问题求解的过程。早期的计算机主要用于数学计算,为了完成计算任务,必须设计或采用一个计算方法和解决问题的过程。
20世纪中期出现了结构化编程方法,提高了编程语言的层次。结构化数据、结构化语句以及数据和过程抽象等概念使程序更便于体现客观事物的结构和逻辑含义。结构化程序设计采用了模块分解、功能抽象以及自顶向下不断细划的方法,有效地将一个较复杂的程序设计任务分解成许多易于控制和处理的子任务,便于开发和维护。上一页下一页返回1.1计算机语言发展概述面向过程是程序设计的一种传统的方法,它把待解决的问题按功能划分为若干个相对独立的小问题,针对每个小问题编写相对独立的程序模块,并由主程序按解决问题的顺序组合为程序模块,进而形成完整的程序。这种面向过程的编程方法通过程序模块的调用关系来完成整个程序的功能。在问题比较复杂的情况下,模块之间的调用关系很容易变得复杂和混乱。调试和修改程序的难度比较大。当某一功能改变时,一点微小的变化都需要重新修改和调试程序。虽然结构化程序设计方法具有很多优点,但它仍然是一种面向过程的程序设计方法。它把数据和处理数据的过程分离为互相独立的实体,当数据改变时,所有相关的处理过程都要进行相应的修改。上一页下一页返回1.1计算机语言发展概述1.1.3面向对象程序设计
20世纪
90年代初开始出现了面向对象的程序设计方法。面向对象的程序设计方法把求解问题中所有的独立个体都看做不同的对象,与对象相关的数据和对数据操作的处理方法都放在一起,成为一个相互依存、不可分离的整体。面向对象的程序设计方法将具有共同特性的对象抽象出共同的属性而形成类。类中的数据一般只能用本类的方法进行处理。类通过简单的外部接口与外界发生联系。对象与对象之间通过消息进行通信。这样,程序模块间的关系就更为简单,程序模块的独立性、数据的安全性有了较好的保障。上一页下一页返回1.1计算机语言发展概述面向对象方法的基本原则是直接面对客观存在的事物进行软件开发,将人们在日常生活中习惯的思维方法和表达方法应用到软件开发中,使软件开发从过分专业化的方法、规则和技巧中回到直观的客观现实,回到人们通常的思维方法之中。上一页返回1.2C++语言的特点及其程序的开发过程C语言是从实验室走出来的程序设计语言,在结构化程序设计阶段起到了重要的作用。但在程序设计语言的发展过程中,面向对象的程序设计方法将代替面向过程的程序设计方法,其对应的程序设计语言也就应运而生,这就是C++语言。下一页返回1.2C++语言的特点及其程序的开发过程1.2.1C++语言的特点C++语言是在C语言基础上为支持面向对象的程序设计而研制的一个通用的程序设计语言。最初的C++称为“带类的C”,1983年正式命名为C++。C++的标准化工作从1989年开始,1994年制定了ANSIC++标准草案。现在普遍使用的是Microsoft公司的VisualC++6.0版本和Borland公司的C++Builder3.0及以上版本,它们都是在Windows操作系统环境下运行的可视化集成开发工具。上一页下一页返回1.2C++语言的特点及其程序的开发过程C++语言有如下特点:(1)类和数据封装:C++语言中的类是对问题空间的高度抽象和概括,是数据抽象及信息隐藏的工具。抽象的数据和相关的操作被封装在一个类中。对象可以被理解为特定类型的“变量”,对象之间可以通过发送和接收消息相互联系,接收消息的对象通过调用方法来实现相应的操作。(2)访问控制:类的成员包括公有、私有和保护成员,它们有不同的访问权限。声明为公有的成员,允许通过相应对象进行访问;私有成员只能由类的成员函数访问;保护成员可以由该类及其派生类的成员函数访问。通过将数据成员设置为不同的访问权限,实现了信息的隐藏。上一页下一页返回1.2C++语言的特点及其程序的开发过程(3)构造函数和析构函数:类可以包含一组构造函数和析构函数。构造函数是在创建一个对象时由系统自动调用该函数以完成对象数据成员的初始化工作。析构函数是在一个特定对象撤销时系统自动调用该函数以完成正常的清除工作。(4)对象和消息:对象是面向对象程序设计的基本元件。对象通过消息向其他对象发送要操作的信息,接收消息的对象根据消息的内容调用相应的函数。C++中的消息传递类似于C语言中的函数调用。上一页下一页返回1.2C++语言的特点及其程序的开发过程(5)函数和运算符重载:C++允许将已有的函数或运算符重新赋予新的含义,使得它们可以用于用户所希望的操作对象。运算符和函数的重载使得用户可以以更加自然的方式实现对对象的操作。(6)友元:友元是C++语言的又一个主要特性。通常类的私有成员禁止类外函数和类的直接访问,而友元机制允许有选择地突破这一限制。在类定义中声明非成员函数或其他类为该类的友元函数或友元类,这些友元就可以访问该类的私有和保护成员。上一页下一页返回1.2C++语言的特点及其程序的开发过程(7)继承性和派生类:在类的定义时,会出现多个类享有相似特征的情况,这时,不必在每个类中复制这些成员,可以通过定义一个包含它们共同成员的基类,然后通过类的继承,从基类派生出派生类。通过继承机制,为派生类增加新的操作和成员,改写基类的部分内容,得到更加适用的类。继承机制有力地支持了面向对象的程序设计思想。(8)多态性和虚函数:多态性是指一种语义多种含义。在C++中的虚函数支持动态联编,从而也支持了多态性。多态性允许在设计中使用高级的抽象,使得高层次代码只需要写一次,通过提供不同的底层服务来满足发展的需求,进而提高了代码的重用性。上一页下一页返回1.2C++语言的特点及其程序的开发过程1.2.2C++程序的开发过程C++语言程序开发的过程要经过源代码编辑、源代码编译和运行目标代码三个步骤。程序员根据问题求解的需要编制出源程序,在相应的编辑器上将其录入并假设该文件名为File.cpp。经过编译该文件后将生成对应的目标文件,其文件名为File.obj。File.obj文件是源程序的机器语言组成的目标代码,该文件还不是可执行文件,因为目标代码只是一个个的程序块,需要相互连接成为一个适应操作系统环境的程序整体。上一页下一页返回1.2C++语言的特点及其程序的开发过程连接程序将源代码程序生成的多个目标代码文件和系统提供的库文件中的有关代码全部连接在一起,生成一个可以执行的文件,其文件名为File.exe。执行File.exe文件,程序被执行后,一般会在屏幕上输出程序运行结果。用户可根据运行结果判断程序是否有错误。一个程序编写好后,在生成可执行文件之前需要改正编译和连接时出现的致命性错误或警告,最后才能生成没有错误的可执行文件。上一页返回1.3C++程序的结构1.3.1简单的C++程序【例1.1】C++程序示例:#include<iostream.h>intFindbig(intx,inty){returnx>y?x:y;}voidmain(){inta,b,c;cout<<"请输入a和b的值:";cin>>a>>b;c=Findbig(a,b);cout<<"a="<<a<<",b="<<b<<",其中较大值为"<<c<<endl;}假设运行该程序,从键盘上输入34和48两个整数,按回车键。下一页返回1.3C++程序的结构【例1.1】程序的运行结果如下:请输入a和b的值:3448<CR>
a=34,b=48,其中较大值为48该程序的功能是从计算机键盘上输入两个整数,并将这两个整数和其中较大的数显示在计算机屏幕上。上一页下一页返回1.3C++程序的结构在上述程序中cin表示标准输入设备键盘,“>>”是预定义的提取操作符。在一条输入语句中,可多次使用“<<”提取操作符,每一次都能够从键盘输入上提取数据为其右边的变量取得赋值。在键盘上输入多个数据时,必须用空白符(空格,制表符或回车键)分隔各数据。数据输入结束时按回车键。程序中cout表示标准输出设备显示器,“<<”是插入操作符,它表示向显示器输出(插入)数据。在一条输出语句中,也可以多次使用“<<”插入操作符。上一页下一页返回1.3C++程序的结构1.3.2C++程序的基本结构1.预处理命令C++预处理命令由“#”字符开头,C++提供了三类预处理命令:宏定义、文件包含和条件编译命令。文件包含预处理命令行以#include开头,在其后的尖括号内可以引用C++系统头文件或用户自定义的文件。2.输入/输出C++系统函数又叫标准函数或库函数。它是由C++语言系统本身为用户提供的一系列具有各种用途的函数的总称。在iostream.h文件中预定义了cin和cout流对象以及“>>”和“<<”操作符,使计算机能够根据这些流对象和操作符进行相应的操作。上一页下一页返回1.3C++程序的结构3.函数主函数main是C++程序执行的起始点,它由主函数头和主函数体组成。主函数头以voidmain()为标识。主函数体在其后的一对大括号内。main()前的void是函数返值类型标识符,它表示无返回值的函数,其小括号内还可以包含参数。函数体中第一条语句是变量定义语句,将a,b,c定义为整型变量;第二条语句是输出语句,将插入操作符“<<”后的字符串显示在屏幕上;第三条语句是输入语句,从键盘上输入两个整数分别赋值给变量a和b;第四条语句是赋值语句,上一页下一页返回1.3C++程序的结构利用变量a和b的值调用Findbig()函数并将返值赋给变量c;第五条语句是输出语句,依次将每个插入操作符<<后的数据项显示在屏幕上。函数由函数头和函数体组成。源程序中的Findbig()是函数名。主函数调用函数时,使用函数名。函数头Findbig()前的int表示该函数的返值为整型数,Findbig后面括号内是函数的形式参数。函数体的内容安排在函数头下面的一对大括号内。上一页下一页返回1.3C++程序的结构4.语句语句是组成程序的基本单元。函数由若干条语句构成,其中空函数是没有函数体的。语句由单词组成,单词之间用空格符分隔。C++程序中的语句以“;”结束,“;”既是语句的组成部分又是语句的分隔符。在C++语句中,表达式语句使用较多。表达式语句由一个表达式后面加分号组成。一般而言,一个表达式加上分号就构成一个语句。只有分号而没有表达式的语句称为空语句。除了表达式语句和空语句之外,C++还有选择结构语句、循环语句及转移控制语句等。5.变量多数程序都需要声明和使用变量。变量的类型很多,这些将在后面的章节中予以介绍。上一页下一页返回1.3C++程序的结构1.3.3C++程序的书写格式和注释1.C++程序的书写格式C++程序的书写格式基本上与C语言程序书写格式相同,其基本原则为:一行一般写一条语句,较短的语句一行可以写多个。长语句可以一条写多行。分行的原则是不能将一个单词分开。用双引号括起来的字符串最好不要分开,如果一定要分开,有的编译系统要求在行的末尾加续行符“\”。C++程序在书写时要尽量提高可读性,因此,采用适当的缩进格式书写是常用的方法。表示同一类事物的语句行要对齐。例如:一个循环的循环体中的各个语句要对齐;同一个选择语句的成分子句也要对齐等。上一页下一页返回1.3C++程序的结构2.C++程序的注释注释在程序中的作用是对程序进行注解和说明。在源程序中加入注释,帮助我们对程序功能的理解,增强了程序的可读性。编译程序在对源程序进行编译时会自动忽略注释部分。因此注释部分对于程序的执行功能没有任何作用。在源程序的任何地方都可加入注释,但多数情况下是在一个语句行的结尾或单独一行进行注释(称为注释行)。C++有两种加注释的方法:其一是使用双斜线“//”,从它开始到该语句行结束的所有内容都被看做为注释;其二是在“/*”和“*/”之内的所有内容被看做注释。这是一种沿用C语言的注释方法。上一页返回1.4VisualC++6.0开发环境目前C++有多种版本,但使用较为普遍的是VisualC++6.0。VisualC++6.0是美国Microsoft公司研制开发的可视化C++语言,它是一个集C++程序源程序编辑、编译、连接、调试、运行和在线帮助等功能于一体的软件开发工具。下面将简单介绍VisualC++6.0开发环境,使初学者掌握应用VisualC++集成环境进行C++程序的编辑、编译、连接和运行一个简单程序的全过程。下一页返回1.4VisualC++6.0开发环境1.4.1VisualC++6.0集成开发环境简介VisualC++是Microsoft公司提供的在Windows环境下应用程序开发的C/C++编译器,它是MicrosoftVisualStudio套件的一个组成部分。相比其他的编程工具而言,VisualC++在提供可视化的编程方法同时,也适应编写直接对系统进行底层操作的程序。随VisualC++一起提供的Microsoft基础类库(MicrosoftFoundationClassLibrary,MFC)对Windows2000/NT/XP所用的Win32应用程序接口(Win32ApplicationProgrammingInterface)进行了封装,这使得Windows2000/NT/XP上一页下一页返回1.4VisualC++6.0开发环境应用程序的开发可以使用完全的面向对象的方法进行,从而能够大量地节省应用程序的开发周期,降低开发成本,也使Windows程序员从大量的繁杂的劳动中解脱出来VisualC++软件包含有许多单独的组件,例如编辑器、编译器、连接器、生成实用程序、调试器以及各种各样为开发MicrosoftWindows下的C/C++程序而设计的工具。VisualStudio把所有的VisualC++工具结合在一起,集成为一个整体,通过一个由窗口、对话框、菜单、工具栏、快捷键等组成的完整系统,就可以观察和控制整个开发过程。该环境就是VisualC++中所能“看见”的所有东西,一般情况下,术语VisualC++就是指这个产品,又是指它的开发环境。上一页下一页返回1.4VisualC++6.0开发环境VisualC++6.0集成开发环境的操作界面如图1−1所示。最顶行是窗口标题栏,将显示当前编辑的程序文件名。第二行是菜单栏,菜单栏中的每一项都对应一个下拉菜单;下拉菜单中的每一项都是一条操作命令,具有一定的操作功能。第三行是按钮工具栏,单击其中各项,可以完成相应的规定操作。屏幕中间的左半区是工作区窗口,右半区是程序编辑窗口。屏幕的最下部是状态输出窗口。上一页下一页返回1.4VisualC++6.0开发环境1.4.2VisualC++6.0程序的开发流程用C++语言编写好一个完整的程序后,要使程序达到预期的功能,要有如下四个步骤:第一步要上机编辑源程序,文件扩展名为.cpp,第二步是编译源程序生成目标代码文件,目标代码文件名与源程序文件名相同,其扩展名为.obj。第三步运行连接程序,将目标代码文件与C++的库文件相连接生成可执行文件,可执行文件名与源程序的文件名相同,扩展名为.exe。第四步运行可执行文件,调试检查程序中的错误及验证能否实现预期的功能。第一次使用VisualC++6.0集成开发环境之前,最好建立一个专用子目录。该子目录专门用于保存C++源程序、目标文件、可执行文件以及系统自动生成的其他文件。上一页下一页返回1.4VisualC++6.0开发环境若在计算机上安装好了VisualC++6.0,应用该开发环境开发C++程序步骤如下:(1)启动VisualC++6.0集成开发环境。单击桌面左下角的“开始”→“程序”→“MicrosoftVisualStudio6.0”→“MicrosoftVisualC++6.0”命令,即可进入VisualC++6.0集成开发环境。(2)创建一个工程。单击“文件”→“新建”命令,弹出新建对话框。单击“工程”选项卡(见图1−2),在“工程”列表中选择“Win32ConsoleApplication”上一页下一页返回1.4VisualC++6.0开发环境(Win32控制台应用程序),在“工程”文本框输入工程名称,再在“位置”文本框中指定文件路径;单击“确定”按钮。在弹出的“Win32ConsoleApplication-Step1of1”对话框中选择“Anemptyproject”选项(见图1−3),然后单击“完成”按钮。再在“NewProjectInformation”对话框(见图1−4)中单击“确定”按钮,即完成了对一个工程的创建工作(见图1−5)。上一页下一页返回1.4VisualC++6.0开发环境(3)创建编辑C++源程序。单击菜单“工程”→“添加工程”→“新建”命令,在弹出的“新建”对话框的文件列表中选择“C++SourceFile”(见图1−6),在“文件”文本框中输入文件名,单击“确定”按钮,完成新建C++源程序文件工作,进入一个编辑C++源程序的窗口。(4)编辑C++源程序文件的内容。在文件编辑窗口中输入源程序代码,输入完程序代码后单击菜单“文件”→“保存”命令保存已经输入的源程序文件(见图1−7)。上一页下一页返回1.4VisualC++6.0开发环境(5)编译程序源文件。源程序文件编辑完成后,要将其编译成目标文件。编译时,在VisualC++6.0集成开发环境的菜单栏中单击“编译”→“编译”命令,即可对编辑窗口中的源程序文件进行编译,生成与源文件名相同、扩展名为.obj的目标文件。编译一个源程序的过程是:首先要处理预处理命令行,将文件包含命令所指定的头文件用实际的头文件内容代替,注意,使用#include包含预处理命令也可以包含.cpp的程序文件;然后删除所有的注释内容,用一个空格取代;再按行从上到下地进行语法分析;最后生成对应的目标文件。上一页下一页返回1.4VisualC++6.0开发环境编译时检查出的错误分为两类:一类是错误“Error”,也称为致命性错误,该类错误必须进行修改,否则不能进行下一步的处理;另一类是警告性错误“Warning”,它一般不影响进入下一步处理,但也应将其纠正。在编译完一个源程序文件后,将在状态输出窗口显示各类错误的信息,根据错误信息要进一步修改、调试程序,直到编译后的状态输出窗口显示“0error(s)0warning(s)”信息,表示源程序中没有任何错误。在编译输入多个源程序文件时,它们的文件名将出现在菜单栏上的“窗口”菜单项的下拉菜单的底部。选择其中的任何一个文件名即可使它成为当前的编辑文件,对它进行编辑和编译。上一页下一页返回1.4VisualC++6.0开发环境(6)连接目标文件。连接程序将一个程序中的主目标文件与其他目标文件和相关的库函数目标文件连接起来,形成一个可执行文件。具体连接操作是:单击菜单“编译”→“构件”命令即可。如果连接过程没有发现任何错误,这表示连接成功。此时,在连接状态窗口显示“0error(s),0warning(s)”信息。如果连接过程中发现有错误,连接状态输出窗口将显示发生错误的文件、错误所在的行号和出错的原因。根据这些信息,修改有关程序文件,再重新进行编译和连接,直至所有连接错误为零为止。上一页下一页返回1.4VisualC++6.0开发环境(7)运行可执行文件。运行程序就是执行对源程序编译和连接而产生的可执行文件。具体操作是:单击菜单“编译”→“执行”命令即可。程序运行时将自动打开一个输出窗口,并使显示光标处于该窗口的左上角位置。每次执行cout语句时,要输出的内容将在当前的光标位置上显示出来,然后显示光标自动后移;每次执行cin语句时,从键盘输入的内容也在当前的光标位置上显示出来,然后显示光标自动后移。程序运行结束,将在该窗口显示“Pressanykeytocontinue”提示信息,此时按下任一键后将关闭窗口,重新回到VisualC++6.0操作界面。上一页返回图1−1VisualC++6.0操作界面窗口返回图1−2“新建”对话框返回图1−3创建控制台应用程序第一步返回图1−4新建工程信息窗口返回图1−5创建工程窗口返回图1−6添加新的源程序文件返回图1−7VisualC++源程序开发窗口返回第2章数据类型、运算符及表达式2.1C++语言的基本词法2.2基本数据类型2.3运算符与表达式2.4C++运算符的优先级和结合性2.5数据类型的转换2.1C++语言的基本词法2.1.1C++的字符集字符是构成C++语言的最基本元素。用C++语言编写程序,除了字符型数据外,其他所有成分都是由字符集中的字符构成。C++语言的字符集由以下字符构成:英文字母(52个):A~Z,a~z。数字字符(10个):0~9。特殊字符(30个):~、!、#、%、^、&、*、(、)、−、_、+、=、{、}、[、]、|、\、:、;、"、′、<、>、,、.、/、?、空格下一页返回2.1C++语言的基本词法2.1.2C++的标识符标识符是用户在程序设计中给特定对象起的名字。在C++程序设计中,需要由用户定义的标识符有变量、对象、符号常量、用户定义的数据类型、函数名字等。C++语言标识符的构成规则如下:由英文字母、下画线“_”和数字符号组成的一串字符;以英文字母或下画线“_”开始;大写字母和小写字母代表不同的标识符;不能用C++语言的保留字。标识符的字符数可以任意,但只有前32个字符有效。通常,一个标识符由1~32个字符组成。上一页下一页返回2.1C++语言的基本词法2.1.3C++的保留字保留字是C++系统预定义的、用英文小写字母组成的特定单词。每个保留字都被C++系统赋予了特定的含义,具有相应的功能。编程时不能将保留字用作函数名、变量名、类名和对象名等。在预处理命令中,使用的命令关键字有include,define,ifdef和ifndef等。这些命令关键字虽然不归类于保留字,但编程时要将它们看作C++保留字,不要将它们用作其他用途,以免引起混乱。上一页返回2.2基本数据类型数据是记录概念和事物的符号表示。记录中国人的姓名用汉字表示,记录人的年龄用十进制数表示,记录人的体重用实数表示。由这些记录得到的姓名、年龄和体重都叫数据。根据数据性质的不同,可以将数据分为不同的类型。下一页返回2.2基本数据类型2.2.1C++的基本数据类型在C++语言中,每一种数据类型都对应着唯一的类型关键字、类型长度和值域范围。C++的基本数据类型如表2−1所示。、C++的基本数据类型有bool(布尔型,又称逻辑型)、char(字符型)、int(整型)、flort(浮点型,表示实数)和double(双精度浮点型,简称双精度型)。char型从本质上说也是整数类型,它是长度为一个字节的整数,存放字符的ASCII码。保留字short、long、signed和unsigned被称作修饰符。上一页下一页返回2.2基本数据类型2.2.2常量在程序执行的过程中,根据数据值的变化情况可将数据分为常量和变量。无论是常量还是变量,都应有确定的数据类型。常量是指在程序运行的整个过程中其值始终不改变的量。常量又可以分为字面常量和符号常量两种。下面介绍整型常量、实型常量、字符常量、字符串常量和布尔常量等字面常量。上一页下一页返回2.2基本数据类型1.整型常量整型常量是以字面形式出现的整数。它有十进制、八进制和十六进制3种表示方法。十进制整型常量由正号“+”或负号“−”开始,接着由首位为非0的若干个十进制数字所组成。正数前面的正号可以省略。2.实型常量实型常量是以十进制方式出现的实数,它有一般形式和指数形式两种表示方式。上一页下一页返回2.2基本数据类型3.字符常量字符常量是用单引号括起来的一个字符,如'f','a','?','$'等。有一些字符是不可显示字符,也无法通过键盘输入,如响铃、换行、回车等。C++提供了一种称为转义序列的表示方法来表示这些字符。表2−2列出C++语言预定义的转义序列。上一页下一页返回2.2基本数据类型4.字符串常量字符串常量是用一对双引号括起来的字符序列。例如:"asdf","yes"都是字符串常量。由于双引号是字符串的界限符,字符串中的双引号要用转义序列表示。表示pleaseenter“yes”字or“no”的字符串为:"pleaseenter\"yes\"or\"no\""。符串与字符在内存中存放的形式是不同的。字符串在内存中存储的形式是:按字符串中字符的排列次序,顺序存储其ASCII码,每个字符占一个字节,并在字符串尾加'\0'作为结尾标记。上一页下一页返回2.2基本数据类型5.布尔常量布尔常量又称逻辑常量。布尔常量只有两个值:0表示逻辑假,用常量false表示;1表示逻辑真,用常量true表示。上一页下一页返回2.2基本数据类型2.2.3变量在程序执行过程中其值可以变化的量称为变量。和常量一样,每一个变量也具有相应的数据类型。变量在使用之前需要首先声明其类型和名称。变量名要符合标识符构成的规则。在同一语句中可以声明多个同一类型的变量。声明了变量的类型和变量名后,就可以用赋值语句对变量进行赋值。在程序运行时,系统将给声明过的变量分配内存空间,用以存放数据。因此,变量名也就是相应内存单元的名字。在声明一个变量名的同时,也可以对它赋初值,这称为变量初始化。上一页下一页返回2.2基本数据类型使用符号常量,可提高程序的可读性。另外,程序中如果多次使用某一常量时,当要对该常量修改的情况下,要修改多处常量的值,这往往顾此失彼,容易引起错误。使用符号常量时,只需修改声明时的赋初值语句,从而避免了因修改多处常量带来数据的不一致性。整型变量可分为int,shortint,longint和unsignedint,unsignedshort,unsignedlong等类型,整型常量赋值给上述几种类型的整型变量时必须注意数据类型的匹配。上一页下一页返回2.2基本数据类型注意:(1)一个短整型常量其值在32768~32767范围内,可以赋值给shortint型变量。(2)一个整型常量其值超过了上述范围,而在2147483648~2147483647范围之内,可以将它赋值给一个int或longint型变量。(3)常量中无unsigned类型。但一个非负值的整型常量可以赋值给unsigned型的整型变量,只要它的数据范围不超过变量数值可以表示的范围即可。上一页下一页返回2.2基本数据类型对整型变量定义时需要注意:(1)变量定义一般要放于程序块的首部,以免在编译中出现变量未定义的错误。变量定义的位置决定了被定义变量的作用域和生命期。但是,C++语言允许随时应用变量随时定义,一般提倡在程序块首先定义的风格。(2)描述数据类型的关键字与被定义的变量之间起码要有一个以上的空格隔开,这样做的目的一是便于阅读程序,二是便于编译系统识别。上一页下一页返回2.2基本数据类型(3)多个变量是同一数据类型时,可以用一个数据类型关键字进行定义,但要注意,变量间要用逗号隔开,结尾要用分号结束。(4)变量可以以任意顺序进行定义,不必与它们在代码块中出现的顺序相对应。(5)在定义shortint型,longint型和unsignedint型变量时,可以只用short,long和unsigned保留字进行定义。上一页返回2.3运算符与表达式2.3.1运算符与表达式概述运算符又称为操作符,它是对数据进行运算的符号,参与运算的数据称为操作数。由操作数和操作符连接而成的式子称为表达式。一个运算符可以是一个字符,也可以由两个或三个字符所组成,还有的运算符是C++的保留字。例如:赋值号“=”是一个字符,不等于号“!=”是两个字符,左移赋值号“<<=”是三个字符,测试类型长度运算符sizeof则是一个保留字。上一页下一页返回2.3运算符与表达式按运算符要求操作数的多少,可将运算符分为单目(或一元)运算符、双目(或二元)运算符和三目(或三元)运算符三类。单目运算符一般位于操作数之前,如取x的负值为−x。双目运算符一般位于两个操作符之间,如计算两数a,b之积是a*b。三目运算符仅有一个,又称为条件运算符。它含有两个字符将三个操作数分隔开。每一种运算符都有一定的优先级,用来决定它在表达式中的运算次序。当一个表达式中包含多个运算符时,先进行优先级高的运算符的运算。当多个同一优先级的运算时,运算顺序由运算符的结合性确定。C++语言中有算术运算、赋值运算、关系运算、逻辑运算、位运算以及其他运算。下一页返回2.3运算符与表达式2.3.2赋值运算符及表达式C++的赋值运算包括简单赋值运算符和复合赋值运算符。C++的简单赋值运算符为“=”。赋值运算是将等号右边表达式的值赋给等号左边的变量。在一个赋值表达式中可以使用多个赋值运算符实现给多个变量赋值的功能。C++的复合赋值运算符有10个:+=、−=、*=、/=、%=、<<=、>>=、&=、^=和|=。其中前5个是算术运算符与赋值运算复合而成,后5个是位运算与赋值运算复合而成。上一页下一页返回2.3运算符与表达式复合赋值运算是把复合运算符右边的表达式的值同左边变量的值进行相应的算术运算或位运算后,再将这个运算结果赋给左边的变量。例如,x+=3是将x的值加3后再赋值给变量x,它相当于x=x+3表达式的功能。下面再举几例说明复合赋值运算:x*=y+8//等价于x=x*(y+8)a+=a-=a*a//等价于a=a+(a-a*a)(x+=5)*2//等价于(x=x+5)*2上一页下一页返回2.3运算符与表达式2.3.3算术运算符及表达式C++中的算术运算符包括基本算术运算符和增一、减一运算符。基本算术运算符有:加(+)、减(−)、乘(*)、除(/)、取余(%)和取负值(−)。这些基本算术运算符的意义与数学中相应运算的意义是一致的。其中取负值是一元运算,其他均是二元运算。在运算优先级方面,取负值优先级最高,乘、除和取余运算符次之,加、减运算符的优先级最低。同级运算的结合性都是从左到右。上一页下一页返回2.3运算符与表达式2.3.4关系运算符及表达式C++的关系运算有6个:小于(<)、小于等于(<=)、大于(>)、大于等于(>=)、等于(==)和不等于(!=)。6个关系运算都是双目运算,用来比较两个操作数的关系,运算结果均为逻辑值假(false)或真(true)。前4个关系运算符的优先级相同,且高于后2个相同优先级的关系运算符。用关系运算符将两个表达式连接起来构成关系表达式。当关系表达式成立时结果为逻辑真(true),否则为逻辑假(false)。上一页下一页返回2.3运算符与表达式2.3.5逻辑运算符及表达式C++有三个逻辑运算符:逻辑非(!)、逻辑与(&&)和逻辑或(||)。逻辑非的优先级最高,逻辑与次之,逻辑或最低。逻辑非是单目运算,逻辑与和逻辑或是双目运算。逻辑运算的值是0或1,若它们不是一个逻辑值,则对于非0值首先转换为逻辑值1,对0值转换为逻辑0。“!”运算符的作用是将操作数取反。如果操作数a的值是非0,则!a的值为0;反之亦然。“&&”运算符是求两个操作数的逻辑与。上一页下一页返回2.3运算符与表达式只有当两个操作数的值都是非0时,与运算的结果才是1,其他情况下与运算的结果均为0。“||”运算符是求两个操作数的逻辑或。只有当两个操作数的值都是0时,或运算的结果才是0,其他情况下或运算的结果为1。逻辑非、与、或的运算规则如表2−3所示。上一页下一页返回2.3运算符与表达式2.3.6位运算符及表达式C++中提供了6个位运算符:按位与(&)、按位或(|)、按位异或(^)、按位取反(~)、左移(<<)和右移(>>)。一般高级语言处理数据的最小单位是字节,C++继承了C语言的优点,能够对数据按二进制位进行操作。(1)“&”运算是将两个操作数对应的每一位分别进行逻辑与运算。(2)“|”运算是将两个操作数对应的每一位分别进行逻辑或操作。上一页下一页返回2.3运算符与表达式(3)“^”运算是将两个操作数对应的每一位进行异或操作。异或运算的原则为:若对应位相同,则该位结果是0(4)“~”运算是一元运算,其作用是将一个操作数的每一位取反。,若对应位不同,则该位结果为1。上一页下一页返回2.3运算符与表达式2.3.7移位运算符及表达式C++语言提供了与汇编语言中的移位操作相类似的移位运算符。移位运算符有:右移位运算符(>>),左移位运算符(<<)。它们的优先级是第5级,结合性是从左至右结合。移位运算符是由两个大于号和两个小于号构成。其尖头所指的方向表示移位运算的方向——右移位或左移位运算。移位运算也是按位(bit)进行操作的。移位运算符都是双目运算符。移位运算符左边的表达式是被移位的操作数,其右边表达式的值表示移位的位数。由移位运算符构成的表达式是移位表达式。上一页下一页返回2.3运算符与表达式移位运算符有如下要求:(1)移位运算表达式中的两个操作数都必须具有整型或字符型数据类型,移位运算符右边的表达式的值不能是负数。(2)向左移位时,最左边的位被舍弃掉,右边腾出的位用0填补。上一页下一页返回2.3运算符与表达式2.3.8增1、减1运算符及表达式为了方便用户进行某些单一的增1、减1操作,C++语言中提供了类似于汇编语言中的加1、减1指令的加1运算符(++)和减1运算符(−−)。增1、减1运算符是单目运算符,其操作数仅限定为左值表达式。其优先级是第2级;其结合性是从右至左结合。由增1、减1运算符和左值表达式构成的表达式为增1、减1表达式。上一页下一页返回2.3运算符与表达式使用增1、减1运算符需注意:(1)增1、减1运算的操作对象只许是左值表达式——即只允许是变量,而不允许是常量或表达式、函数调用等。这一点很易理解,因为增1、减1操作是将操作对象的值加1或减1后送回原存储单元,而常量、表达式等没有对应的存储单元。(2)增1、减1运算符的操作数通常是整型或字符型,因为上述类型的数据操作后其值是确定的;而实型数操作前后并不能确保其差的绝对值是1。上一页下一页返回2.3运算符与表达式(3)增1、减1操作又分前置和后置操作两类,它们有质的区别。(4)增1、减1运算是除了第1级外优先级最高的。但是后置操作则要注意:先引用其值参加运算,再做后置操作。(5)注意增1、减1操作的副作用。所谓“副作用”是指某些变量依赖于表达式的计值方法而发生的改变。上一页下一页返回2.3运算符与表达式2.3.9其他运算符及表达式1.逗号运算符“,”运算符又称顺序运算符,它用逗号分开若干个表达式。计算时,按照每个子表达式从左到右的先后次序依次计算它们的值,最后一个表达式的值是整个逗号运算表达式的值。逗号运算符主要用于下述几种场合:(1)在变量定义时,用于分隔同数据类型的变量。(2)在函数的参数表中,用于分隔各个参数。上一页下一页返回2.3运算符与表达式(3)在只允许出现一个表达式的上下文中,用于分隔出两个或更多个表达式。这些表达式按逗号的结合规则从左向右依次计值,最后结果的数据类型和值是最右边的表达式的数据类型和值。其实,在许多情况下,使用逗号表达式的目的只是想分别得到各个表达式的值,而并非一定需要得到和使用整个逗号表达式的值。逗号表达式也常用于循环语句中分隔各个表达式。上一页下一页返回2.3运算符与表达式2.检测类型长度运算符“sizeof”是检测类型长度运算符,用于计算某种类型对象在内存中所占的字节数。其使用格式为:sizeof(类型名或表达式)3.类型转换运算符类型转换运算符又称为数据类型强制转换运算,它将一种类型的数据转换为另一种类型的数据。其格式为:数据类型(表达式)或:(数据类型)表达式或:(数据类型)(表达式)上一页下一页返回2.3运算符与表达式4.圆括号运算符圆括号运算能够改变运算的优先级,使括号内的运算优先进行。在编程过程中,使用运算符比较多,往往不容易记住每一个运算符的优先级。为了使表达式中每一个运算次序能够按所希望的次序进行,可以使用圆括号进行限定。即使圆括号可能是多余的也没关系,因为它能够使表达式更清晰,提高了程序的可读性。上一页返回2.4C++运算符的优先级和结合性所谓运算符的优先级就是一个运算符在一个表达式中运算的先后次序。C++语言的优先级可以分为从最高级的1级到最低级的15级。在一个表达式中具有多个同优先级运算符时,该怎样进行运算,这就是结合性问题。所谓的结合性就是运算符与运算项的结合方向。结合性有从左到右的左结合,也有从右到左的右结合。返回2.5数据类型的转换C++语言是强类型语言。对于每一个操作,C++系统都要做类型检查。对于类型不符合的,或产生错误信息,或做类型转换。C++语言的数据类型转换可以分为自动转换和强制转换。2.5.1数据类型的自动转换数据类型的自动转换又可以分为算术转换和赋值转换。所谓算术转换就是在算术表达式进行运算时,系统自动按算术转换的规则进行转换。下一页返回2.5数据类型的转换1.数据类型的算术转换C++语言的算术转换允许短数据类型的值自动转换到长数据类型的值。其转换规则为:(char或short)opint→int(char或short或int)oplong→long(char或short或int或long)opfloat→float(char或short或int或long或float)opdouble→doublecharopint→int其中op可以是“=”“+”、“−”、“*”、“/”等运算符。上一页下一页返回2.5数据类型的转换2.数据类型的赋值转换赋值转换就是在C++表达式进行赋值运算时所发生的数据类型的转换。C++语言的赋值转换规则为:以赋值表达式左边变量的精度为准。若赋值表达式右边的数据精度低于左边数据精度时则自动转换为赋值表达式左边的数据精度;若赋值表达式右边的数据精度高于左边数据精度时也将自动转换为赋值表达式左边的数据精度,但要损失精度。返回上一页下一页2.5数据类型的转换2.5.2数据类型的强制转换数据类型的强制转换的一般格式是:(数据类型)变量名或表达式;如果一定要把一个长数据类型的值转换到短数据类型的值,或者在不直接可比的类型之间进行转换,那就要做强制类型转换(casting)这种使用可能会导致溢出或精度下降。比如从int转换到char仅保持int整数的最低8位。返回上一页表2−1C++的基本数据类型返回下一页表2−1C++的基本数据类型(续)返回上一页表2−2C++预定义的转义序列下一页返回表2−2C++预定义的转义序列(续)上一页返回表2−3逻辑运算真值表返回第3章控制语句3.1程序设计概述3.2数据的输出、输入及顺序结构程序设计3.3选择控制语句3.4循环控制语句3.5其他控制语句3.1程序设计概述3.1.1程序设计的基本概念一般来讲,程序是语句的集合。一个程序应包含以下两个方面的内容:其一是对数据的描述,在程序中要指定数据的类型和数据的组织形式,即数据结构(Datastructure);其二是对操作的描述,即操作步骤,也就是算法(algorithm)。数据是操作的对象,操作的目的是对数据进行加工处理,以得到预期的结果。作为程序设计人员,必须认真考虑、设计数据结构和操作步骤。下一页返回3.1程序设计概述著名的计算机科学家沃思(NikiklausWirth)提出一个公式:程序=数据结构+算法实际上,一个程序除了以上两个主要因素之外,还应当采用结构化程序设计方法进行程序设计,并且用某一种算法语言来实现。因此,程序也可以表示为:程序=数据结构+算法+程序设计方法+语言工具和环境上一页下一页返回3.1程序设计概述算法是指为解决某个特定问题而采取的确定且有限的步骤。一个算法包含有如下特点:(1)有穷性。一个算法应包括有限个操作步骤。也就是说,在执行若干个操作步骤之后,算法将结束,而且每一步都在合理的时间内完成。(2)确定性。算法中每一条语句必须有确切的含义,不能有二义性,对于相同的输入必能得出相同的执行结果。(3)有效性。算法的每一步都能有效地执行,只要有一个不可执行的操作,该算法即无效。上一页返回下一页3.1程序设计概述(4)有零个或多个输入。在计算机上实现的算法是用来处理数据对象的,在大多数情况下,这些数据对象需要通过输入来得到。(5)有一个或多个输出。算法的目的是为了求“解”,只有通过输出才能得到。结构化程序设计方法是程序设计发展历史上的一个进步,结构化程序设计强调的是程序设计风格和程序结构的规范化风格。结构化程序设计方法利于程序的编写、阅读、修改和维护,减少了程序出错的概率,提高了程序的可靠性,保证了程序的质量,是程序设计发展史上的一个进步。下一页返回上一页3.1程序设计概述3.1.2N-S图简介比较流行的算法描述图是流程图,由流程图来描述算法,形象直观,简单方便,但是这种流程图对流程线的走向没有限制,在描述复杂算法时费时费力且不易阅读。随着结构化程序设计方法的出现,1973年美国学者Nassi和Shneiderman提出了一种新的描述程序的图形方式。这种图形方式完全去掉了流程线,算法的每一步都用一个矩形框描述,把一个个矩形框按执行的次序连接起来就是一个完整的算法描述图。这种流程图用两个学者名字的第一个英文字母命名,称为N−S图。N−S图由图3−1所示一些单元组成。上一页下一页返回3.1程序设计概述(1)顺序结构框:用图3−1(a)表示,A框和B框构成一个顺序结构,其中A框或B框内部也可以是一个顺序或其它结构。(2)选择结构框:用图3−1(b)表示,当p条件成立时执行A操作,否则执行B操作,图3−1(b)是一个整体,代表一个基本结构。它们是两种操作只执行其中的一种操作,执行该操作后将执行本选择结构的后继语句。上一页下一页返回3.1程序设计概述(3)循环结构框:当型循环结构如图3−1(c)所示,表示当p条件成立时,将反复执行循环体A操作,直到p条件不成立时为止。直到型循环结构如图3−1(d)所示,表示在p条件不成立时执行循环体A,直到p条件成立时退出循环。注意:直到型循环结构与C/C++语言中do~while语句的逻辑关系有所不同。上一页下一页返回3.1程序设计概述结构化程序设计方法的基本思想是:把一个复杂问题的求解过程分阶段进行,每个阶段处理的问题都控制在人们容易理解和处理的范围之内。概括地说,就是“自顶向下、逐步细化、模块化设计和结构化编码”。结构化程序设计的优点是结构清晰,层次分明,易于实现。随着程序设计的大型化和工厂化的需求,其缺点也越来越明显:首先是生产效率低下,其次是软件代码的重用性程度低,再次是软件的维护难度大等。针对结构化程序设计的缺点,人们又提出了面向对象的程序设计方法。尽管C++语言是面向对象的程序设计语言,但在一些具体程序中则还是面向过程的,通常采用结构化的程序设计方法,这也就是面向对象语言都讲授面向过程程序设计方法的原因。上一页下一页返回3.1程序设计概述3.1.3C++语句的分类句子是人们表达思想的基本单位,程序语句是计算机程序中的基本功能单元。程序中的任何一个语句都意味着完成一个任务而进行的某种处理动作。最简单的语句可能仅由一个和几个关键字构成,而复杂的语句可能由包含有若干个子语句,有时甚至可能由几行构成上一页下一页返回3.1程序设计概述C++程序由若干语句组成,这些语句可以分为四类:1.说明语句程序中所有由程序员给出的名字标识符,包括变量名、常量名、对象名、类名、类型名、函数名、参数名等都要在使用之前进行说明或定义。一般来讲,C++程序中的说明语句并不是单纯说明,也往往包含创建和初始化等工作。2.表达式语句表达式语句又称为处理语句。它是程序中要求计算机对数据进行处理或操作的语句。在一般语言中,有陈述句和祈使句。说明语句就是陈述句,表达式语句就是祈使句。上一页下一页返回3.1程序设计概述3.控制语句一般计算机完成的任务都复杂而多变,很少有程序可以按顺序完成一步、二步、三步,……就能达到目的的情况。控制语句就是在程序中用来控制语句执行次序的,它们是程序设计中不可缺少的语句。C++语言的控制语句如图3−2所示。4.复合语句和空语句若干语句由分隔符“{”和“}”括起来组成为一个语句,这种结构称之为复合语句。严格地说,复合语句并不是独立的一类语句,所以该语句又称为“语句块”或块语句。复合语句可以出现在程序的任何位置上,其中主要作为函数体、循环体、if语句的成分子句和switch语句的成分子句等。上一页返回3.2数据的输出、输入及顺序结构程序设计3.2.1数据的输出“<<”是预定义的插入操作符,作用在流类对象cout上便可以实现一般的屏幕输出。其格式为:cout<<表达式<<表达式<<…;在输出语句中,可以连续多个插入运算符,输出多个数据项。在插入操作符后面可以写复杂的表达式,系统会自动计算出表达式的值并将其输出。下一页返回3.2数据的输出、输入及顺序结构程序设计3.2.2数据的输入“>>”是预定义的提取操作符,一般的键盘输入是将提取操作符作用在流类对象cin上,其格式为:cin>>左值表达式>>左值表达式>>…;在输入语句中,提取操作符可以连续写多个,每个后面写一个表达式,该表达式通常是用于存放输入值的变量。在有些情况下,程序需要以八进制和十六进制数的形式输出。C++提供了简单的实现方法:只要在输出流中插入操纵符dec(十进制)、oct(八进制)或hex(十六进制)即可。上一页下一页返回3.2数据的输出、输入及顺序结构程序设计3.2.3简单的I/O格式控制在有些情况下,程序需要以八进制和十六进制数的形式输出。C++提供了简单的实现方法:只要在输出流中插入操纵符dec(十进制)、oct(八进制)或hex(十六进制)即可。C++提供了一些操纵符,可以直接嵌入到输入/输出语句中来控制I/O格式。在使用setprecision和setw操纵符时要在程序的头部包含iomanip.h头文件。表3−1列出了常用的I/O流类库的操纵符。C++提供的setw操纵符可以用于指定每个数值占用的宽度,即该数占用的最小位数。上一页下一页返回3.2数据的输出、输入及顺序结构程序设计3.2.4顺序结构程序设计顺序结构程序的执行顺序就是程序的书写顺序,是三种程序结构中最简单的程序结构。其程序书写的格式为:S1;S2;…;Sn;该程序的执行顺序是:S1,S2,…,Sn。尽管顺序结构的程序无“智能”可言,但是在任何程序的局部都有顺序结构程序的影子。说明语句、表达式语句等一般都是顺序结构,复合语句的内部一般也有顺序结构。上一页返回3.3选择控制语句3.3.1条件表达式C++语言提供了唯一的三目条件运算符“?:”,它和if~else语句的功能类似。条件表达式的一般格式是:e1?e2:e3e1?e2:e3的功能是:首先计算e1,其值为真则表达式的值是e2的值,否则是e3的值。也就是e2与e3中只有一个被执行,而不会是全部。e1的数据类型一般是整型、字符型或指针类型,结果的类型依赖于e2和e3的数据类型。条件运算符的优先级为3,结合性是从右至左。条件表达式的N−S流程如图3−3所示。下一页返回3.3选择控制语句3.3.2if~else语句1.if语句if语句是分支结构程序中的基本语句。if语句的一般格式为:if(Q)H;...if语句的N−S流程图如图3−4所示。其中Q是条件表达式,一般是关系表达式,也可是逻辑表达式。H是单个语句或是复合语句。if语句的功能是:如果条件表达式Q值为真(true),则执行语句H,若条件表达式Q的值为假(false),则转去执行本语句H的后继语句。下一页返回上一页3.3选择控制语句注意:(1)(Q)是条件表达式,其圆括号是必须要加的,它是if语句条件表达式的界限符。(2)其成分子句可以是单个语句或由大括号对括起来的复合语句。如果H是单个语句,其后的分号是必不可少的,以表示语句的结束;若H是复合语句,复合语句的成分子句之间必须用分号隔开,而封闭复合语句的右大括号后不许加入分号。(3)if语句可以嵌套,即一个分支又可以嵌入其他if语句,也就是一个if语句可以嵌套另一个if语句中。为了避免二义性,除了层次清楚之外,应该使用大括号对把嵌入的if语句括起来。上一页下一页返回3.3选择控制语句2.if~else语句if~else语句又称为双分支选择语句。if~else语句的格式如下所示:if(Q)H1成分子句elseH2成分子句式中,Q是条件表达式,H1和H2可以是单个语句,也可以是复合语句。if~else是关键字。if~else语句的功能是:如果条件表达式Q为真,则执行成分子句H1,否则执行成分子句H2,然后再执行本if~else语句的后继语句。if~else语句的N−S流程图如图3−5所示。上一页下一页返回3.3选择控制语句if~else语句应该注意:(1)if~else语句控制范围包括else后的成分子句,其后的分号表示控制范围的结束。(2)如果if的成分子句或else的成分子句是多个语句时,则要用大括号括起来构成复合语句,而右大括号表示成分子句范围的结束,其后不能加分号。(3)从if~else语句和if语句流程图可以看出,能用if~else语句完成的功能一般也能用if语句完成,原因是if语句的后继语句就相当于if~else后的成分子句。其实if语句是if~else语句的默认形式。上一页下一页返回3.3选择控制语句(4)if~else语句也可以像if语句一样进行嵌套,即任一分支都可以嵌入if~else语句或if语句。为了避免二义性,应尽量用大括号括起来构成复合语句。(5)if语句和if~else语句的条件表达式是一个简单变量时,常用如下两种简化形式:①if(x!=0)可以写成简化形式if(x);②if(x==0)可以写成简化形式if(!x)。对于①,如果x值为0,则表示条件为假,而x!=0也不能成立,也就是x等于0时,条件表达式为假;如果x值为非0,则表示条件为真,此时x!=0成立,也就是条件表达式为真;所以①简化形式是成立的。依此类推②。上述简化形式在程序中常被采用。上一页下一页返回3.3选择控制语句3.elseif结构elseif结构是分支嵌套的一种形式,它并不是C++语言中的一种语句。它常用于多分支处理。其常用结构如下所示。if(Q1)H1elseif(Q2)H2;elseif(Q3)H3;else...从上述示意可以看出,在多分支结构中,它仅执行条件表达式为真(true)的那个if的成分子句。若所有条件表达式都是假(false),则执行最后一个else的成分子句。其实最后一个else也可以不存在。上一页下一页返回3.3选择控制语句使用elseif结构编程时需要注意如下两点。(1)在使用多个if~else语句嵌套中,尤其是缺省大括号对封闭的情况下,要特别注意if和else的配对关系。C++语言编译程序规定:一个else总是和它前面离它最近的并且没有与其他else配对的那个if配对。在if和else的数目不相等时,要注意分清else与哪个if配对。(2)在书写elseif嵌套结构程序时,最好采用阶梯缩进形式,即else与其配对的if对齐,内层的较其外层的缩进去一些。这样书写使程序看起来清晰,易于找到配对关系和程序的对应层次。上一页下一页返回3.3选择控制语句3.3.3switch语句用elseif结构可以解决多分支选择的问题,但有时显得不太方便。在C++语言中提供了另一种多分支选择控制语句——switch()语句。这种多分支选择取决于一个整型常量表达式的特定值。switch()语句又称之为开关语句。其结构格式如下:switch(表达式){case常量表达式1:成分子句1;case常量表达式2:成分子句2;...上一页下一页返回3.3选择控制语句case常量表达式n:成分子句n;default:语句n+1;}其中switch、case和default是switch()语句的关键字,表达式是选择控制表达式,执行通常的算术转换,结果是整型常量或字符型常量。常量表达式1,…,常量表达式n是情况常量,通常是整型或字符型。成分子句1,成分子句2,…,成分子句n对应情况的成分子句,是一个语句序列。上一页下一页返回3.3选择控制语句每个语句序列的最后通常含有break语句(break语句将在后面予以介绍),它的功能是执行完该种情况后跳出switch()语句体,不再执行其后继语句。default是一个可默认的选择项,它表示上述各种情况都不是时而执行其后的语句序列。switch()语句的功能:先计算表达式的值,再与常量表达式i进行比较,如果其中一个常量表达式i等于表达式的值,就执行该情况后对应的语句;如果没有相匹配的常量表达式,而有default可选项,就转去执行default后面的语句序列;如果既没有相匹的情况常量,又无default,则不执行switch()语句中的成分子句,转到本switch()语句的后继语句去执行。上一页下一页返回3.3选择控制语句使用switch()语句需要注意:(1)各情况所对应的成分子句可以由多个语句组成,若子句前边有情况表达式,后边有break语句,则不必写成复合语句形式。(2)多分支选择的表达式与常量表达式i的数据类型必须一致,但对于整型与字符型来讲,允许它们之间直接进行比较,而不必进行转换。(3)case和default可以按任意顺序出现在switch()语句体中,但是每个case所包含的常量表达式不应该与其他常量表达式相同。上一页下一页返回3.3选择控制语句(4)应该在switch()的成分子句中使用break中断语句,使之从switch语句体中退出。(5)switch()语句中,允许多种情况执行相同的子句,并且允许将其成分子句写成默认形式,即将共同执行的成分子句写于最后一种情况之后。(6)如果在每个情况的成分子句部分都没给出break显式的控制转移,则在一个情况的成分子句执行后将继续执行后继的case或default后面的子句,这一点特别需要注意。上一页返回3.4循环控制语句在实际应用中常会遇到许多具有规律性的重复操作,因此,在程序设计中常常需要循环结构控制的语句。被重复执行的语句或复合语句称为循环体;每重复执行一次,都必须作出是否继续重复或停止的决定,这个决定所依据的条件称为循环控制条件或循环控制表达式,其中关键性的变量又称为循环控制变量。C++语言中提供了三种循环结构控制语句:while(),for()和do~while()。下一页返回3.4循环控制语句3.4.1while循环语句while()语句又称前判循环语句或while()循环语句。while()语句的一般形式如下:while(表达式)循环体语句;其中while是前判循环语句的关键字;表达式是循环控制条件表达式;循环体语句是循环语句的循环体。流程示意如图3−6所示。while()语句的执行过程是:先判断循环控制条件是否成立,若其值为真,则执行循环体语句序列,其值为假,则退出循环,执行while()语句的后继语句。上一页下一页返回3.4循环控制语句使用while()语句应注意:(1)循环控制条件表达式一定要用圆括号括起来,循环控制条件表达式一般是关系表达式或逻辑表达式。(2)循环体语句序列可以是单个语句,也可以是多个语句,若是多个语句时它们必须用大括号对括起来构成复合语句;每个语句末尾一定要有分号,而封闭复合语句的右大括号后不应有分号。(3)while()语句可以嵌套,即一个while()语句可以嵌入另一个while()语句或其他循环语句之内。C++语言对嵌套的深度没有限制。上一页下一页返回3.4循环控制语句(4)循环体一般必须有修改循环控制变量的操作,否则会使程序陷入死循环,这一点必须特别注意。(5)while()语句中的循环控制条件表达式等于0或不等于0时可以简化成如下形式:while(x==0)可简写作while(!x)while(x!=0)可简写作while(x)上一页下一页返回3.4循环控制语句3.4.2do~while循环语句C++语言提供的第二种循环结构控制语句是do~while()语句,也称后判循环结构控制语句。它和pascal语言中的until语句类似。do~while一般形式如下所示:do{循环体语句;}whi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 橡胶制品生产工岗后评优考核试卷含答案
- 竖井钻机工岗前安全综合考核试卷含答案
- 门窗五金配件制作工操作技能竞赛考核试卷含答案
- 养蜂员岗前水平评估考核试卷含答案
- 初二【物理(北京版)】声音的产生与传播(1)教学设计
- 北师大版小学五年级劳动教育 《衣服破了我会补》教学设计
- 2026中考第一轮复习(知识能力+解题思路+易错警示+真题演练)第25课时:平移与旋转(学生版+教师版合并)
- 云南语文模拟试题及答案
- 2026届河南省顶级名校高三上学期9月月考物理试卷含答案
- 2026年春招:紫金矿业真题及答案
- 酒店总经理转正述职报告
- 变电站继电保护培训课件
- 手术患者术前准备培训
- 更换风机外壳的施工方案
- 专题01 二次函数综合题角相关(7种类型35道)(压轴题专项训练重庆专用)(解析版)
- 2026中国移动校园招聘备考考试题库附答案解析
- 2025银行内部审计招聘面试题及答案
- 侯德榜简介教学课件
- 评标保密协议范本(2025版)
- 飞机结构与系统模块B737飞机液压系统27课件
- 地下室互换合同范本
评论
0/150
提交评论