收藏 分销(赏)

第2章面向对象的程序设计语言——C++.ppt

上传人:s4****5z 文档编号:13985957 上传时间:2026-05-22 格式:PPT 页数:284 大小:980.50KB 下载积分:10 金币
下载 相关 举报
第2章面向对象的程序设计语言——C++.ppt_第1页
第1页 / 共284页
第2章面向对象的程序设计语言——C++.ppt_第2页
第2页 / 共284页


点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,返回,第2章,C+,语言基础,本章是学习,C+,语言的基础,包括以下几个方面:,1结构化程序设计方法与面向对象程序设计方法的各自特点、区别和相互联系。,2面向对象的程序设计方法中的有关概念,如类、对象、封装、继承、消息和多态性等。,3,C+,程序的基本组成和框架结构。,4掌握,C+,语言中的基本数据类型、各种运算符、表达式。,5,C+,数据输入流对象,cin,和输出流对象,cout,的使用。,6程序的3种基本结构,7构造数据类型,如数组、结构体、指针等的定义方法、特点和使用方法。,7函数的定义、调用及函数调用过程中的参数传递的机理和程序执行流程。,8引用的概念及其定义和使用方法。,1,2.1 从面向过程的程序设计到面向对象的程序设计,2.1.1,传统的结构化程序设计(,Structured Programming-SP,),方法,1使用,SP,方法设计程序的步骤,在数据处理过程中,采用的是自顶向下、分而治之的方法,将整个程序按功能划分为几个可独立编程的子过程模块,每一子模块完成指定的子任务,并且提供一个清晰、严格的调用界面,主过程通过调用各子过程完来成全部处理工作,。,数据声明,数据处理,结果输出,2,2,SP,方法的特点,优点:,(1)这种程序设计方法力求算法描述准确。,(2)对每一子过程模块容易进行程序正确性证明。,缺点:,(1)这种程序设计方法本质上是面向“过程”的,而“过程”和“操作”又是不稳定和多变的,因此不能直接反映人类求解问题的思路。,(2)程序代码可重用性差。程序中除少数标准库函数外,每设计一个程序时,程序员几乎从零做起。即使重用代码,通常也是通过拷贝或编辑重新生成一份。,(3)维护程序的一致性困难。该种方法将数据与对数据进行处理的程序代码分离。,2.1 从面向过程的程序设计到面向对象的程序设计,3,2.1.2,面向对象的程序设计(,Object-Oriented Programming-OOP,),方法,1.面向对象的有关概念,面向对象的程序设计方法强调直接以问题域(现实世界)中的事物为中心来思考和认识问题,并按照这些事物的本质特征把它们抽象为对象,以作为构成软件系统的基础。,(1)对象(,Object,),:,每个对象都具有属性(,Attribute),和方法(,Method),这两方面的特征。对象的属性描述了对象的状态和特征,对象的方法说明了对象的行为和功能,并且对象的属性值只应由这个对象的方法来读取和修改,两者结合在一起就构成了对象的完整描述。,2.1 从面向过程的程序设计到面向对象的程序设计,4,(2)类(,Class):,具有相似属性和行为的一组对象,就称为类。可见,有了类的概念以后,就可以对具有共同特征的事物进行统一描述。,(3)封装(,Encapsulation):,封装把对象的属性和方法看成了一个密不可分的整体,从而使对象能够完整地描述并对应于一个具体事物,。,(4)继承(,Inheritance):,将客观事物进行归类是一个逐步抽象的过程,反之,将类进行层层分类便是一个概念逐渐细化的过程。,在面向对象的程序设计中,允许在已有类的基础上通过增加新特征而派生出新的类,这称为继承。其原有的类称为基类(,base class),,而新建立的类称为派生类。,2.1 从面向过程的程序设计到面向对象的程序设计,5,(5)消息(,Message):,在面向对象的程序设计中,由于对象描述了客观实体,它们之间的联系通过对象间的联系来反映。当一个对象需要另外一个对象提供服务时,它向对方发出一个服务请求,而收到请求的对象会响应这个请求并完成指定的服务。这种向对象发出的服务请求就称为消息。,(6)多态性(,Polymorphism):,多态性是面向对象的另一重要特征。在通过继承而派生出的一系列类中,可能存在一些名称相同,但实现过程和功能不同的方法(,Method)。,所谓多态性是指当程序中的其他部分发出同样的消息时,按照接收消息对象的不同能够自动执行类中相应的方法。其好处是,用户不必知道某个对象所属的类就可以执行多态行为,从而为程序设计带来更大方便。,2.1 从面向过程的程序设计到面向对象的程序设计,6,2.面向对象的程序设计方法(,OOP,方法),这种方法将设计目标从模拟现实世界的行为转向了模拟现实世界中存在的对象及其各自的行为。,在,OOP,中,将“对象”作为系统中最基本的运行实体,整个程序即由各种不同类型的对象组成,各对象既是一个独立的实体,又可通过消息相互作用,对象中的方法决定要向哪个对象发消息、发什么消息以及收到消息时如何进行处理等。,2.1 从面向过程的程序设计到面向对象的程序设计,方法,数据,消息,消息,7,3,OOP,方法的特点,(1),OOP,以“对象”或“数据”为中心。由于对象自然地反映了应用领域的模块性,因此具有相对稳定性,可以被用作一个组件去构成更复杂的应用,又由于对象一般封装的是某一实际需求的各种成分,因此,某一对象的改变对整个系统几乎没有影响。,(2)引入了“类”(,class),的概念。类与类以层次结构组织,属于某个类的对象除具有该类所描述的特性外,还具有层次结构中该类上层所有类描述的全部性质,,OOP,中称这种机制为继承。,(3),OOP,方法的模块性与继承性,保证了新的应用程序设计可在原有对象的数据类型和功能的基础上通过重用、扩展和细化来进行,而不必从头做起或复制原有代码,这样,大大减少了重新编写新代码的工作量,同时降低了程序设计过程中出错的可能性,达到了事半功倍的效果。,2.1 从面向过程的程序设计到面向对象的程序设计,8,2.1.3 面向对象的程序设计方法与结构化程序设计方法的比较,(1)传统的结构化程序设计方法以过程为中心构造应用程序,数据和处理数据的过程代码是分离的、相互独立的实体,设计出的程序可重用代码少,且当代码量增加时维护数据和代码的一致性困难。,(2)面向对象程序设计方法中,对象所具有的封装性和继承性使得代码重用成为可能,并大大减少了程序出错的可能性。,(3)面向对象方法吸收了结构化程序设计方法的优点,同时引入了新概念、新机制并建立了比传统方法更高层次的抽象。,2.1 从面向过程的程序设计到面向对象的程序设计,9,2.2.1 从,C,语言到,C+,语言,C,语言以其如下独有的,特点,风靡了全世界:,(1)语言简洁、紧凑,使用方便、灵活。,C,语言只有32个关键字,程序书写形式自由。,(2)丰富的运算符和数据类型。,(3)可以直接访问内存地址,能进行位操作,使其能够胜任开发操作系统的工作。,(4)生成的目标代码质量高,程序运行效率高。,(5)可移植性好。,2.2,C+,程序的基本组成,10,2.2,C+,程序的基本组成,局限性,:,(1)数据类型检查机制相对较弱,这使得程序中的一些错误不能在编译阶段被发现。,(2),C,本身几乎没有支持代码重用的语言结构,因此一个程序员精心设计的程序,很难为其它程序所用。,(3)当程序的规模达到一定程度时,程序员很难控制程序的复杂性。,11,2.2,C+,程序的基本组成,C+,包含了整个,C,C,是建立,C+,的基础。,C+,包括,C,的全部特征和优点,同时添加了对面向对象编程(,OOP),的完全支持。,1980年,贝尔实验室的,Bjarne Stroustrup,开始对,C,进行改进和扩充。,1983年正式命名为,C+。,在经历了3次,C+,修订后,1994年制定了,ANSI C+,标准的草案。以后又经过不断完善,成为目前的,C+。,C+,仍在不断发展中。美国微软公司现已准备推出,C#(C Sharp),语言,来代替,C+,语言。,12,2.2.2,C+,程序的结构与基本组成,一个简单的,C+,程序,是由若干个函数构成的,其中有且仅有一个名称为,main,的函数存在,,下,图说明了,C+,程序的基本框架结构:,2.2,C+,程序的基本组成,声,明,区,#,include,:,函数声明,定义全局变量,主,程,序,区,类型,main(,参数行),程序主体;,函,数,定,义,区,函数定义,函数主体;,13,1,声明区,声明区处在程序文件的所有函数的外部。,(1)包含头文件:如#,include,iostream,.h,(2),宏定义:如#,define PI 3.1415926,(3),类定义:如,class name;,(4),结构体定义:如,struct,record;,(5),函数声明:如,void print();,(6),全局变量声明:如,float H=2.58;,(7),条件编译:如#,ifdef,等。,2.2,C+,程序的基本组成,14,2,主程序区,主程序以,main(),函数开始,是整个程序运行的入口,该,函,数中可能包含的内容主要有:,(1)局部变量的声明:如:,int,i=1;,(2),函数调用:如:,y=sin(x);,(3),一般运算:如:,a=b+c+d/3;,(4),结构控制:如:,if(ab)c=a;,(5),对象与结构的处理。,(6)文件的处理等。,2.2,C+,程序的基本组成,15,图2.3,C+,函数的组成,4,程序举例,2.2,C+,程序的基本组成,函,数,定,义,区,函数说明,int,max(,int,a,int,b),函数体,int,c;,c=a+b;,return(c);,3,函数定义区,程序中除了,main,函数之外,还可以包含其它的函数,每个函数是由函数说明和函数体两部分构成的。如图2.3所示:,16,2.2,C+,程序的基本组成,声,明,区,#,include,iostream,.h,#include,stdio,.h,void print();/,函数声明,主,程,序,区,void main(),int,i;,char s80;,print();,cout,s;,cout,i;,cout,s is i years old.;,函,数,定,义,区,void print(),printf,(,printf,is also can be usedn);,17,上例程序结构可写为如下程序:,【,例2-1,】一个简单的,C+,程序。,/,This is first C+program,/*,C,语言的某些特征仍可沿用,*/,#,include,iostream,.h,#include,stdio,.h,void print();/,函数声明,void main(),int,i;,char s80;,2.2,C+,程序的基本组成,18,print();,cout,s;,cout,i;,/,验证结果,cout,s is i years old.;,void print(),printf,(,printf,is also can be usedn);,2.2,C+,程序的基本组成,19,从上例可以看出:,(1),C,语言中原有的规则和语句在,C+,中仍可继续使用,但,C+,又增添了很多新的风格。,(2)一个,C+,的程序是由一到若干个函数构成的,但其中必须有且仅有一个名称为,main,的函数存在。,(3)不管一个程序中有多个函数,只有,main,函数整个程序运行时的入口,程序运行时从此函数开始执行。但在程序中,,main,函数所处的位置可以任意。,(4)一个,C+,的函数是由两部分构成的,即函数的说明部分和函数体,函数的说明部分包括了函数的返回值的类型、函数的名称、圆括号、形参及形参的类型说明。函数体由一对大括号括起来,其内容是由若干条语句,2.2,C+,程序的基本组成,20,构成,函数体的内容决定了该函数的功能。,(5),C+,对程序中的名称是大小写“敏感”的,除特殊情况下,应一律小写。,(6)程序中的注释:可以用/*/或/(单行注释)对程序中的内容进行注释。二者的区别在于,采用/*/方法时,注释可以写成多行,而采用/方法时,注释只能写成一行,它可单独占一行,也可写在某行程序代码的末尾。,(7)数据输出:除了使用,printf,(),函数,还可使用功能更强大、更方便的,cout,对象进行输出数据。格式如下:,cout,数据1 数据2 数据,n,如:上例中的语句,cout,s“is”i,变量1变量2变量,n,如:上例中的语句,cin,s;,表示给变量,s,输入一个值,(9)在分别使用,cout,和,cin,进行数据的输出和输入时,需要在程序的开头嵌入”,iostream,.h”,文件。在该头文件中定义了输入输出流对象,cout,和,cin,等。,(10)一个,C+,的源程序文件在存盘时,要以.,CPP,为文件名后缀,而不是.,C。,2.2,C+,程序的基本组成,22,2.3,C+,数据类型、运算符和表达式,2.3.1 数据类型,(1)预定义数据类型(基本数据类型)。包括字符型、整型、浮点型、无值型四种,其中浮点型又分为单精度浮点型和双精度浮点型两种。,(2)构造数据类型,包括数组、结构体、共用体(联合)、枚举、类等。,本节重点介绍,C+,的基本数据类型,有关构造数据类型将在后面章节进行介绍。,23,2.3.1.1 基本数据类型,2.3,C+,数据类型、运算符和表达式,数据类型,关键字,字节数,数值范围,字符型,char,1,-128127,整 型,int,4,-21474836482147483647,单精度浮点型,float,4,(3.4,E-383.4E38),双精度符点型,double,8,(1.7,E-3081.7E308,无值型,void,0,valueless,24,2.3.1.2 类型修饰符,C+,还允许在基本数据类型(除,void,类型外)前加上类型修饰符,来更具体地表示数据类型。,C+,的类型修饰符包括:,signed,有符号,unsigned,无符号,short,短型,long,长型,2.3,C+,数据类型、运算符和表达式,25,数据类型标识符,字节数,数值范围,常量写法举例,Char,1,-128127,A,0,n,signed char,1,-128127,56,unsigned char,1,0255,100,short,int,2,-3276832767,100,signed short,int,2,-3276832767,-3456,unsigned short,int,2,065535,0 xff,int,4,-21474836482147483647,1000,signed,int,4,-21474836482147483647,-123456,unsigned,int,4,04294967295,0,xffff,表2.2,C+,的基本数据类型,26,数据类型标识符,字节数,数值范围,常量写法举例,long,int,4,-21474836482147483647,-123456,signed long,int,4,-21474836482147483647,-3246,unsigned long,int,4,04294967295,123456,float,4,(3.4,E-383.4E38),2.35,-53.231,3E-2,Double,8,(1.7,E-3081.7E308),12.354,-2.5,E10,long double,10,(1.2,E-49321.2E4932),8.5,E-300,表2.2,C+,的基本数据类型,27,说明,:,(1)表中带 的部分表示是可以省略的,如,short,int,可以,写为,short,int,或简写为,short,,二者的含义是相同的。,(2)四种修饰符都可以用来修饰整型和字符型。用,signed,修饰的类型的值可以为正数或负数,用,unsigned,修饰的类型的值只能为正数。,(3)用,short,修饰的类型,,其值,一定不大于对应的整数,用,long,修饰的类型,,其值,一定不小于对应的整数。,2.3,C+,数据类型、运算符和表达式,28,2.3,C+,数据类型、运算符和表达式,2.3.1.3 常量,在,C+,语言中,数据分为常量和变量两大类。,由于程序中的数据是有类型的,所以常量和变量都是有类型之分的。,常量按照不同的数据类型可以分为:字符型常量、整型常量、浮点型常量,以及字符串常量等。,程序是根据程序中常量的书写格式来区分它,是,哪种类型常量的。,29,1.,整型常量,在程序中书写整型常量时,没有小数部分。用户可根据需要分别可以用十进制、八进制和十六进制的形式书写:,十进制格式:,由数字0至9和正、负号组成,书写时直接写出数字,如:123,-516,+1000等。,八进制格式:,以数字0开头的数字(0至7)序列,0111,010007,0177777等。,十六进制格式:,以0,x,或0,X,开头的数字(数字0至9、字母,a,至,z),序列,如0,x78AC,0 xFFFF,等。,2.3,C+,数据类型、运算符和表达式,30,2.,浮点型常量,只能用十进,制来,表示。可以用小数或指数形式表示,不分单精度和双精度类型。如:34.5,.345,1.5,e-3,3.,字符型常量,(1)用一对单引号括起来的一个字符,单引号只是字符与其他部分的分割符,不是字符的一部分,并且,不能用双引号代替单引号。在单引号中的字符不能是单引号或反斜杠。如:,a,A,#,合法的字符常量,非法的字符常量,“,A,”,不代表字符常量,(2)另一种表示字符常量的方法是使用转义字符。,C+,规定,采用反斜杠后跟,一个字母,来代表一个控制字符,具有新的含义。,2.3,C+,数据类型、运算符和表达式,31,C+,中常用的转义字符,转义字符,含义,ASCII,码值(十进制),a,响铃(,BEL),7,b,退格(,BS),8,n,换行(,LF),10,r,回车(,CR),13,t,水平制表(,HT),9,v,垂直制表(,VT),11,反斜杠,92,单引号,39,”,双引号,34,0,空格符(,NULL),0,ddd,任意字符,3位八进制数,xhh,任意字符,2位十六进制数,2.3,C+,数据类型、运算符和表达式,32,4.,字符串常量,用一对双引号括起来的一个或多个字符的序列称为字符串常量或字符串。字符串以双引号为定界符,双引号不作为字符串的一部分。如:,“,Hello”,“Good Morning!”,“I say:“Goodbye!”,字符串中的字符数称为该字符串的长度,在存储时,系统自动在字符串的末尾加以字符串结束标志,即转义字符,0,。,5.,符号常量,常量也可用一个标识符来代表,称为符号常量。如,:,#,define PRICE 30,main(),2.3,C+,数据类型、运算符和表达式,33,使用符号常量应,注意,以下几个方面:,(1)它不同于变量,在作用域内其值不能改变和赋值。,如:在上例中如再用,PRICE=40;,这一语句进行赋值则是错误的。,(2)符号常量名一般用大写,而变量名用小写,以示区别。,6.,程序中常量的表示方法,在程序中的常量有以下三种表示方法:,(1)在程序中直接写入常量,如,:-200,3.4,E-10,A,1,0 x120,045,5.35,1000l,int,i;char s;float f;,i=20;s=a;f=2.0;,2.3,C+,数据类型、运算符和表达式,34,(2)利用#,define,定义宏常量,一般格式:#,define,宏名 常数,如:,#,define PI 3.14,s=2*PI*r;,(3),利用,const,定义正规常数,一般格式:,const,数据类型标识符 常数名=常量值;,说明:,const,必须放在被修饰类型符和类型名前面,数据类型是一个可选项,用来指定常数值的数据类型,如果省略了该数据类型,那么编译程序认为它是,int,类型,2.3,C+,数据类型、运算符和表达式,35,如:,const,int,a=10;,表示定义了一个初始值为10的整型常量,它在程序中不可改变,但可用于表达式的计算中,,2.3.1.4 变量,1变量的概念,及特点,每一变量就相当于一个容器,对应着计算机内存中的某一块存储单元,用于存储程序中的数据。变量的值具有以下两个特点:,(1)“一充即无”:即将一个新数据存放到一个变量中时,该变量中原来的值消失,变量的值变成了新值。,如:执行完语句,int,i;i=10;i=20;,后,i,的值为20,而不是10。,2.3,C+,数据类型、运算符和表达式,36,(2)“取之不尽”:可将某个变量的值与程序中的其它数据进行各种运算,在运算过程中,如果没有改变该变量的值时,那么,不管用该变量的值进行多少次运算,其值始终保持不变。,如:语句,int,i,j,k;i=10;j=i+10;k=i+j*5;,其中,,i,的值可无限制地多次使用,但它的值始终保持值10,因为在程序中没有改变变量,i,的值。,2定义变量,程序中的每一变量,都要先定义,后使用。,定义变量的一般有以下三种格式:,数据类型标识符 变量名;,数据类型标识符 变量名=初始化值;,2.3,C+,数据类型、运算符和表达式,37,数据类型标识符 变量名1=初始值1,变量名2=初始值2,;,如:,char a;,/,定义字符型变量,a,int,i=1000;,/,定义整型变量,i,i,的初始值为1000;,float a=2,b=3,c;/,定义浮点型变量,a、b、c,且,a、b,的,初始值分别为2、3。,变量名是每个变量的名称,其命名遵循以下规则:,(1)由字母、数字和下划线(_)三类符号排列组合形成,且开头字符必须是字母或下划线。,(2)名称中字符的最大个数是31个。,(3),C+,中区分变量名的大小写。,2.3,C+,数据类型、运算符和表达式,38,(4)变量名不能和,C+,中的关键字同名,也不能和用户编制的函数或,C+,库函数同名。如:,int,double,或,static,都不能作为变量名。,(5)变量名尽量做到“见名知意”。,3定义变量的位置,在程序中的不同位置采用不同的变量定义方式,决定了该变量具有不同的特点。变量的定义一般可有以下三种位置:,(1)在函数体内部,在函数体内部定义的变量称为局部变量,这种局部变量只在进入定义它的函数体时起作用,离开该函数体后该变量就消失(被释放),即不再起作用。因此,不同函数体内部可以定义相同名称的变量,而互不干扰。如:,2.3,C+,数据类型、运算符和表达式,39,void func1(void),int,y;,y=2;,void func2(void),int,y;,y=-100;,在本例中,函数,func1,和,func2,的函数体内部都分别定义了变量,y,,但它们都只能在各自的函数体内起作用,都是局部变量。,2.3,C+,数据类型、运算符和表达式,40,(2)形式参数,当定义一个有参函数时,函数名后面括号内的变量,统称为形式参数。如:,int,is_in(char*a,char b),while(*a),if(*a=b),return 1;,else,a+;,return 0;,本例中,函数名,is_in,后面括号内的变量,a,和,b,是该函数的形式参数,它们都只能在该函数体内起作用,是该函数的局部变量。,2.3,C+,数据类型、运算符和表达式,41,(3)全局变量:,在所有函数体外部定义的变量,其作用范围是整个程序,并在整个程序运行期间有效。如:,#,include“,stdio,.h”,int,count;,/,定义,count,变量是全局变量,void func1(void);,void func2(void);,int,main(),count=10;,func1();,return 0;,2.3,C+,数据类型、运算符和表达式,42,void func1(void),int,temp;,temp=count;,func2();,printf,(“count is%d”,count);/,输出10,void func2(void),int,count;,for(count=1;count10;count+),putchar,(.);,2.3,C+,数据类型、运算符和表达式,43,2.3.2 运算符和表达式,程序中对数据进行的各种运算是由运算符来决定的,不同运算符的运算方法和特点是不同的,从此可以看出,一个运算式子中要涉及到数据及运算符,而运算符是对数据进行指定操作,并产生新值的特殊符号。,2.3.2.1 算术运算符和算术表达式,算术运算符就是对数据进行算术运算,如:加、减、乘、除等,是在程序中使用最多的一种运算符,,C+,的算术运算符如表2.4所示。,2.3,C+,数据类型、运算符和表达式,44,运算符,功能,数据类型,例子,-,负号,数值,x=-y;,+,加,数值,z=x+y;,-,减,数值,z=x-y;,*,乘,数值,z=x*y,/,除,数值,z=x/y;,%,求余,整数,z=x%y,+,自加,数值,z+,或+,z,表2.4,C+,的算术运算符,-,自减,数值,z-,或-,z,算术表达式是指由算术运算符、括号将常量、变量、函数、,圆括号,等连接形成的一个有意义的式子。如:,45,(1+,x)/(3*x),(2*x-3)*x+2)*x)-5,3.14*,sqrt,(r),b*b-4.0*a*c,注意,:,(1)表达式中的括号不管有多少层,一律使用圆括号。,(,2),在将一个数学上的运算式子写成对应的,C+,的表达式时,要,注意,进行必要的转换。,乘号不能省略。,数学表达式中出现的数学运算函数要用,C+,提供的对应的数学运算库函数来代替。,2.3,C+,数据类型、运算符和表达式,46,要特别注意表达式中两个整型数相除的情况。如:有一数学表达式为2/3(,f-32),,要写成对应的,C+,的表达式时,正确地写法应写2.0/3.0*(,f-32)。,而不是2/3*(,f-32),2.3.2.2,赋值运算符和赋值表达式,赋值运算符的功能将某个数据的值赋给某个变量。赋值运算符的用法格式:,变量名 赋值运算符 常量、变量或表达式,说明:,(1)被赋值的目标,即赋值运算符左边的量必须是变量,而不能是常量或表达式。,2.3,C+,数据类型、运算符和表达式,47,(2),C+,中的赋值运算符如表2.5所示。,(3),要注意区分赋值运算符“=”与数学上的“等号”间的区别,,如:,int,x,y;/,定义变量,x,y,为,int,类型变量,x=10;,/,将变量,x,赋成值10,赋值运算符,例子,等价形式,=,x=x+y,x=x+y,+=,x+=y+z,x=x+(y+z),-=,x-=y+z,x=x-(y+z),*=,x*=y+z,x=x*(y+z),/=,x/=y+z,x=x/(y+z),%=,x%=y+z,x=x%(y+z),2.3,C+,数据类型、运算符和表达式,48,x=x+20;/,将,x,的值在原值(10)的基础上再加上值20后,(结果为30)赋给变量,x,y-=x+5;/,等价于,y=y-(x+5);,右边表达式的值为30-(31+5)=-6,,y,被赋成值-6,x%=y+10;/,等价于,x=x%(y+10);,右边表达式的值为31%(-6+10)=3,,y,被赋成值3,2.3.2.3,sizeof,运算符,sizeof,运算符功能是求某一数据类型或某一变量在内存中所占空间的字节数。其使用的一般形式:,sizeof,(,变量名或数据类型)或,sizeof,变量名或数据类型,如:,2.3,C+,数据类型、运算符和表达式,49,#,include,void main(),short,int aShort,;,int anInt,;,long,aLong,;,char,aChar,;,float,aReal,;,cout,data type,tmemory,used(bytes);,cout,nshort int,t,sizeof,(,aShort,);,cout,ninteger,t,sizeof,(,anInt,);,cout,nLong,integert,sizeof,(,aLong,);,cout,nchar achar,t,sizeof,(,aChar,);,cout,nfloat,t,sizeof,(,aReal,);,2.3,C+,数据类型、运算符和表达式,50,其输出结果为:,data type memory used(bytes),short,int,2,integer,4,Long integer 4,char,achar,1,float,4,2.3.2.4,关系运算符和关系表达式,关系运算符就是对两个量之间进行比较的运算符,如表2.6所示。,2.3,C+,数据类型、运算符和表达式,51,由关系运算符将两个表达式连接形成的运算式子是关系表达式,一个关系表达式的值是一个逻辑值,,当为真时,值为1,为假时,值为0,。,如:假设,a=1,b=20,c=3,,则,ab,表达式成立,其值为1,b=c,表达式不成立,其值为0,(,a+b)!=c,表达式成立,其值为1,关系运算符,含义,例子,10,=,小于或等于,(x+y)*2,大于,x+yz,=,大于或等于,x-y=a*b+2,=,等于,x+y=a+b,!=,不等于,x-y!=0,2.3,C+,数据类型、运算符和表达式,52,注意,:,在对两个表达式的值进行是否相等的比较时,要用运算符“=”,而不能写成“=”。,2.3.2.5,逻辑运算符和逻辑表达式,逻辑运算符是对两个逻辑量间进行运算的运算符,如表2.7所示。,2.3,C+,数据类型、运算符和表达式,逻辑运算符,含义,例子,!,逻辑非,!(,x10),&,逻辑与,(i1)&(ic),的值为1(真)。,(2)在逻辑表达式的求值过程中,并不是所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的值时,才执行该运算符。,a&b&c,只有,a,为真时,才需要判别,b,的值,只有,a,和,b,的值都为真时才需要判别,c,的值。如:,int,i=10;,则,表达,式,i&(i=0)&(+i),的值为0(假),该表达式运算结束后,变量,i,的值为0,而不是1。,2.3,C+,数据类型、运算符和表达式,55,a|b|c,只要,a,为真,就不必须判断,b,和,c;,只有,a,为假,才判别,b;a,和,b,都为假才判别,c。,如:,int,i=1,j;,则表达式,i+|i+|i+,的值为1(真),运算结束后,变量,i,的值为2,而不是4。,对于数学上的表示多个数据间进行比较的表达式,在,C,或,C+,中要拆写成多个条件并用逻辑运算符连接形成一个逻辑表达式。如:在数学上,要表示一个变量,a,的值处于-1和-9之间时,可以用-9,a-9&a-1,,而不能写成-9,a-1。,因为,假设变量,a,当前的值为-5,它的值确实处在-1和-9之间,但在,C+,语言中求-9,a-1,时,从左向右进行计算,先计算-9,a,,得1(真),此时该表达式可简化为1-9&ab?a:b,的值为4。,2.3.2.7 位运算符,1位运算符及其运算规则,所谓位运算符是指能进行二进制位运算的运算符。,C+,提供的位运算符如表2.9所示。,2.3,C+,数据类型、运算符和表达式,57,位运算的运算规则为:,(1)按位与&:两个运算量相应的位都是1,则该位的结果值为1,否则为0;,(2)按位或|:两个运算量相应的位只要有一个是1,则该位的结果值为1,否则为0;,运算符,含义,例子,&,按位与,i&128,|,按位或,j|64,按位异或,j12,按位取反,j,按位左移,i,按位右移,j2,2.3,C+,数据类型、运算符和表达式,58,(3)按位异或:两个运算量相应的位不同,则该位的结果值为1,否则为0;,(4)按位取反:将运算量的每一位取反。,(5)按位左移:将操作数中的每一位向右移动指定的位数,移出的位被舍弃,空出的位补0或补符号位。,如:,a=5,b=6,,则:,a00000101,00000101 00000101,b,&00000110,00000110,00000110 00000110,00000100000001110000001111111001,即:,a&b=4,a|b=7,ab=3,b=249。,2.3,C+,数据类型、运算符和表达式,59,2复合位运算符,位运算符与赋值运算符结合可以形成复合位运算符,如表2.10所示。,2.3.2.8 强制类型转换运算符,该运算符的功能是将某一数据从一种数据类型向另,一,运算符,例子,等价形式,&=,x&=y+z,x=x&(y+z),|=,x|=x+2,x=x|(x+2),=,x=y,x=xy,=,x=y+z,x=x=,x=y+z,x=x(y+z),2.3,C+,数据类型、运算符和表达式,60,种数据类型进行转换。其使用的一般形式:,数据类型标识符(表达式),(数据类型标识符)表达式,如:,int,i=2;,float a,b;,a=float(i);/,将变量,i,的类型强制转换为浮点型,并将其值赋给变量,a,b=(float)i;/,将变量,i,的类型强制转换为浮点型,并将其值赋给变量,b,2.3.2.9,逗号运算符,逗号运算符的运算优先级是最低的。一般形式为:,表达式1,表达式2,表达式,N,2.3,C+,数据类型、运算符和表达式,61,在计算逗号表达式的值时,按从左至右的顺序依次分别计算各个表达式的值,而整个逗号表达式的值和类型是由最右边的表达式决定。,如:有语句,int,a=3,b=4;,则表达式,a+,b+,a+b,的值为9。,再如:设有,int,i;,则表达式,i=1,i+=2?i+1:i+4,的值为6。,2.3.2.10 运算符的优先级与结合性,每个运算符都有自己优先级和结合性。当一个表达式中包含多个运算符时,要确定运算的结果,必须首先确定运算的先后顺序,即运算符的优先级和结合性。,C+,中运算符的优先级和结合性如表2.11所示。,2.3,C+,数据类型、运算符和表达式,62,优先级,运算符,结合性,1,():-.*-*,自左至右,2,!+-+-*&(类型),sizeof,new delete,自右至左,3,*/%,自左至右,4,+-,自左至右,5,自左至右,6,=,自左至右,7,=!=,自左至右,8,&,自左至右,9,自左至右,10,|,自左至右,11,&,自左至右,12,|,自左至右,13,?:,自右至左,14,=+=-=*=/=%=&=|=,自右至左,15,自左至右,表2.11,C+,中运算符的优先级和结合性,63,2.4 数据的输入与输出,在,C+,语言中,数据的输入和结果的输出是分别使用系统所提供的输入流对象,cin,和输出流对象,cout,来完成的。在使用过程中,只要在程序的开头嵌入相应的头文件“,iostream,.h”,即可。,2.4.1 数据的输出,cout,输出流对象输出数据的语句格式为:,cout,数据1数据2数据,n;,说明:,(1),cout,是系统预定义的一个标准输出设备(一般代表显示器);“”是输出操作符,用于向,cout,输出流中插入数据。,(2),cout,的作用是向标准输出设备上输出数据,被输出的数据可以是常量、已有值的变量或是一个表达式。,64,如:,#,include,#include,void main(),float a=3,b=4;,cout,The result is:;,cout,sqrt,(a*a+b*b);,该程序的输出结果为:,The result is:5,(3),可以在,cout,输出流中插入,C+,中的转义字符。如:,cout,the value of a:n;,cout,a;,2.4 数据的输入与输出,65,表示输出完字符串,Input the value of a:,后,在下一行输出变量,a,的值。,(4)可以将多个被输出的数据写在一个,cout,中,各输出项间用“”操作符隔开即可,但要注意,cout,首先按从右向左的顺序计算出各输出项的值,然后再输出各项的值。如:,cou
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服