1、第二章第二章 数据类型和表达式数据类型和表达式 第一节第一节 基本数据类型基本数据类型第二章一、常用的基本数据类型:一、常用的基本数据类型:在C+语言中基本数据类型有5种:1、整型、整型(int):2、浮点型浮点型(实型):float(单精度浮点型)double(双精度浮点型)3、字符型字符型(char)4、空值型空值型(void):常用于函数和指针。5、布尔型布尔型(bool):取值为真(true)和假(false)。为了满足各种情况的需求,除了void类型和bool类型外,在基本数据类型前面还可以加上下面的修饰第二章符来增加原来的含意:signed表示有符号 unsigned表示无符号 l
2、ong表示长型 short表示短型 这4种修饰符都适用于整型和字符型,只有Long还适用于双精度浮点型(long double)。二、二、C+语言的基本数据类型表语言的基本数据类型表 见教材表2-1。第二节第二节 常量和变量常量和变量第二章 一、常量:一、常量:常量:常量:是在程序中不被改变的量。常量有各种不同的数据类型,不同数据类型的常量是由其表示方法决定的。1 1、常量种类:、常量种类:(1)、整型常量整型常量:可以用十进制、八进制和十六进制 来表示,没有小数部分。八进制:以0为前缀,其后由07数字组成。十六进制:以0 x或0X为前缀,其后由09的数字和 AF(af)的字母组成。(2)、浮
3、点型常量浮点型常量:是由整数部分和小数部分组成 的,只有十进制来表示,有小数表示法(一般表示 形式)和科学表示法两种表示形式。第二章 科学表示法是在小数表示法后面加E(e),表示 指数。如:4.5e-2.3。(3)、字符常量字符常量:是用一对单引号括起一个字符来表 示的。如:A C+中的字符可用该字符的图形符号来表示,也 可用转义序列表示法即字符的ASCII码值来表示。转义序列表示法转义序列表示法:用符号开头,后面是字符的 ASCII码值,其中表示消除其后字符的原有含义。有两种形式:用字符的八进制 ddd,和用字符的 十六进制xhh。如:A表示为:101或 x41。实 际应用中,无图形符号的字
4、符常用转义序列表示法。应用中,无图形符号的字符常用转义序列表示法。(4)、字符串常量字符串常量:是用双引号括起来的字符序列。第二章又称串常量或字符串。注意注意:(a)、在一个字符串占多行时,每行最后用反斜线 表示续行符,说明下面一行的字符与上面是同一行 的。如:tabctxyz!mnptefg!(b)、由于双引号是字符串的定界符,因此在字符 串中再出现双引号时必须以“”表示。如:Please enter Y or N:这个字符串表示:Please enterYor N:第二章 字符串常量与字符常量的区别字符串常量与字符常量的区别:(a)、字符常量用单引号括起,而串常量用双引号括 起。(b)、一
5、个字符常量被存放在内存中,仅占1个字节,而串常量要占多个字节。(c)、字符常量与串常量所具有的操作功能也不相 同。例如,字符常量具有加法和减法运算,而字符 串常量不具有这种运算。(5)、布尔常量布尔常量:布尔常量的值只有true 和false 两种。(6)、符号常量符号常量:在程序中用以替代常量的标示符。如:pi用来替代。第二章2 2、定义常量的方法:、定义常量的方法:const const 类型类型常量名常量名=初值初值;例如:const double PI=3.1415;二、变量:二、变量:变量变量是在程序执行中其值可以改变的量。它具有三个基本要素:名字、类型、值名字、类型、值。1、变量的
6、名字:变量的名字:同标识符,即按标识符的规定来命名变量。2 2、变量的类型:、变量的类型:每种变量都应该具有一种类型,在定义或说明变第二章量时一定要指出其类型。变量类型包括数据类型和存储类两部分,而数据类型又包含基本数据类型(5种)和构造数据类型两种。3 3、变量的值:、变量的值:变量存在有两个两个有用的值:即变量所表示的数据值和变量的地址值。4 4、变量的定义格式:、变量的定义格式:任何一个变量在被引用之前必须定义,但在同一个程序块内,不可以定义同名变量,而在不同程序块内可以定义同名变量。定义变量的格式为:类型类型变量名表变量名表;第三节第三节 数数 组组 类类 型型第二章一、一、数组的定义
7、:数组的定义:1、概念:、概念:数组:数组:是数目固定、类型相同的若干个变量的有序集合。数组中的每个变量称为一个元素。数组是一种构造数据类型。2、数组定义的格式、数组定义的格式:2 例如:int a3;char b35;float c357;二、二、数组的赋值:数组的赋值:数组的赋值:数组的赋值:是给数组的各个元素赋值。是给数组的各个元素赋值。第二章1 1、数组元素的表示:、数组元素的表示:数组元素可用下标表示,也可用指针表示。数组元素的下标表示法数组元素的下标表示法:2 注意:注意:数组下标是从0开始,并且各个元素在内存中是按其下标的升序顺序连续存放的。例如:int a5;该数组 a是一个一
8、维数组,该数组的5个元素依次升序表示为a0,a1,a2,a3,a4。int b23;/二维数组 int c224;/三维数组第二章2 2、数组元素初始化数组元素初始化 数组元素的初始化:数组元素的初始化:是在定义数组时,使用初始值表给数组的各元素赋初值。初始值表:初始值表:由一对花括号()括起来的若干个数据项组成,数据项之间用逗号分隔。例如:(1)、int a 3=3,5,7;(2)、int b 2 3=1,2,3,4,5,6;或=1,2,3,4,5,6;规定数组元素的个数要大于或等于初始值表中数规定数组元素的个数要大于或等于初始值表中数据项的个数据项的个数,否则会出错。第二章3 3、数组元素
9、赋值数组元素赋值 给数组元素赋值使用赋值表达式。如果数组元素的值间存在某种关系,可以用循环语句给各元素赋值。例1:int m3 m0=5;m1=3;m2=1;例2.:int a10,for(int i=0;i10;i+)ai=i*2+1;第二章三、字符数组:三、字符数组:字符数组字符数组:是指数组元素是是指数组元素是charchar型的一种数组。型的一种数组。前面所讲的数组的定义和赋值同样适用于字符数组。除此之外还有一些特殊的规定。可用一个字符串常量进行初始化。例例1 1:char s14=a,b,c,d;一维字符数组s1含有4个元素,初始化后,s10为a,s11为b,s12为c,s13为d。
10、s1的4个元素分别是一个有效字符。例例2 2:char s25=a,b,c,d,0;一维字符数组s2,它有5个元素,经过初始化后,该数组的前4个元素分别为字符a至d,而最后一个元素s24为0,因此,s2数组是一个字符串,它存放着第二章字符串常量“abcd”。例2中语句同于:char s25=abcd例例3 3:char s35=abcde;初始化数组s3用上述语句是错误的,最后一位应是0。如果用字符串常量“abcde”初始化数组可以:char s3 =“abcde”;或:char s36=“abcde”;对于二维、三维数组可以用前面讲过的初始值表的方法,也可以用字符串常量的方法。例例4 4:c
11、har ss34=a,b,c,0,m,n,p,0,x,y,z,0;char ss34=abc,mnp,xyz;char ss 4=abc,mnp,xyz;第四节第四节 指针和引用指针和引用 第二章一、一、指针:指针:1 1、指针的概念:指针的概念:指针指针:是一种存放某个变量或对象的地址值的特殊变量,它的类型是它所存放的变量或对象的类型。所以,指针也具有一般变量的三个要素,只是类型和值与一般变量存在不同。例如:int a(5);int*p=&a;2、指针的定义指针的定义格式格式:*,*,;第二章几种常见的指针定义:几种常见的指针定义:int*pi;/pi 是一个指向 int 型变量的指针flo
12、at*pl;/pl 是一个指向 float 型变量的指针char*pc;/pc 是一个指向 char 型变量的指针int(*pa)3;/pa 是一个指向一维数组的指针int(*pf)();/pf 是一个指向函数的指针,该函数 的返回值为int 型数值 int*pp;/pp 是一个指向指针的指针,即二级 指针3、指针的赋值指针的赋值:指针可赋初值,也可赋值。给指针赋的值是一个类型相同、级别一致的地址值。第二章、一般变量、数组元素、结构成员等其地址值都表 示为变量名前加运算符&。例:int a,b10;变量a的地址&a,数组中b0元素的地址&b0,。、数组的地址值用该数组名来表示。例:int b1
13、0,*p=b b;表明p是一个指向数组b的指针,即指向b数组的首首元素元素b0。、函数的地址值可用该函数的名字来表示,即一个指向函数的指针可用它所指向的函数名字来赋值。第二章例:double sin(double x);double(*pf)();pf=sin;表明pf是一个指向函数sin的指针,这里用 sin 给 pf赋值,实际上是让pf指针指向 sin 函数在内存中的入口地址入口地址。4 4、指针的运算指针的运算:指针是一种特殊的变量,指针所允许的运算是很有限的,仅有下述4 4种种运算:(1 1)、赋值运算:)、赋值运算:可以将一个指针所指向的变量的地址值赋给它,还第二章 可将一个数组的地
14、址值或者一个函数在内存中的入 口地址值赋给所对应的指针。而对于一个暂时不用的指针,为了安全起见,可以 先将O 值赋给指针,使它变为空指针,还可将一个已被 赋值的指针赋给另外一个相同类型的指针。(2 2)、加减整型数的运算:)、加减整型数的运算:可以加上或减去一个整数值,包括加1或减1运算。(3 3)、在一定条件下,两个指针可以相减:)、在一定条件下,两个指针可以相减:例如,指向同一个数组的不同元素的两个指针可以相减,其差便是这两个指针之间相隔元素个数。(4 4)、在一定条件下,两个指针可以比较:)、在一定条件下,两个指针可以比较:第二章 例如,指向同一个数组元素的两个指针可以比较,当这两个指针
15、相等时,说明这两个指针是指向同一个数组元素的。二、指针和数组指针和数组:在C+中,数组的元素可以用下标表示,也可用指针表示。1 1、指针可以表示数组元素、指针可以表示数组元素(1 1)、)、一维数组:维数组:例如:int a5;下标表示:ai(i=0,1,2,3,4)指针表示:*(a a+i)(i=0,1,2,3,4)指针表示法中,a是数组名,C+中规定任何一个数组的名字是一个常量指针,该指针的值便是该数组第二章的首元素的地址值。在一维数组中,数组名就是首元素地址。例中,a 与&a0是一样的。(2 2)、二维数组:)、二维数组:例如:例如:int b25;下标方法:bij (i=0,1;j=0
16、,1,2,3,4)指针方法:、一维数组的一维数组*(*(b+i)+j)、下标与指针混合:*(bi+j)/行数组用下标,列数组用指针 (*(b+i)j /行数组用指针,列数组用下标(3 3)三维数组:)三维数组:第二章 2、指针可作为函数参数及返回值指针可作为函数参数及返回值例:分析下列程序的输出结果。#include void main()static int a5=5,4,3,2,1;int i,j;i=a0+a4;j=*(a+2)+*(a+4);coutiendlj;输出结果:6 4第二章3、指向数组的指针和指针数组指向数组的指针和指针数组:(1 1)、)、指向数组的指针指向数组的指针:指
17、向数组的指针指向数组的指针:可以是指向一般数组的指针,也可以是指向对象数组的指针。目前,我们接触的是二级指针,指向对象数组的指针在后面详细介绍。(2 2)、)、指针数组指针数组:指针数组指针数组:是指数组元素为指针的数组是指数组元素为指针的数组。一个数组的元素可以是指向同一类型的一般指针,也可以是指向同一类类型的对象的指针。如:int*pa3=&a0,&a1,&a2第二章三、三、引用引用:1 1、引用的概念:、引用的概念:引用:引用:是某个变量或对象的别名。是某个变量或对象的别名。如果一个变量或对象一旦定义它的引用后,则该引用被“绑定”在这个变量或对象上,即变量或对象值被改变,则引用值也被改变
18、,反之亦然。引用不是变量或对象,它不被分配内存空间,它引用不是变量或对象,它不被分配内存空间,它的地址值是引用它的变量或对象的地址值。的地址值是引用它的变量或对象的地址值。2 2、引用的定义格式:、引用的定义格式:&=;3 3、几点注意:、几点注意:a、定义引用时必须用一个相同类型的变量或对象名 进行初始化。第二章 b b、在引用上所施加的操作,实质上就是在被引用者上 的操作。c c、将一个引用赋给某个变量,则该变量将具有被引用 的变量的值。d、可通过引用将指针指向变量的地址。例如:int a=3;int&m=a;m=m+5;intnm;int*p&m;4 4、引用的应用:、引用的应用:引用在
19、C+语言的程序中,通常用作函数参数和函数返回值。第五节第五节 运算符和表达式运算符和表达式 第二章一、一、运算运算符:符:1、运算符的种类及功能运算符的种类及功能(1 1)、算术运算符:)、算术运算符:a a、普通算术运算符普通算术运算符:单目:+,-,双目:+,-,*,/,%(取余数)单目运算符的优先级要比双目运算符高。b b、增增1 1和减和减1 1运算符运算符:单目运算符:+(增 1),-(减 1)有前缀有前缀和和后缀两种后缀两种运算运算方式方式,前缀运算表达式表达式的值为原来变量值加(减)1,后缀运算表达式表达式的值为原变量值;不论前缀运算还是后缀运算变量的值值都(减)1。第二章(2
20、2)、)、逻辑运算符逻辑运算符:单目逻辑运算符有:!(逻辑求反)双目逻辑运算符有:&(逻辑与),|(逻辑或)逻辑与的优先级高于逻辑或。(3 3)、关系运算符:)、关系运算符:双目关系运算符:,=,=,=,!=前面四种的优先级高于后面的两种。(4 4)、位操作运算符:)、位操作运算符:a a、逻辑位运算符逻辑位运算符:单目逻辑位运算符有:(按位求反)双目逻辑位运算符有:&(按位与),|(按位或),(按位异或)在双目逻辑位运算符中,&高,而 又高于|。第二章 b b、移位运算符:、移位运算符:移位运算符都是双目的:(右移)。注意注意:右移时,根据机器不同,左边移出的空位或 者一律补0,或者补符号位
21、。(5 5)、赋值运算符:)、赋值运算符:a a、基本的:=(赋值运算符)b b、复合的:10种 +=(加赋值),-=(减赋值),*=(乘赋值),/=(除赋值),%=(求余赋值),&=(按位与赋值),|(按位或赋值),=(按位异或赋值),=(右移位赋值),注意:注意:赋值运算符具有副作用。赋值运算符具有副作用。第二章(6 6)、其他运算符:)、其他运算符:a、三目运算符:三目运算符:C+中仅有一个三目运算符,其格式:d1?d2d1?d2:d3 d3 b b、逗号运算符:、逗号运算符:,逗号运算符的优先级是所有运算符中最低的。整个逗号表达式的值和类型由最后一个表达式决定的。c c、获取字节数运算
22、符:、获取字节数运算符:sizeofsizeof 有两种使用形式:sizeofsizeof(类型说明符类型说明符););sizeofsizeof(););d d、强制类型运算符:、强制类型运算符:该运算符用来将指定的表达式的值强制为所指定第二章 的类型。有两种格式:()()e、成员选择运算符成员选择运算符:和-(7 7)、)、C+C+语言增加的运算符:语言增加的运算符:a、作用域运算符:b、成员指针选择符:*和-*c、创建堆对象运算符new和释放堆对象运算符 delete2.2.运算符的优先级及结合性:运算符的优先级及结合性:教材表-。第二章二、二、表达式表达式:1 1、表达式的种类:、表达式
23、的种类:同C语言,有:算术表达式,逻辑表达式,关系表达式,赋值表达式,条件表达式,逗号表达式。2 2、表达式的值和类型:、表达式的值和类型:同C语言,同时需要注意:(1 1)、)、先确定运算符的功能先确定运算符的功能:有些运算符相同,但是 功能不同(单目、双目、重载)。(2 2)、)、确定计算顺序确定计算顺序(优先级和结合性、括号的使(优先级和结合性、括号的使用)。用)。3.3.表达式中的类型转换:表达式中的类型转换:同C语言,有隐含转换,和强制转换。第六节第六节 枚举类型枚举类型 第二章一、枚举类型和枚举变量一、枚举类型和枚举变量 枚举:枚举:是若干个有名字的是若干个有名字的整型常量整型常量
24、的集合的集合。它是一种构造数据类型。在定义一个枚举变量之前,必须先定义一个枚举类型。1 1、枚举类型:、枚举类型:枚举类型枚举类型定义格式:定义格式:enumenum ;其中:是由若干个用逗号分隔的枚举符组成的。枚举符:又称枚举常量,枚举符:又称枚举常量,是一个用标识符表示是一个用标识符表示的整型常量。的整型常量。例:enum day Sum,Mon,Tue,Wed,Thu,Fri,Sat;在默认的情况下每个枚举符所表示的整型数值,最前边一个为0 0,后一个是前一个的值加1 1。因此,Sum=0,Mon=1,Sat=6第二章 枚举符的值也可以在定义时被显式赋值,没被显式赋值的枚举符仍按默认值,
25、并仍按后一个是前一个值加1的规律。如上例中:enum daySum=7,Mon=1,Tue,Wed,Thu,Fri,Sat;此时:Sum=7,Mon=l,Tue=2,Sat=6。2 2、枚举变量:、枚举变量:枚举变量的定义格式枚举变量的定义格式:enumenum ;例:enum day d1,d2,d3;d1,d2和d3是三个属于枚举名为day枚举变量名,它们的值是上面枚举表中规定的7个枚举符之一。枚举变量的定义也可以与枚举类型的定义连在一起来写。把上面的两个例子连起来,即为:第二章 enum day Sum,Mon,Tue,Wed,Thu,Fri,Sat d1,d2,d3;二、枚举变量的值:
26、枚举变量的值:枚举变量的值枚举变量的值:是该枚举变量所属的枚举模式的枚是该枚举变量所属的枚举模式的枚举表的某一个枚举符。举表的某一个枚举符。例如:d1=Sum;/正确 d2=Sat;/正确 d3=YELLOW;/错误,YELLOW不是已定义的枚举符 d4=3 /错误,d4不是已定义的枚举变量 如果要用某个枚举符所表示的整型值给枚举变量,需要进行强制类型。例如:enum color RED,BLUE,YELLOW,BLACK,WHITE;enum color c1,c2,c3;c3=enum color(3);/等价于:c3=BLACK 第七节第七节 类型定义类型定义 第二章一、自定义类型一、自
27、定义类型 自定义类型自定义类型:是通过类型定义来定义一些是通过类型定义来定义一些“新新”类类型。型。这些新类型只是现有类型的同义词,或者是称为现有类型的别名。类型定义类型定义:是用一个或多个标识符来命名一个类是用一个或多个标识符来命名一个类型表达式型表达式,从而得到新的类型名。从而得到新的类型名。类型定义格式:typedeftypedef ;例如:typedef double wages,bonus;wages weekly;bonus monthly;第二章 自定义类型的作用:1、改善程序的可读性,增加所定义变量的信息。2、减少定义变量的过于繁琐,即达到书写简练的目 的。3、提高程序的可移植
28、性。二、类型表达式:二、类型表达式:类型表达式类型表达式;是由数据类型名与类型修饰符是由数据类型名与类型修饰符*,&和和()()所构成的式子。所构成的式子。例:typedef int*array5;array 是一个新的类型名,它被命名为类型表达式 int*5的类型。说明array的类型为5个元素的数组,每个元素是一个指向 int 型变量的指针。即用array第二章来定义的变量就是一个具有5个指向int变量指针的元素的数组。例:int*f(double);用一个类型表达式int*(double)来定义标识符f。第第八八节节 结构和联合结构和联合 第二章一、结构:一、结构:结构是一种构造数据类型
29、。1 1、结构和结构变量的定义:、结构和结构变量的定义:结构是一种类型,又称结构模式,具有结构类型结构是一种类型,又称结构模式,具有结构类型的变量称为结构变量。的变量称为结构变量。因此,应先定义结构类型再定义结构变量。(1(1)、结构类型定义格式:)、结构类型定义格式:struct ;花括号中给出该结构的若干成员的类型和名字。结构成员可以是基本数据类型的变量,也可以是构造第二章类型的变量,还可以是指针和引用。如:struct card int pips;char suit;int*p ;(2 2)、结构变量的定义格式:)、结构变量的定义格式:struct ;中可以是一般结构变量名,也可以是指向
30、结构变量的指针名,还可以是结构数组。如:struct card c1,c2,*pc,cards5;其中,c1,c2是一般结构变量;*pc是指向card结构第二章类型的结构变量的指针;cards5是结构数组,其每个元素都是card结构类型的结构变量。定义结构变量可以直接放在结构类型定义之后,因此上面例子可以合起来:struct card int pips;char suit;int*p c1,c2,*pc,cards5;2 2、结构变量成员的表示和赋值:、结构变量成员的表示和赋值:(1 1)、结构变量成员的表示:)、结构变量成员的表示:a a、一般结构变量的成员表示格式:、一般结构变量的成员表示
31、格式:.第二章 b b、指向结构变量的指针的成员表示格式:、指向结构变量的指针的成员表示格式:-或(*).c c、结构数组元素的成员表示格式:、结构数组元素的成员表示格式:下标下标.(2 2)、结构变量成员的初始化:)、结构变量成员的初始化:定义结构变量时可利用初始值表初始值表为其成员赋初值。初始值表中的数值项顺序与该结构类型定义时 各成员顺序一致。如:struct card int pips;char suit;struct card c1=5,s,c2=10,c;第二章(2 2)、结构变量的赋值方法:)、结构变量的赋值方法:结构变量的赋值就是对结构变量的各个成员的赋值。如:struct c
32、ard c1=5,s,c2,*pc;c2.pips=2;c2.suit=d;pc-pips=1;pc-suit=s;3 3、结构变量在程序中的应用:、结构变量在程序中的应用:(1)、结构变量可作为结构类型的成员;(2)、结构变量可作为数组元素,此数组称为结构数 组;(3)、结构变量和指向结构变量的指针可作为函数的 参数和返回值;第二章二、联合:二、联合:联合也是一种构造数据类型。联合又称共和体。联合类型及变量的定义格式与结构除关键词外都相同。1 1、联合的类型定义格式:、联合的类型定义格式:union ;2 2、联合变量的定义格式:、联合变量的定义格式:union union 3 3、联合变量成员的表示和赋值:联合变量成员的表示和赋值:联合变量成员的表示与结构变量成员的表示相同。而联合变量通常不进行初始化。第二章(1)、结构成员结构成员各自占有内存单元,即异址异址;(2)、联合的所有成员联合的所有成员共用一个内存单元,即共址共址,该单元的大小与联合中数据长度最长的相同,因此 在某一时刻联合变量的各个成员中只有一个是有效 的,在给联合变量赋值时,只保留最近一次的值。5 5、联合在程序中应用、联合在程序中应用 :联合变量只可作为结构的成员和数组的元素,指向联合变量的指针可作为函数的参数。第二章