版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
面向对象程序设计(C++)与实践
数据类型和表达式2/6/20231东华大学计算机学院主要内容数据类型常量与变量基本数据类型运算符与表达式数据类型转换数组自定义数据类型2/6/20232东华大学计算机学院数据类型数据类型:指定义了一组数据以及定义在这一组数据的操作,它是程序中最基本的元素。类型相同的数据有相同的表示形式、存储格式以及相关的操作。程序中使用的所有数据都必定属于某一种数据类型。2/6/20233东华大学计算机学院C++的数据类型数据类型数据类型基本类型空类型(无值类型)void构造类型类类型class指针类型整型int实型(浮点型)字符型逻辑型bool结构类型struct数组类型枚举型类型enum联合型类型union单精度型float双精度型double单字符型char宽字符型w-char自定义类型2/6/20234东华大学计算机学院基本类型的种类基本类型有4种:整型(int);浮点型(float、double、longdouble);字符型(char);布尔型(bool)。数据类型2/6/20235东华大学计算机学院基本类型的种类整型数在计算机内部一般采用定点表示法,用于存储整型量。(如123,-7等),存储整数的位数依机器的不同而异。浮点数和整数不同的地方是浮点数采用的是浮点表示法,也就是说,浮点数的小数点的位置不同,给出的精度也不相同。字符类型表示单个字符,一个字符用一个字节存储。布尔类型,也称逻辑类型,表示表达式真和假。数据类型2/6/20236东华大学计算机学院基本类型图示NameDescriptionSize*Range*charCharacterorsmallinteger.1bytesigned:-128to127
unsigned:0to255shortint(short)ShortInteger.2bytessigned:-32768to32767
unsigned:0to65535intInteger.4bytessigned:-2147483648to2147483647
unsigned:0to4294967295longint(long)Longinteger.4bytessigned:-2147483648to2147483647
unsigned:0to4294967295boolBooleanvalue.1bytetrueorfalsefloatFloatingpointnumber.4bytes3.4e+/-38(7digits)doubleDoubleprecisionfloatingpointnumber.8bytes1.7e+/-308(15digits)longdoubleLongdoubleprecisionfloatingpointnumber.8bytes1.7e+/-308(15digits)wchar_tWidecharacter.2bytes1widecharacter
*Size和Range依赖于系统的体系结构,表中数据所依赖的是32bit系统。数据类型2/6/20237东华大学计算机学院空类型空类型void用于显示说明一个函数不返回任何值。还可以说明指向void类型的指针,说明以后,这个指针就可指向各种不同类型的数据对象。数据类型2/6/20238东华大学计算机学院构造类型构造类型又称为组合类型,它是由基本类型按照某种规则组合而成的。构造类型有4种:数组([]);结构(struct);联合(union);枚举(enum)。自定义数据类型数据类型2/6/20239东华大学计算机学院构造类型数组:是由具有相同数据类型的元素组成的集合。结构:是由不同的数据类型构成的一种混合的数据结构,构成结构体的成员的数据类型一般不同,并且在内存中分别占据不同的存储单元。联合:是类似于结构体的一种构造类型,与结构体不同的是构成共同体的数据成员共用同一段内存单元。枚举:是将变量的值一一列举出来,变量的值只限于列举出来的值的范围内。数据类型2/6/202310东华大学计算机学院指针类型指针类型变量用于存储另一变量的地址,而不能用来存放基本类型的数据。它在内存中占据一个存储单元。数据类型2/6/202311东华大学计算机学院类类型类是体现面向对象程序设计的最基本特征,也是体现C++与C最大的不同之处。类是一个数据类型,它定义的是一种对象类型,由数据和方法组成,描述了属于该类型的所有对象的性质。数据类型2/6/202312东华大学计算机学院常量常量:在程序运行过程中其值不能改变的量。C++支持5种类型的常量:浮点型、整型、字符型、布尔型和枚举型。常量在程序中一般以自身的存在形式体现其值。常量具有类型属性,类型决定了各种常量在内存中占据存储空间的大小。常量与变量2/6/202313东华大学计算机学院变量变量:指程序在运行时其值可改变的量。每个变量由一个变量名惟一标识。每个变量又具有一个特定的数据类型。不同类型的变量在内存中占有存储单元的个数不同。常量与变量2/6/202314东华大学计算机学院变量名的命名变量名的命名要遵守以下规则:不能是C++保留字。第一个字符必须是字母或下划线,中间不能有空格。变量名除了使用26个英文大小写字母和数字外,只能使用下划线。一般不要超过31个字符。变量名不要与C++中的库函数名、类名和对象名相同。常量与变量2/6/202315东华大学计算机学院C++的标准保留字asmautobreakcasecatchcharclassconstcontinuedefaultdeletedodoubleelseenumexternfloatforfriendgotoifinlineintlongnewoperatoroverloadprivateprotectedpublicregisterreturnshortsignedsizeofstaticstructswitchthistemplatethrowtrytypedefunionunsignedvirtualvoidvolatilewhile常量与变量2/6/202316东华大学计算机学院变量的定义和说明C++中,变量使用之前一定要定义或说明,变量定义的格式一般为:
[修饰符]类型变量名;[//注释]其中:类型指出变量所存放的数据的类型;变量名是任意合法的变量名;注释指明该变量的含义和用途;修饰符进一步描述了变量的使用方式。修饰符和注释是任选的,可以没有。常量与变量2/6/202317东华大学计算机学院变量的定义和说明多个同一类型的变量可以在一行中定义,中间用逗号隔开,也可以分别定义。例如:inta,b,c; //定义3个整型变量a,b,c和 inta; //定义整型变量a intb; //定义整型变量b intc; //定义整型变量c二者等价。常量与变量2/6/202318东华大学计算机学院变量初始化变量初始化一般采用两种方式。第一种方式:在定义变量时可以给变量赋一个初值,例如: inta=3; floatb=3.4; constintc=5;第二种方式:先定义变量,然后通过赋值语句使变量初始化,例如: inta; a=3;常量与变量2/6/202319东华大学计算机学院变量声明例:unsignedshortintNumberOfSisters;C++默认是signed(char除外)例:signedintMyAccountBalance;与intMyAccountBalance;是等价的。可以在程序块中的任意位置定义局部变量。常量与变量2/6/202320东华大学计算机学院#include<iostream>usingnamespacestd;voidmain(){constintPRICE=30;
intnum,total;
floatv,r,h;
num=10;
total=num*PRICE;cout<<total<<endl;r=2.5;h=3.2;v=3.14159*r*r*h;cout<<v<<endl;}常量变量变量先声明后使用符号常量常量与变量2/6/202321东华大学计算机学院#include<iostream>usingnamespacestd;voidmain(){constintPRICE=30;
intnum,total;floatv,r,h;
num=10;total=num*PRICE;cout<<total<<endl;r=2.5;h=3.2;v=3.14159*r*r*h;cout<<v<<endl;}整型常量shortunsignedshort2字节intunsignedint
4字节longunsignedlong4字节整型变量整型变量声明整型数据基本数据类型2/6/202322东华大学计算机学院整型数据类型说明字节*范围*short[int]短整型2-32768~32767signedshort[int]有符号短整型2-32768~32767unsignedshort[int]无符号短整型20~65535int整型4-2147483648~2147483647signed[int]有符号整型4-2147483648~2147483647unsigned[int]无符号整型40~4294967295long[int]长整型4-2147483648~2147483647signedlong[int]有符号长整型4-2147483648~2147483647unsignedlong[int]无符号长整型40~4294967295
*字节和范围依赖于系统的体系结构,表中数据所依赖的是32bit系统。基本数据类型2/6/202323东华大学计算机学院浮点型数据#include<iostream>usingnamespacestd;voidmain(){constintPRICE=30;intnum,total;floatv,r,h;num=10;total=num*PRICE;cout<<total<<endl;
r=2.5;
h=3.2;
v=3.14159*r*r*h;cout<<v<<endl;}浮点型常量float4字节3.4×10±387位有效数字double8字节1.7×10±30815位有效数字longdouble8字节1.7×10±30815位有效数字浮点型变量默认为double型后缀F(或f)为float型后缀L(或l)为longdouble型基本数据类型2/6/202324东华大学计算机学院浮点型数据常用示数方式:[+|-]Digits.Digits[F|f|L|l]基本数据类型2/6/202325东华大学计算机学院浮点型数据常用示数方式:[+|-]Digits.Digits[F|f|L|l]数字串基本数据类型2/6/202326东华大学计算机学院浮点型数据常用示数方式:[+|-]Digits.Digits[F|f|L|l]只允许省略其中一个数字串基本数据类型2/6/202327东华大学计算机学院浮点型数据常用示数方式:[+|-]Digits.Digits[
F
|
f|
L
|l
]可选的类型说明符基本数据类型2/6/202328东华大学计算机学院浮点型数据常用示数方式:[+|-]Digits.Digits[F|f|L|l]例如: -2.343.1416L29.00f.230.23基本数据类型2/6/202329东华大学计算机学院浮点型数据科学示数方式:[+|-]Digits.Digits[Exponent][F|f|L|l]基本数据类型2/6/202330东华大学计算机学院浮点型数据科学示数方式:[+|-]
Digits.Digits
[Exponent][F|f|L|l]尾数,数字串基本数据类型2/6/202331东华大学计算机学院浮点型数据科学示数方式:[+|-]
Digits.Digits
[Exponent][F|f|L|l]有指数部分时不能省略尾数部分基本数据类型2/6/202332东华大学计算机学院浮点型数据科学示数方式:[+|-]Digits.Digits[Exponent][F|f|L|l]可选择的指数部分基本数据类型2/6/202333东华大学计算机学院浮点型数据科学示数方式:[+|-]Digits.Digits[Exponent][F|f|L|l]指数部分的表示形式:(e|E)[+|-]Digits基本数据类型2/6/202334东华大学计算机学院浮点型数据科学示数方式:[+|-]Digits.Digits[Exponent][F|f|L|l](e|
E
)[+|-]Digits以字母e或E开始指数部分的表示形式:基本数据类型2/6/202335东华大学计算机学院浮点型数据科学示数方式:[+|-]Digits.Digits[Exponent][F|f|L|l](e|E)[
+
|-
]Digits可选符号指数部分的表示形式:基本数据类型2/6/202336东华大学计算机学院浮点型数据科学示数方式:[+|-]Digits.Digits[Exponent][F|f|L|l](e|E)[+|-]
Digits整数数字串指数部分的表示形式:基本数据类型2/6/202337东华大学计算机学院浮点型数据科学示数方式:[+|-]Digits.Digits[Exponent][F|f|L|l](e|E)[+|-]Digits例如: 1.23E100.23E-445.e+23-23.68E12 1.23E10F0.23E-4f45.e+23L-23.68E12L指数部分的表示形式:基本数据类型2/6/202338东华大学计算机学院字符型数据字符常量:单引号括起来的一个字符,如:'a','D','?','$'字符变量:用来存放字符常量
例:charc1,c2;
c1='a';
c2='A';基本数据类型2/6/202339东华大学计算机学院字符型数据字符数据在内存中的存储形式:以ASCII码存储,占1字节,用7个二进制位;C++的字符型数据与整型数据密切相关,以ASCII值参与运算。例如:
'A''4'','''''空格符空字符基本数据类型2/6/202340东华大学计算机学院字符型数据字符数据在内存中的存储形式:以ASCII码存储,占1字节,用7个二进制位;C++的字符型数据与整型数据密切相关,以ASCII值参与运算。
例如:
'a'<'b'
'0'>'2'
'B'+1 '2'+1基本数据类型2/6/202341东华大学计算机学院字符型数据字符数据在内存中的存储形式:以ASCII码存储,占1字节,用7个二进制位;C++的字符型数据与整型数据密切相关,以ASCII值参与运算。
例如:
'a'<'b'
'0'>'2'
'B'+1 '2'+1结果为1(逻辑真)基本数据类型2/6/202342东华大学计算机学院字符型数据字符数据在内存中的存储形式:以ASCII码存储,占1字节,用7个二进制位;C++的字符型数据与整型数据密切相关,以ASCII值参与运算。
例如:
'a'<'b'
'0'>'2'
'B'+1 '2'+1结果为0(逻辑假)基本数据类型2/6/202343东华大学计算机学院字符型数据字符数据在内存中的存储形式:以ASCII码存储,占1字节,用7个二进制位;C++的字符型数据与整型数据密切相关,以ASCII值参与运算。
例如:
'a'<'b'
'0'>'2'
'B'+1 '2'+1结果为<int,67>基本数据类型2/6/202344东华大学计算机学院字符型数据字符数据在内存中的存储形式:以ASCII码存储,占1字节,用7个二进制位;C++的字符型数据与整型数据密切相关,以ASCII值参与运算。
例如:
'a'<'b'
'0'>'2'
'B'+1 '2'+1结果为<int,51>基本数据类型2/6/202345东华大学计算机学院字符型数据字符数据在内存中的存储形式:以ASCII码存储,占1字节,用7个二进制位;C++的字符型数据与整型数据密切相关,以ASCII值参与运算。转义字符:\escape_character
以"\"为前缀,表示改变后面escape_character符号或整数值的意义,使其成为控制符或字符值。基本数据类型2/6/202346东华大学计算机学院C++常用转义符名称字符形式值空字符(Null)\00X00换行(NewLine)\n0X0A换页(FormFeed)\f0X0C回车(CarriageReturn)\r0X0D退格(BackSpasc)\b0X08响铃(Bell)\a0X07水平制表(HorizontalTab)\t0X09垂直制表(VerticalTab)\v0X0B反斜杠(backslash)\\0X5C问号(questionmark)\?0X3F单引号(singlequote)\′0X27双引号(doublequote)\〞0X22基本数据类型2/6/202347东华大学计算机学院转义字符示例#include<iostream>usingnamespacestd;voidmain(){cout<<"\x07operating\tsystem\n";cout<<'\101'<<'\t'<<'A'<<'\012';}基本数据类型2/6/202348东华大学计算机学院转义字符示例#include<iostream>usingnamespacestd;voidmain(){cout<<"\x07operating\tsystem\n";cout<<'\101'<<'\t'<<'A'<<'\012';}响铃,等价于\a基本数据类型2/6/202349东华大学计算机学院转义字符示例#include<iostream>usingnamespacestd;voidmain(){cout<<"\x07operating\tsystem\n";cout<<'\101'<<'\t'<<'A'<<'\012';}横向跳一制表符基本数据类型2/6/202350东华大学计算机学院转义字符示例#include<iostream>usingnamespacestd;voidmain(){cout<<"\x07operating\tsystem\n";cout<<'\101'<<'\t'<<'A'<<'\012';}换行基本数据类型2/6/202351东华大学计算机学院转义字符示例#include<iostream>usingnamespacestd;voidmain(){cout<<"\x07operating\tsystem\n";cout<<'\101'<<'\t'<<'A'<<'\012';}字符'A'的ASCII码,与'A'等价基本数据类型2/6/202352东华大学计算机学院布尔型数据布尔型变量的说明:例:boolflag;布尔型数据的取值:只有false和true两个值基本数据类型2/6/202353东华大学计算机学院运算符与表达式在程序中,表达式是计算求值的基本单位,它是由运算符和运算数组成的式子。运算符是表示进行某种运算的符号。运算数包含常量、变量和函数等。C++语言的运算符按其在表达式中与运算对象的关系(连接运算对象的个数)可分为:单目运算(一元运算符,只需一个操作数)双目运算(二元运算符,需两个操作数)三目运算(三元运算符,需三个操作数)运算符与表达式2/6/202354东华大学计算机学院运算符单目运算符:
运算符右操作数例如: -123 +500双目运算符:
左操作数运算符右操作数例如: a*3 x>y三目运算符:条件运算:操作数1?操作数2:操作数3例如: a?b:c运算符与表达式2/6/202355东华大学计算机学院算术运算符+-*/%++--关系运算符><==>=<=!=逻辑运算符!&&||位运算符<<>>~|^&
赋值运算符=及扩展的复合运算符条件运算符?:逗号运算符,指针运算符*&求字节运算符sizeof强制类型转换符类型分量运算符.->下标运算符[]其他()::newdelete运算符的种类运算符与表达式2/6/202356东华大学计算机学院运算符优先级括号++,--,sizeof*,/,%+,-==,!=位运算&&||?:赋值运算逗号运算低高运算符与表达式2/6/202357东华大学计算机学院表达式表达式:由数据和运算符,按求值规则,表达一个值的式子。表达式可以分为:算术表达式;逻辑表达式;赋值表达式;条件表达式;逗号表达式。运算符与表达式2/6/202358东华大学计算机学院算术运算符算术运算符有双目运算和单目运算两种。包括:+加法,或单目求正-减法,或单目求负*乘法/除法%求模(求余)sizeof求存储字节运算符与表达式2/6/202359东华大学计算机学院算术表达式算术表达式:由算术运算符和操作数组成,结果是算术值。当双目运算符的两个操作数都是整型,结果值为整型。运算例子结果+2+3;<5,int>5+10;<15,int>-13–4;<9,int>4–7;<-3,int>*3*4;<12,int>5*11;<55,int>/8/2;<4,int>6/4;<1,int>4/5;<0,int>-11/2;<-5,int>或<-6,int>6/0;<undef,int>%10%3;<1,int>23%4;<3,int>5%0;<undef,int>sizeofsizeof(256)<4,int>sizeof(int)<4,int>运算符与表达式2/6/202360东华大学计算机学院算术表达式算术表达式:由算术运算符和操作数组成,结果是算术值。当双目运算符的两个操作数都是整型,结果值为整型。运算例子结果+2+3;<5,int>5+10;<15,int>-13–4;<9,int>4–7;<-3,int>*3*4;<12,int>5*11;<55,int>/8/2;<4,int>6/4;<1,int>4/5;<0,int>-11/2;<-5,int>或<-6,int>6/0;<undef,int>%10%3;<1,int>23%4;<3,int>5%0;<undef,int>sizeofsizeof(256)<4,int>sizeof(int)<4,int>简单截取整数部分运算符与表达式2/6/202361东华大学计算机学院算术表达式算术表达式:由算术运算符和操作数组成,结果是算术值。当双目运算符的两个操作数都是整型,结果值为整型。运算例子结果+2+3;<5,int>5+10;<15,int>-13–4;<9,int>4–7;<-3,int>*3*4;<12,int>5*11;<55,int>/8/2;<4,int>6/4;<1,int>4/5;<0,int>-11/2;<-5,int>或<-6,int>6/0;<undef,int>%10%3;<1,int>23%4;<3,int>5%0;<undef,int>sizeofsizeof(256)<4,int>sizeof(int)<4,int>由编译器决定运算符与表达式2/6/202362东华大学计算机学院算术表达式算术表达式:由算术运算符和操作数组成,结果是算术值。当双目运算符的两个操作数都是整型,结果值为整型。运算例子结果+2+3;<5,int>5+10;<15,int>-13–4;<9,int>4–7;<-3,int>*3*4;<12,int>5*11;<55,int>/8/2;<4,int>6/4;<1,int>4/5;<0,int>-11/2;<-5,int>或<-6,int>6/0;<undef,int>%10%3;<1,int>23%4;<3,int>5%0;<undef,int>sizeofsizeof(256)<4,int>sizeof(int)<4,int>除数为0,溢出,无值定义运算符与表达式2/6/202363东华大学计算机学院算术表达式算术表达式:由算术运算符和操作数组成,结果是算术值。当双目运算符的两个操作数都是整型,结果值为整型。运算例子结果+2+3;<5,int>5+10;<15,int>-13–4;<9,int>4–7;<-3,int>*3*4;<12,int>5*11;<55,int>/8/2;<4,int>6/4;<1,int>4/5;<0,int>-11/2;<-5,int>或<-6,int>6/0;<undef,int>%10%3;<1,int>23%4;<3,int>5%0;<undef,int>sizeofsizeof(256)<4,int>sizeof(int)<4,int>求模(求余数)运算符与表达式2/6/202364东华大学计算机学院算术表达式算术表达式:由算术运算符和操作数组成,结果是算术值。当双目运算符的两个操作数都是整型,结果值为整型。运算例子结果+2+3;<5,int>5+10;<15,int>-13–4;<9,int>4–7;<-3,int>*3*4;<12,int>5*11;<55,int>/8/2;<4,int>6/4;<1,int>4/5;<0,int>-11/2;<-5,int>或<-6,int>6/0;<undef,int>%10%3;<1,int>23%4;<3,int>5%0;<undef,int>sizeofsizeof(256)<4,int>sizeof(int)<4,int>除数为0,无值定义运算符与表达式2/6/202365东华大学计算机学院算术表达式算术表达式:由算术运算符和操作数组成,结果是算术值。当双目运算符的两个操作数都是整型,结果值为整型。运算例子结果+2+3;<5,int>5+10;<15,int>-13–4;<9,int>4–7;<-3,int>*3*4;<12,int>5*11;<55,int>/8/2;<4,int>6/4;<1,int>4/5;<0,int>-11/2;<-5,int>或<-6,int>6/0;<undef,int>%10%3;<1,int>23%4;<3,int>5%0;<undef,int>sizeofsizeof(256)<4,int>sizeof(int)<4,int>操作数可以是常量,变量,类型运算符与表达式2/6/202366东华大学计算机学院除求余%运算外,浮点数可以进行各种算术运算。运算例子结果+2.0+.33;<2.33,double>5.1+10.0;<15.1,double>-13.6–4.2;<9.4,double>4.0–7.0;<-3.0,double>*3.0*4.4;<13.2,double>7.5*11.0;<82.5,double>/8.6/2.0;<4.3,double>5.0/4.0;<1.25,double>-11.0/4.0;<-2.75,double>6.0/0.0;<undef,idouble>sizeofsizeof(3.1415)<8,int>sizeof(double)<8,int>当双目运算符的两个操作数都是整型,结果值为整型。算术表达式运算符与表达式2/6/202367东华大学计算机学院单目算术运算——右结合单目负号操作符例如:-23 -12.3单目正号操作符例如: +244 +0.618算术运算符与算术表达式运算符与表达式2/6/202368东华大学计算机学院赋值运算符(=,Assignation)赋值运算符=的一般格式为:变量=表达式;表示将其右侧的表达式求出结果,赋给其左侧的变量。例如:inti;i=3*(4+5); //i的值变为27运算符与表达式2/6/202369东华大学计算机学院赋值表达式赋值表达式本身的运算结果是右侧表达式的值,而结果类型是左侧变量的数据类型。例如:inti=1.2*3; //结果为3,而不是3.6赋值运算符的结合性是从右至左的,因此,C++程序中可以出现连续赋值的情况。例如,下面的赋值是合法的:
inti,j,k;i=j=k=10; //i,j,k都赋值为1 运算符与表达式2/6/202370东华大学计算机学院//assignationoperator#include<iostream>usingnamespacestd;intmain(){inta,b;//a:?,b:?a=10;//a:10,b:?b=4;//a:10,b:4a=b;//a:4,b:4b=7;//a:4,b:7cout<<"a:";cout<<a;cout<<"b:";cout<<b;return0;}运算符与表达式2/6/202371东华大学计算机学院复合赋值运算符(Compoundassignation)有10种复合运算符:
+=,-=,*=,/=,%=,<<=,>>=,&=,^=,|=例
a+=3等价于a=a+3
x*=y+8等价于x=x*(y+8)运算符与表达式2/6/202372东华大学计算机学院赋值表达式举例a=5; //表达式值为5a=b=c=5; //表达式值为5,a,b,c均为5a=5+(c=6); //表达式值为11,a为11,c为6a=(b=4)+(c=6);
//表达式值为10,a为10,b为4,c为6a=(b=10)/(c=2);//表达式值为5,a为5,b为10,c为2a+=a-=a*a;//相当于a=a+(a=a-a*a)运算符与表达式2/6/202373东华大学计算机学院//compundassignation#include<iostream>usingnamespacestd;intmain(){inta,b=3;a=b;
a+=2;
//equivalenttoa=a+2
cout<<a;return0;}赋值表达式举例运算符与表达式2/6/202374东华大学计算机学院自增(Increase,++),自减(Decrease,--)自增(++)、自减(--)运算符为变量的增1和减1提供了紧凑格式。自增、自减运算符都是单目运算符,其作用是使变量的值增1或减1。运算符与表达式2/6/202375东华大学计算机学院自增(Increase,++),自减(Decrease,--)自增、自减运算符的运算对象只能是整型变量,不能为常量或表达式。例:
5++ ++(a++) (x+y)-- 错误运算符与表达式2/6/202376东华大学计算机学院自增(Increase,++),自减(Decrease,--)C++编译器在处理时尽可能多的自左向右将运算符结合在一起。例:
a+++b表示为(a++)+b,而不是a+(++b)。运算符与表达式2/6/202377东华大学计算机学院自增(Increase,++),自减(Decrease,--)在调用函数时,实参的求值顺序一般为自右向左。而不是PASCAL语言那样自左向右。例: inta=1; printf(“%d,%d,%d”,a++,a++,a++); 输出的结果为3,2,1;而不是1,2,3。运算符与表达式2/6/202378东华大学计算机学院自增(Increase,++),自减(Decrease,--)++、--运算符均为右结合,后缀式为书写特例;自增式和自减式作为独立的表达式,前缀式和后缀式没有区别;但作为表达式右值时:(1)前缀式先增值后引用
例:
x=++i
相当于
i=i+1;x=i;
(2)后缀式先引用后增值
例:
x=i++
相当于
x=i;i=i+1;
运算符与表达式2/6/202379东华大学计算机学院自增(Increase,++),自减(Decrease,--)Example1Example2B=3;
A=++B;
//Acontains4,Bcontains4B=3;
A=B++;
//Acontains3,Bcontains4运算符与表达式2/6/202380东华大学计算机学院自增(Increase,++),自减(Decrease,--)例:
inta=3; intb=++a; //相当于a=a+1;b=a; intc=a++; //相当于c=a;a=a+1; b=a--; //相当于b=a;a=a-1; c=--a;
//相当于a=a-1;c=a;
++(a++);
//错(a++)不是变量名
c=a++b;
//错a++无法对b操作
c=a+++b;
//相当于c=a+b;a=a+1;
c=a++++b;
//(a++)++b错注意:编译扫描器优先向左识别算符运算符与表达式2/6/202381东华大学计算机学院自增(Increase,++),自减(Decrease,--)//例#include<iostream>usingnamespacestd;voidmain(){inta=3,b,c;b=++a; cout<<"a="<<a<<'\t'<<"b="<<b<<endl;c=a++; cout<<"a="<<a<<'\t'<<"c="<<c<<endl;b=--a; cout<<"a="<<a<<'\t'<<"b="<<b<<endl;c=a--; cout<<"a="<<a<<'\t'<<"c="<<c<<endl;c=a+++b; cout<<"a="<<a<<'\t'<<"c="<<c<<endl;}运算符与表达式2/6/202382东华大学计算机学院自增(Increase,++),自减(Decrease,--)//例#include<iostream>usingnamespacestd;voidmain(){inta=3,b,c;b=++a; cout<<"a="<<a<<'\t'<<"b="<<b<<endl;c=a++; cout<<"a="<<a<<'\t'<<"c="<<c<<endl;b=--a; cout<<"a="<<a<<'\t'<<"b="<<b<<endl;c=a--; cout<<"a="<<a<<'\t'<<"c="<<c<<endl;
c=a+++b; cout<<"a="<<a<<'\t'<<"c="<<c<<endl;}c=a+b,a=a+1;运算符与表达式2/6/202383东华大学计算机学院关系(Relational)运算符与关系表达式关系运算符是比较简单的一种逻辑运算符,优先次序为:
<<=>>===!=
优先级相同(高)优先级相同(低)关系表达式是一种最简单的逻辑表达式,其结果类型为bool,值只能为true或false。例如:a>b,c<=a+b,x+y==3运算符与表达式2/6/202384东华大学计算机学院关系(Relational)运算符与关系表达式关系运算符的优先级低于算术运算符。例:
a+b>c 等价于(a+b)>c
a!=b>c等价于a!=(b>c)运算符与表达式2/6/202385东华大学计算机学院逻辑(Logical)运算符与逻辑表达式逻辑运算符:
!(非)&&(与)||(或)
优先次序:高→低逻辑表达式:
例如:(a>b)&&(x>y)
其结果类型为bool,值只能为true或false。运算符与表达式2/6/202386东华大学计算机学院逻辑运算真值表逻辑运算真值(真为非0,假为0)aba&&ba||b!a!b0000110非00110非000101非0非01100运算符与表达式2/6/202387东华大学计算机学院条件(Conditional)运算符与条件表达式一般形式:表达式1?表达式2:表达式3表达式1必须是bool类型执行顺序:先求解表达式1;若表达式1的值为true,则求解表达式2,表达式2的值为最终结果;若表达式1的值为false,则求解表达式3,表达式3的值为最终结果。例:x=a>b?a:b;运算符与表达式2/6/202388东华大学计算机学院条件(Conditional)运算符与条件表达式注意:条件运算符优先级高于赋值运算符,低于逻辑运算符。表达式2、3的类型可以不同,条件表达式的最终类型为2和3中较高的类型。例:x=a>b?a:b;①②运算符与表达式2/6/202389东华大学计算机学院//conditionaloperator#include<iostream>usingnamespacestd;intmain(){inta,b,c;a=2;b=7;c=(a>b)?a:b;cout<<c;return0;}条件(Conditional)运算符与条件表达式运算符与表达式2/6/202390东华大学计算机学院逗号(Comma)运算符与条件表达式逗号运算符用于将多个表达式连在一起,并将各表达式从左到右的顺序依次求值,但只有其最右端的表达式的结果,作为整个逗号表达式的结果。运算符与表达式2/6/202391东华大学计算机学院逗号(Comma)运算符与条件表达式格式:表达式1,表达式2求解顺序及结果:先求解1,再求解2,最终结果为表达式2的值。例:a=3*5,a*4;最终结果为60运算符与表达式2/6/202392东华大学计算机学院sizeof运算符语法形式:sizeof(类型名)或sizeof(表达式)结果值:类型名所指定的类型或表达式的结果类型所占的字节数。例1:a=sizeof(char);例2:doublesalary=1000;b=sizeof(salary);运算符与表达式2/6/202393东华大学计算机学院位(bitwise)运算符operatorasmequivalentdescription&ANDBitwiseAND|ORBitwiseInclusiveOR^XORBitwiseExclusiveOR~NOTUnarycomplement(bitinversion)<<SHLShiftLeft>>SHRShiftRight运算符与表达式2/6/202394东华大学计算机学院位(bitwise)运算符—按位与(&)运算规则将两个运算量的每一个位进行逻辑与操作举例:计算3&53:000000115:(&)000001013&5:00000001用途:将某一位置0,其他位不变。例如:
将char型变量a的最低位置0:a=a&0376;取指定位。
例如:有charc;inta;
取出a的低字节,置于c中:c=a&0377;运算符与表达式2/6/202395东华大学计算机学院位(bitwise)运算符—按位或(|)运算规则将两个运算量的每一个位进行逻辑或操作举例:计算3|53:000000115:(|)000001013|5:00000111用途:将某些位置1,其他位不变。
例如:将int型变量a的低字节置1:
a=a|0xff;运算符与表达式2/6/202396东华大学计算机学院位(bitwise)运算符—按位异或(^)运算规则两个操作数进行异或:
若对应位相同,则结果该位为0,
若对应位不同,则结果该位为1,举例:计算071^052071: 00111001052:(^)00101010071^052: 00010011运算符与表达式2/6/202397东华大学计算机学院位(bitwise)运算符—按位异或(^)用途:使特定位翻转(与0异或保持原值,与1异或取反)例如:要使01111010低四位翻转: 01111010(^) 00001111 01110101运算符与表达式2/6/202398东华大学计算机学院位(bitwise)运算符—取反(~)单目运算符,对一个二进制数按位取反例:025:0000000000010101
~025:1111111111101010运算符与表达式2/6/202399东华大学计算机学院位(bitwise)运算符—移位左移运算(<<)左移后:低位补0,高位舍弃。右移运算(>>)右移后:低位:舍弃。高位:无符号数:补0;有符号数:补符号位。运算符与表达式2/6/2023100东华大学计算机学院运算符的多义性运算符的意义与上下文相关。inta=35;int&ra=a;int*p=&a;a=ra*4;*p=5**p;运算符与表达式2/6/2023101东华大学计算机学院运算符的多义性运算符的意义与上下文相关。inta=35;int&ra=a;int*p=&a;a=ra*4;*p=5**p;引用说明符运算符与表达式2/6/2023102东华大学计算机学院运算符的多义性运算符的意义与上下文相关。inta=35;int&ra=a;int*p=&a;a=ra*4;*p=5**p;取址运算运算符与表达式2/6/2023103东华大学计算机学院运算符的多义性运算符的意义与上下文相关。inta=35;int&ra=a;int*p=&a;a=ra*4;*p=5**p;指针说明符运算符与表达式2/6/2023104东华大学计算机学院运算符的多义性运算符的意义与上下文相关。inta=35;int&ra=a;int*p=&a;a=ra*4;*p=5**p;算术乘运算符运算符与表达式2/6/2023105东华大学计算机学院运算符的多义性运算符的意义与上下文相关。inta=35;int&ra=a;int*p=&a;a=ra*4;*p=5**p;间址访问运算符与表达式2/6/2023106东华大学计算机学院数据类型转换C++中数据类型转换有两类,即隐式类型转换和显式类型转换。隐式类型转换:由编译器自动完成的类型转换。当编译器遇到不同类型的数据参与同一运算时,会自动将它们转换为相同类型后再进行运算,赋值时会把所赋值的类型转换为与被赋值变量类型一样。隐式类型转换按从低到高的顺序进行。数据类型转换2/6/2023107东华大学计算机学院隐式类型转换整型(int)短整型,字符型(short,char)单精度浮点型(float)双精度浮点型(double)无符号长整型(unsignedlong)长整型(long)无符号整型(unsigned)2/6/2023108东华大学计算机学院显式数据转换显式类型转换是由程序员显式指出的类型转换,转换形式有两种:类型名(表达式)(类型名)表达式这里的类型名是任何合法的C++数据类型,例如float、int等。通过类型的显式转换可以将表达式转换成适当的类型。 例如:
doublef=3.6; intn=(int)f; 这样n为3。
显式数据转换2/6/2023109东华大学计算机学院数组数组:指具有一定顺序关系的若干相同类型变量的集合体,组成数组的变量称为该数组的元素。数组的类型就是数组元素的数据类型。数组属于构造类型。
根据数组的维数,分为一维数组、二维数组和多维数组,常用的是一维和二维数组。2/6/2023110东华大学计算机学院一维数组的声明数组—一维数组一维数组的声明:类型说明符数组名[常量表达式];
例如:inta[10];
表示a为整型数组,有10个元素:a[0]...a[9]对上面的数组a,也可采用如下的声明方式:constintsize=10;inta[size];注意:在声明数组时,不能用变量来描述数组声明中的元素个数。例如:int
b[n];是不合法的2/6/2023111东华大学计算机学院一维数组的引用一维数组的引用:必须先声明,后使用。只能逐个引用数组元素,而不能一次引用整个数组。注意:声明与引用形式上的相似与含义上的区分。声明时,指数组的大小空间。引用时,指引用下标标识的数组元素。例如:a[0]=a[5]+a[7]-a[2*3]数组—一维数组2/6/2023112东华大学计算机学院#include<iostream>usingnamespacestd;intmain(){intA[10],B[10];inti;for(i=0;i<10;i++){
A[i]=i*2-1;
B[10-i-1]=A[i];}for(i=0;i<10;i++){ cout<<"A["<<i<<"]="<<A[i]; cout<<"B["<<i<<"]="<<B[i]<<endl;}}示例:一维数组的声明与引用数组—一维数组2/6/2023113东华大学计算机学院一维数组的存储顺序数组元素在内存中顺次存放,它们的地址是连续的。例如:具有10个元素的数组a,在内存中的存放次序如下:数组名字是数组首元素的内存地址。数组名是一个常量,不能被赋值。a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]a数组—一维数组2/6/2023114东华大学计算机学院一维数组的初始化可以在编译阶段使数组得到初值:在声明数组时对数组元素赋以初值。
例如:staticinta[10]={0,1,2,3,4,5,6,7,8,9};可以只给一部分元素赋初值。前面的元素按顺序初始化相应的值,后面不足的部分由系统自动初始化为0(对数值数组)或空字符‘\0’(对字符数组)
例如:staticinta[10]={0,1,2,3,4};在对全部数组元素赋初值时,可以不指定数组长度。
例如:staticinta[]={1,2,3,4,5}数组—一维数组2/6/2023115东华大学计算机学院一维数组的初始化对于字符型数组的初始化,除了上面介绍的方式外,还可以:将整个字符型数组一次性赋值为一个字符串。例如,下面三种赋值方式是等价的:chard[6]={‘h’,’e’,’l’,’l’,’o’,’\0’};chard[6]={“hello”};chard[6]=“hello”;数组—一维数组2/6/2023116东华大学计算机学院数组的赋值用=
赋值:与数组元素的初始化不同,在给数组元素进行赋值时,必须逐一赋值。例如:对于下述数组的初始化:inta[3]={1,2,3};其等价的赋值形式如下:inta[3];a[0]=1;a[1]=2;a[2]=3;数组—一维数组2/6/2023117东华大学计算机学院数组的赋值若要在数组之间进行赋值,也只能一个一个元素地进行。例如:将上述数组a的值赋给另一个同样大小的数组b,可以利用下面的循环完成赋值操作:for(i=0;i<3;i++)b[i]=a[i];数组—一维数组2/6/2023118东华大学计算机学院数组的赋值用流命令赋值:其语法格式为:cin>>数组名;或
cin>>数组名[下标];例如:对一个大小为5的字符型数组a赋值,可以用下列两种方式:chara[5];或chara[5];cin>>a;inti;for(i=0;i<5;i++)cin>>a[i];数组—一维数组2/6/2023119东华大学计算机学院数组的赋值用scanf()函数赋值:其语法格式为:scanf(“类型格式”,数组名);或scanf(“类型格式”,数组元素地址);数组—一维数组2/6/2023120东华大学计算机学院数组的赋值用C++库函数中的字符串拷贝函数strcpy()赋值:其常见的语法格式为:strcpy(数组名,字符串);//将一个字符串赋值到一个字符数组中例如:charstr1[10];strcpy(str1,”hello”);注意,此例不能写为:str1=“hello”;//不合法数组—一维数组2/6/2023121东华大学计算机学院数组的赋值用C++库函数中的字符串拷贝函数strcpy()赋值:另一种常见的语法格式为:strcpy(数组名1,数组名2);//将数组2中的字符串赋值到数组1中例如:strcpy(str1,str2);注意,此例不能写为:str1=str2;//不合法数组—一维数组2/6/2023122东华大学计算机学院数组越界在给数组元素赋值或对数组元素进行引用时,一定要注意下标的值不要超过数组的范围,否则会产生数组越界的问题。常用下面的式子确定数组的大小,预防数组越界情况的发生。例如:对于一个整型数组a,它的大小为:sizeof(a)/sizeof(int);使用上面这个式子,可以使数组大小计算在16位机器和32位机器之间移植。数组—一维数组2/6/2023123东华大学计算机学院一维数组应用举例循环从键盘读入若干组选择题答案,计算并输出每组答案的正确率,直到输入ctrl+z为止。每组连续输入5个答案,每个答案可以是'a'..'d'。数组—一维数组2/6/2023124东华大学计算机学院#include<iostream>usingnamespacestd;intmain(){charkey[]={'a','c','b','a','d'};charc;intques=0,numques=5,numcorrect=0;cout<<"Enterthe"<<numques<<"questiontests:"<<endl;while(cin.get(c)){if(c!='\n') if(c==key[ques]) {num
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 承包订单合同范本
- 还欠款合同范本
- 《国际贸易理论与实务》真题和答案
- 钢架合同范本简易
- 北辰区运输危化品合同范本
- 简单石料合同范本
- 垃圾保洁合同范本
- 糖尿病老年护理
- 消化性溃疡的规范治疗
- 店铺正规合同范本
- 《制作实验装置模拟吸烟有害健康》跨学科实践主题学习单元教学设计
- 国际学术交流英语知到章节答案智慧树2023年哈尔滨工业大学
- 三年级美术上册 天然的纹理 教学课件
- 大学英语I智慧树知到答案章节测试2023年桂林电子科技大学
- 机动车维修竣工出厂合格证
- GB/T 29894-2013木材鉴别方法通则
- 某厂房主体结构验收汇报材料
- GB/T 20466-2006水中微囊藻毒素的测定
- GB/T 18168-2008水上游乐设施通用技术条件
- 哈工大《光电测量技术》ppt
- 冰冻切片制作与质量控制课件
评论
0/150
提交评论