1、第二章第二章基本数据类型与表达式基本数据类型与表达式第1页,共51页。第二章第二章 基本数据类型与表达式基本数据类型与表达式本章内容主要有本章内容主要有:C+C+数据类型数据类型 符号常量与常值变量符号常量与常值变量 数值、逻辑表达式数值、逻辑表达式 自定义类型修饰符自定义类型修饰符 表达式的副作用与表达式语句表达式的副作用与表达式语句 第2页,共51页。学习的目标学习的目标 了解了解C+C+基本数据类型基本数据类型 了解符号常量与常值变量了解符号常量与常值变量 了解自定义类型修饰符了解自定义类型修饰符 掌握数值、逻辑表达式掌握数值、逻辑表达式 掌握表达式的副作用与表达式语句掌握表达式的副作用
2、与表达式语句第二章第二章 基本数据类型与表达式基本数据类型与表达式第3页,共51页。2.1 C+数据类型概述数据类型概述数据类型是指定义了一组数据以及定义数据类型是指定义了一组数据以及定义在这一组数据的操作,它是程序中最基在这一组数据的操作,它是程序中最基本的元素。本的元素。在程序设计中类型具有重要的意义。在程序设计中类型具有重要的意义。C+预定义了丰富的数据类型,也允许预定义了丰富的数据类型,也允许用户自定义数据类型。用户自定义数据类型。C+数据类型分为:基本数据类型和构数据类型分为:基本数据类型和构造数据类型。造数据类型。第4页,共51页。2.1 C+数据类型概述数据类型概述基本数据类型:
3、基本数据类型:1、整型类、整型类包括整型(包括整型(int)、短整型)、短整型(short)、长整型()、长整型(long)还有与整数)还有与整数兼容的数据类型,包括字符型(兼容的数据类型,包括字符型(char)、)、枚举型(枚举型(enum)和逻辑型(布尔型)和逻辑型(布尔型bool)。)。2、实型类(浮点型)、实型类(浮点型)包括单精度包括单精度(float)、双精度(、双精度(double)和长双精度)和长双精度(long double)。)。第5页,共51页。2.1 C+数据类型概述数据类型概述构造数据类型:构造数据类型:1、指针类、指针类包括指针和应用包括指针和应用2、数组。、数组。
4、3、记录类、记录类包括结构包括结构struct和联合和联合(union)。)。第6页,共51页。2.1 C+数据类型概述数据类型概述为什么要区分数据类型?为什么要区分数据类型?1、规定了不同数据类型在内存中的存储格、规定了不同数据类型在内存中的存储格式不同。式不同。C+语言中的整型数和实型数与语言中的整型数和实型数与数学中的整数和实数有区别。数学中的整数和实数有区别。2、对不同的类型数据所能实施的操作不同。、对不同的类型数据所能实施的操作不同。如两个整型数据可以相加,而两个记录数如两个整型数据可以相加,而两个记录数据不能相加。据不能相加。第7页,共51页。2.1 C+数据类型概述数据类型概述数
5、据最常用的表现形式:数据最常用的表现形式:1、常量、常量在程序运行中不变,其数据类在程序运行中不变,其数据类型可分为整型(型可分为整型(123)、实型()、实型(12.4)、)、字符型(字符型(s)和字符串型()和字符串型(Hello,你们你们好好!)。)。2、变量、变量在程序运行中可变,变量名必在程序运行中可变,变量名必须实合法的标识符(区分大小些),即只须实合法的标识符(区分大小些),即只能是数字、字母和下划线,而且第一个字能是数字、字母和下划线,而且第一个字符不能是数字。符不能是数字。第8页,共51页。2.2.1.各种整型数据的基本情况(课本表各种整型数据的基本情况(课本表2-1)整型前
6、面可以加上整型前面可以加上signed(有符号型)或(有符号型)或unsigned(无符号型)、(无符号型)、long(长整型)或(长整型)或short(短整型)来(短整型)来修饰。修饰。其中其中signed和和unsigned不能同时出现,不能同时出现,long和和short也不能同时出现。也不能同时出现。在三种不同的规格中短整型(在三种不同的规格中短整型(short、unsigned short)中用空间最少,表示的范围也最少;长整)中用空间最少,表示的范围也最少;长整型(型(long,unsigned long)表示的范围最大,)表示的范围最大,占用的空间也最大。占用的空间也最大。2.2
7、 整型数据整型数据第9页,共51页。2.2 整型数据整型数据2.2.2.短整型常量表示方法短整型常量表示方法短整型常量是借助整型常量来表示的,短整短整型常量是借助整型常量来表示的,短整型无条件的转换为整型。型无条件的转换为整型。2.整型常量表示方法:整型常量表示方法:1)十进制。)十进制。2)八进制整型常量)八进制整型常量必须以必须以0打头,其后打头,其后有有07之间的数字组成。如之间的数字组成。如0123)十六进制整型常量)十六进制整型常量以以0 x或或0X打头,打头,其后其后09之间的数和英文字母之间的数和英文字母af(或(或AF组成)。如组成)。如0X32,0 xA8等。等。第10页,共
8、51页。3、整型常量加后缀,以区分各种不同类、整型常量加后缀,以区分各种不同类型的整数型的整数1)后缀L(或l)。表示长整型常量(long int型)如-56L,4562l;2)后缀U(或u)。表示无符号整型常量(unsigned int型)如85U,20u;3)后缀L(或l)和U(或l)组合,表示无符号长整型常量(unsigned long int型)如464LU,586Lu,4645lU,123lu。2.2 整型数据整型数据第11页,共51页。2.2.3 整型变量的定义和初始化。整型变量的定义和初始化。变量是用来存放数据的存放数据的,因此应具有相应相应的类型,的类型,C+中每个变量都属于一
9、个特定的类型,变量类型决定了它在内存中的存储形式及取值范围。引用一个变量名之前必须先声明变量的类先声明变量的类型,限定用法和操作,保型,限定用法和操作,保证不会进行非法的操作。2.2 整型数据整型数据第12页,共51页。2.2 整型数据整型数据C+中,变量必须先定义,后使用。变量必须先定义,后使用。不一定先定义,随定随用。变量定义使用一个声明语句。格式:类型格式:类型 变量名;变量名;或 类型类型 变量名变量名1,变量,变量2,-变量变量n;变量名的命名要遵守以下规则:不能是不能是C+C+关键字。关键字。C+C+的关键字如下表所所示。的关键字如下表所所示。第一个字符必须是字母或下划线,中间不能
10、有空格。第一个字符必须是字母或下划线,中间不能有空格。变量名除了使用变量名除了使用2626个英文大小写字母和数字外,只能个英文大小写字母和数字外,只能使用下划线。使用下划线。一般不要超过一般不要超过3131个字符。个字符。变量名不要与变量名不要与C+C+中的库函数名、类名和对象名相同。中的库函数名、类名和对象名相同。例如,下列变量名是合法的变量名:例如,下列变量名是合法的变量名:a123 c3b file_1a123 c3b file_1 例如:例如:语句语句 int x,y;/int x,y;/定义了一个整型变量定义了一个整型变量 char ch;/char ch;/定义了一个字符型变量定义
11、了一个字符型变量第13页,共51页。2.2 整型数据整型数据asm auto break case catch char class const continuedefault delete dodoubleelseenumexternfloatforfriendgotoifinlineintlongnewoperatoroverloadprivateprotectedpublicregisterreturnshortsignedsizeofstaticstructswitchthistemplatethrowtrytypedefunionunsignedvirtualvoidvolatile
12、while表表2-1 C+2-1 C+的标准关键字的标准关键字第14页,共51页。变量声明后类型就确定了。编译器就为该变量在内存中开辟了存储单元。存储单元。变量可以在定义时初始化初始化,也即个变量赋一个初值。初值。例如:例如:int a=3,b=-7;/也可以先定义,也可以先定义,后赋值后赋值 int a,b;a=3,b=-7;double area=67.31;则变量a、b、area分别被赋予初值,3、-7、67.31,并一直保留改值直到被修改为止。2.2 整型数据整型数据第15页,共51页。注意:注意:1、若一个变量没有被初始化,则系统会为该变量规定一个默、若一个变量没有被初始化,则系统会
13、为该变量规定一个默认值或无效值,直到被修改。认值或无效值,直到被修改。2、初始化数据的类型与所规定的类型不一致,自动进行隐含转换,初始化数据的类型与所规定的类型不一致,自动进行隐含转换,数据将转换成变量类型。如数据将转换成变量类型。如 int a=3.14(允许)。但会丢失小数部(允许)。但会丢失小数部分。分。3、在同一个块中或复合语句中,不允许定义同名变量,在同一个块中或复合语句中,不允许定义同名变量,而在不同的块中可以。而在不同的块中可以。如:如:int k;-/块块1 int k;-/块块2 是合法的。是合法的。2.2 整型数据整型数据第16页,共51页。2.3 字符型数据字符型数据2.
14、3.1 字符型数据的基本情况(课本表字符型数据的基本情况(课本表2-2)类型修饰符类型修饰符char有可能表示有符号字符,也有可能表示有符号字符,也可能表示无符号字符。可能表示无符号字符。2.3.2 字符型常量的表示字符型常量的表示字符又分为可显示的和不能显示的。字符又分为可显示的和不能显示的。可显示的用符号图形来表示,即用引号括起可显示的用符号图形来表示,即用引号括起来的单个字符,如来的单个字符,如k,等。等。第17页,共51页。不能显示的(产生某些控制)用转义序列来表示(两种不能显示的(产生某些控制)用转义序列来表示(两种形式):形式):1.用反斜杠用反斜杠加上该字符的加上该字符的ASCI
15、I码来构成。码来构成。ASCII码可采用八进制、十六进制。码可采用八进制、十六进制。2.另一种称为转义字符,由一个反斜杠后跟一个字符来表示。另一种称为转义字符,由一个反斜杠后跟一个字符来表示。如下表所示:如下表所示:3.转义字符只代表一个字符,可显示字符也可转义字符只代表一个字符,可显示字符也可以用转义字符来表示。以用转义字符来表示。2.3 字符型数据字符型数据第18页,共51页。2.3.3 字符型变量的定义和初始化字符型变量的定义和初始化 与整型类似,如char c1,c2=A;上面定义了两个字符型变量,其中c2被初始化为字符A。2.3.4 字符型与整型的关系字符型与整型的关系字符用代码表示
16、,代码就是一个整数。在表达式求值中,字符字符被转换成换成与其代码等值的整数,整数,因此能对字符实施实施算术运算。算术运算。如,如,char ch1=A,ch2=a;也可以写成 char ch1=65,ch2=97;2.3 字符型数据字符型数据第19页,共51页。2.4.1 枚举型数据的基本情况枚举型数据的基本情况(课本表2-3)不是系统预定义的预定义的,而是用enum关键字(保留字,是系统预定义有的特殊含义的单词)自定义的自定义的数据类型。它的值域由用户定义的一组符号常量限定的。目的是提高程序的可读性。2.4 枚举型数据枚举型数据第20页,共51页。2.4.2 枚举类型的定义和枚举变量的定义枚
17、举类型的定义和枚举变量的定义格式:格式:enum 枚举类型名枚举类型名 枚举常量名枚举常量名1;枚举常量名枚举常量名2;-;枚举变量;枚举变量;/在定义枚举类型的同时定义枚举变量。例如:例如:enum WeekDaySunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday today;2.4 枚举型数据枚举型数据第21页,共51页。也可以在枚举类型定义后,再定义枚举变量格式格式.如:如:WeekDay today=Monday,tomorrow=Tuesday;并赋初值。枚举变量只枚举变量只能在枚举常量集合中取值。不能进行算术运算,只能赋
18、值,比较和输出。2.4 枚举型数据枚举型数据第22页,共51页。2.4.3 枚举型与整型的关系枚举型与整型的关系 C+编译程序为每个枚举常量分配分配一个整数型数值,整数型数值,默认时第一个枚举元素的值为0,依次类推,第n个为n-1。也可以显示的指定枚举常量的值,后面逐指定枚举常量的值,后面逐个增1取值。如重新定义WeekDay如下;enum Week Sunday=1,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday=0;Week 和WeekDay枚举常量有相同的取值。相同的取值。C+语言不允许枚举类型有相同的枚举常量。C+不识别枚举符号。2.
19、4 枚举型数据枚举型数据第23页,共51页。2.5.1 各种实型数据的基本情况(课本表各种实型数据的基本情况(课本表2-4)实数又称浮点数,与数学中的浮点数的区实数又称浮点数,与数学中的浮点数的区别:别:1、数学中的实数值域从无穷小到无穷大,、数学中的实数值域从无穷小到无穷大,计算机中实数的值域有限。计算机中实数的值域有限。2、数学中的实数精度是任意的,计算机、数学中的实数精度是任意的,计算机中精度有限,中精度有限,C+提供了单精度、双精度、提供了单精度、双精度、长双精度长双精度3种实型类型。种实型类型。2.5 实型数据实型数据第24页,共51页。2.5.2实型常量的表示实型常量的表示浮点数只
20、能以十进制表示,十进制表示,可以采用科学科学记数法记数法和一般表示方法一般表示方法。科学记数法常用于表示很大或很小很大或很小的浮点数。如1.2E8(即1.2108)、-5.731E-9(即-5.73110-9)。浮点数的整数部分和小数部分如果为零可零可以省去以省去,但不能两者都省去。例如.34 456.5.E3 .89E2(都合法)。2.5 实型数据实型数据第25页,共51页。浮点数还可以带后缀,以区分不同的类型的实数。1、没有后缀,表示双精度(double型)。如73.23。2、后缀为F(或f),表示单精度的(float)。如4.266F。或-1.2f。3、后缀为L(或l),表示长双精度(l
21、ong double)。如8.5l、2.07L。2.5.3 实型变量的定义和初始化实型变量的定义和初始化与整型类似2.5 实型数据实型数据第26页,共51页。符号常量符号常量的定义:如define PI 3.1416 表在程序中用PI表示3.1416。好处:好处:1、提高程序的可读性。有意义的名词作为符号常量。2、提高数据的一致性 3、提高数据的可维护性。达不到预期的精度,只需重新 定义。常值变量常值变量的定义格式:const 数据类型数据类型 常量标识符常量标识符 表达式表达式 如,如,const double PI=3.1416;常值变量定义时必须初始化必须初始化,在程序中不允许改变。上
22、述两者等价。2.6 符号常量和常值变量符号常量和常值变量第27页,共51页。2.7.1 无操作符的表达式无操作符的表达式简单表达式简单表达式常量、变量和函数调用是三种最简单的表常量、变量和函数调用是三种最简单的表达式。达式。简单表达式依据数据类型可分整型、长整简单表达式依据数据类型可分整型、长整型、双精度表达式等。数值表达式是整型型、双精度表达式等。数值表达式是整型类表达式和实型类表达式的统称。类表达式和实型类表达式的统称。2.7 数值表达式数值表达式第28页,共51页。2.7 数值表达式数值表达式2.7.2 算术运算算术运算C+算术运算符包括一元运算一元运算符(取负值)、+(取正值)和二元运
23、算符二元运算符+(加)、(加)、(减)、(减)、*(乘)、(乘)、/(除)、(取余数)。(除)、(取余数)。其中只用于只用于int整型,如1031(int)。其余可以用于既可以用于int又可以用于float 和double类型数据。用算术符号联起来的表达式称算术表达式。算术表达式。除法运算用于整型和实型是不同的。用于整数,是不同的。用于整数,/表示整除。如。如5/2=2(int)、10/3=3(int)。而用于浮点)。而用于浮点数,数,5.0/2.02.5(float)、)、8.0/5.0=1.6(float)。第29页,共51页。2.7 数值表达式数值表达式2.7.3 位操作符(看书本)位操
24、作符(看书本)2.7.4 赋值操作符赋值操作符(1)赋值运算符“=”的一般格式为:变量=表达式;表示将其右侧的表达式求出结果,赋给其左 侧的变量。例如:int i;i=3*(4+5);/i的值变为27(2)赋值表达式本身的运算结果是右侧表达式的 值,而结果类型是左侧变量的数据类型。例 如:int i=1.2*3;/结果为3,而不是3.6(3)赋值运算符的结合性是从右至左的,因 此,C+程序中可以出现连续赋值的情 况。例如,下面的赋值是合法的:int i,j,k;i=j=k=10;/i,j,k都赋值为10第30页,共51页。2.7 数值表达式数值表达式2.7.5 复合赋值操作符复合赋值操作符复合
25、操作符如书本P.28所示(从左到右结(从左到右结合)。合)。它们的含义如下:a+=b 等价于 a=a+ba-=b 等价于 a=a-ba*=b 等价于 a=a*ba/=b 等价于 a=a/ba%=b 等价于 a=a%ba=b 等价于 a=a=b 等价于 a=ab a&=b 等价于 a=a&ba=b 等价于 a=aba|=b 等价于 a=a|b例如:int a=12;a+=a;表示a=(a+a)=(12+12)=24;又例如:int a=12;a+=a-=a*=a;表示a=a*a /a=12*12=144a=a-a /a=144-144=0a=a+a /a=0+0=0第31页,共51页。2.7 数
26、值表达式数值表达式2.7.6自增、自减运算符自增、自减运算符(1)自增(+)、自减(-)运算符为变量的增1和减1提供了紧凑格式。(2)自增、自减运算符都是单目运算符,其作用是使变量的值增1或减1。(不可过分的使用,不可过分的使用,使程序难以理解并降低其可移植性)使程序难以理解并降低其可移植性)。(3)自增、自减运算符有四种应用格式:int a=3;b=a+;等价于 b=a;a=a+1;int a=3;b=a-;等价于 b=a;a=a-1;(运算符后置用法,代表先使用变量,然后对变量增值)int a=3;b=+a;等价于 a=a+1;b=a;int a=3;b=-a;等价于 a=a-1;b=a;
27、(运算符前置用法,代表先对变量增值,再使用变量)第32页,共51页。2.7 数值表达式数值表达式(4)C+编译器在处理时尽可能多的自左向右将运算符结合在一起。例如:a+b表示为(a+)+b而不是a+(+b)。(5)在调用函数时,实参的求值顺序一般为自右向左。而不是PASCAL语言那样自左向右。例如:int a=1;printf(“%d,%d,%d”,a+,a+,a+);输出的结果为3,2,1而不是1,2,3。第33页,共51页。2.7 数值表达式数值表达式例例2.1:引用前增量和后增量运算。:引用前增量和后增量运算。#include int main()/显示显示m+和和+m的区别的区别int
28、 m,n;m=44;n=+m;/前操作符前操作符m=m+1,n=mcoutm=m,n=nendl;m=44;n=m+;/后操作符后操作符n=m,m=m+1coutm=m,n=nendl;上面程序执行结果在屏幕上显示:上面程序执行结果在屏幕上显示:m=45,n=45m=45,n=45m=45,n=44m=45,n=44语句:语句:n=+m;n=+m;先将先将m m增加为增加为4545,在赋给,在赋给n n。语句:语句:n=m+;n=m+;先将先将m m值赋给值赋给n n后,才将后,才将m m增加增加为为4545。所以下一条语句打印时,所以下一条语句打印时,n n为为4444。第34页,共51页。
29、2.7 数值表达式数值表达式2.7.7 sizeof 操作符操作符用于获得一数据或数据类型所占空间的字节数,使用格式:使用格式:sizeof(类型修饰符)或(类型修饰符)或sizeof(表达式)(表达式)第35页,共51页。2.7 数值表达式数值表达式例例2.2:使用:使用sizeof运算符运算符#include void main()coutNumber of byte used:n;coutt char:sizeof(char)endl;coutt short:sizeof(short)endl;coutt int:sizeof(int)endl;coutt long:sizeof(lon
30、g)endl;coutt unsigned char:sizeof(unsigned char)endl;coutt unsigned short:sizeof(unsigned short)endl;coutt unsigned int:sizeof(unsigned int)endl;coutt unsigned long:sizeof(unsigned long)endl;coutt unsigned char:sizeof(unsigned char)endl;coutt float:sizeof(float)endl;coutt double:sizeof(double)endl;c
31、outt long double:sizeof(long double)二元(除赋值)三原赋值逗号;而二元运算符又有如下规律:算 术关系逻辑;逻辑又有如下规律:!&|。第37页,共51页。2.7 数值表达式数值表达式例例2.3 其分析表达式的求值顺序其分析表达式的求值顺序假定:假定:int x=5,y=4,z=6,w=2;char a=s,b=t;表达式表达式1、z/y2、z/4.03、z/y%z/x4、ab|yz5、a!=b&z-66、a=b&!(yz)7、a=b&!yz8、x+1+z9、x+1z+10、-x-y|x+yz&z%3=0书写表达式时,应注意的表达式与数学中的表达式的区别书本区别
32、书本P.31。第38页,共51页。2.7 数值表达式数值表达式2.7.9 类型的自动转换(隐式转换)与强制转换类型的自动转换(隐式转换)与强制转换1.隐式转换是由系统自动进行的类转换。C+对 表达时求值时,表达式中有不同类型的操作数时,要进行类型转化,再求表达式的值。通常发生在二元运算时,它要求两个操作数一致。隐式转换的原则:隐式转换的原则:(1)(1)赋值运算符赋值运算符“”左右两边不同类型时,总是右边左右两边不同类型时,总是右边 表达式类型转换成左边变量的类型,再赋值给左表达式类型转换成左边变量的类型,再赋值给左 边的变量。边的变量。如:如:int a=6;double b=3.5;a=b
33、;int a=6;double b=3.5;a=b;cout cout”a=a=”aa”b=b=”bb”nn”;输出输出a=3,b=3.5a=3,b=3.5 (上机实验)(上机实验)(2)short(2)short型、型、signed shortsigned short型和所有的型和所有的chartchart型在运型在运 算前无条件的转换为算前无条件的转换为intint型。型。(3)(3)除了上述情外,一个二元运算符的两边数就不除了上述情外,一个二元运算符的两边数就不 同,则将较小类型值向较大的类型值转换。运算同,则将较小类型值向较大的类型值转换。运算 结果同高类型一致。可保证数据的进度不受损
34、。结果同高类型一致。可保证数据的进度不受损。类的高低次序依次:类的高低次序依次:int,unsigned,long,int,unsigned,long,unsigned long,float,double,long double unsigned long,float,double,long double。(4)(4)在函数调用时,实参类型先转换成形参类型。改在函数调用时,实参类型先转换成形参类型。改 函数有返回值时,该值的类型与该函数类型一函数有返回值时,该值的类型与该函数类型一 致。致。例例2.4 2.4 分析下面程序的运行结果分析下面程序的运行结果#include#include voi
35、d main()void main()int x;int x;char ch=a;char ch=a;x=ch+200;x=ch+200;coutx=xn;coutx=xn;coutch=chn;coutch=chn;coutch+200ch+200n;coutch+200ch+200、=、=、!=。由关系运算符联起来的表达式就称为关系表达式。由关系运算符联起来的表达式就称为关系表达式。它只有两个值:它只有两个值:1和和0。1表示真,即关系表达式成表示真,即关系表达式成立。立。0表示假,即关系表达式不成立。如,表示假,即关系表达式不成立。如,6=4的的值为值为1,而,而67!=67的值为的值为
36、0。第41页,共51页。2.8 逻辑型数据与逻辑表达式逻辑型数据与逻辑表达式3.逻辑操作符和逻辑表达式逻辑操作符和逻辑表达式C+的逻辑运算符包括的逻辑运算符包括3个:!(一元运算符,逻辑非)和二元个:!(一元运算符,逻辑非)和二元运算符运算符&(逻辑与)、(逻辑与)、|(逻辑或),(逻辑或),逻辑非的优先级最高,逻辑与次之,逻辑或最低。用逻辑运算符连起来的表达式称为逻辑表达式。其结果只能取用逻辑运算符连起来的表达式称为逻辑表达式。其结果只能取1或或0。逻辑运算真值表如下表所示:注意:注意:C+C+在计算逻辑表达式的值时,若从左到右计算到某处就已经在计算逻辑表达式的值时,若从左到右计算到某处就已
37、经能够确定表达式的值,则就不用继续后面部分的求值。如表能够确定表达式的值,则就不用继续后面部分的求值。如表达式:达式:e1&e2e1&e2,e1e1为为0 0,就可以确定表达式的值,就不用求表,就可以确定表达式的值,就不用求表达式达式e2e2的值了。的值了。同样,同样,e1|e2e1|e2,e1e1为真,就知表达式的值,不用求为真,就知表达式的值,不用求e2e2。aba&ba|b!a!b0000110非00110非000101非0非01100第42页,共51页。2.8 逻辑型数据与逻辑表达式逻辑型数据与逻辑表达式2.8.3 复合条件复合条件 逻辑与逻辑与&和逻辑或和逻辑或|都用于构造复合表都用
38、于构造复合表达式,其左右两边的操作对象称为子对象。达式,其左右两边的操作对象称为子对象。子对象子对象1&子对象子对象2表示两个子条件同时表示两个子条件同时成立时这个复合条件成立。成立时这个复合条件成立。子对象子对象1|子对象子对象2表示两个子条件有一个表示两个子条件有一个成立时这个复合条件成立。成立时这个复合条件成立。第43页,共51页。2.8 逻辑型数据与逻辑表达式逻辑型数据与逻辑表达式2.8.4 相反条件相反条件6个操作符可以分为个操作符可以分为3对:对:和和=、=、=和和!=利用这种配对关系,可以构利用这种配对关系,可以构造出一个条件相反的条件。如造出一个条件相反的条件。如xy和和xy的
39、相反条件!(的相反条件!(xy)?10:20。第47页,共51页。2.9 自定义类型修饰符自定义类型修饰符自定义类型修饰符自定义类型修饰符 就是用一个自定义的标识符来代表一个特就是用一个自定义的标识符来代表一个特定的数据类型。自定义格式:定的数据类型。自定义格式:typedef 修饰符类型修饰符类型 新的标识符新的标识符 如:如:typedef int shijian 好处:好处:1.提高程序的可靠性。提高程序的可靠性。2.提高程序的可维护性。提高程序的可维护性。3.避免类型使用上的不一致。避免类型使用上的不一致。第48页,共51页。2.10 表达式的副作用与表达式语句表达式的副作用与表达式语
40、句表达式分为无副作用和有副作用的表达式表达式分为无副作用和有副作用的表达式两类。两类。在在C+表达式中,需要提取参与表达式计表达式中,需要提取参与表达式计算的变量的值,但通常不会改变它们的值,算的变量的值,但通常不会改变它们的值,这就是无副作用。如这就是无副作用。如k+m。第49页,共51页。2.10 表达式的副作用与表达式语句表达式的副作用与表达式语句2.10.1表达式的副作用表达式的副作用在在C+表达式中,在其求值过程中不但要提取变量的值,还可表达式中,在其求值过程中不但要提取变量的值,还可能改变它们的值,这就是副作用。能改变它们的值,这就是副作用。相应副作用的操作符有(如书所示)。它只能
41、用于变量。相应副作用的操作符有(如书所示)。它只能用于变量。它们的特点:它们的特点:除了后增除了后增1和后减和后减1以外,作为操作结果的表达式的值就是所作用的以外,作为操作结果的表达式的值就是所作用的变量所获得的值。变量所获得的值。操作结果操作结果表达式的值表达式的值存放在变量中。存放在变量中。注意:注意:作用于变量的操作只能施加于变量对象。作用于变量的操作只能施加于变量对象。当若干个作用于变量的操作施加于同一个变量时,除了最后一个当若干个作用于变量的操作施加于同一个变量时,除了最后一个外,不得有后增外,不得有后增1和后减和后减1。第50页,共51页。2.10 表达式的副作用与表达式语句表达式
42、的副作用与表达式语句2.10.2 表达式副作用的应用表达式副作用的应用逗号操作符与逗号表达逗号操作符与逗号表达式。式。逗号操作符为,格式:表达式逗号操作符为,格式:表达式1,表达式,表达式2。由逗号操作副构成的表达式称为逗号表达式。上式由逗号操作副构成的表达式称为逗号表达式。上式表达式的值为表达式表达式的值为表达式2,其类型与表达式,其类型与表达式2相似。相似。2.10.3 表达式副作用的应用表达式副作用的应用表达式语句表达式语句 C+中任何一个表达式都可以作为一个语句来使用,中任何一个表达式都可以作为一个语句来使用,称为表达式语句。表达式作为语句使用时,它的值被称为表达式语句。表达式作为语句使用时,它的值被舍弃不用,其语句通过它的副作用体现出来,因而把舍弃不用,其语句通过它的副作用体现出来,因而把没有副作用的表达式作为语句使用毫无意义。没有副作用的表达式作为语句使用毫无意义。第51页,共51页。