第2章数据类型与表达式精选PPT.ppt
第第2章数据类型与表章数据类型与表达式达式第1页,此课件共30页哦常量常量n整型常量:整型常量:int,short int,long int;unsigned int,unsigned short,unsigned long(区分数值常量以进行赋值区分数值常量以进行赋值或函数的参数虚实结合或函数的参数虚实结合)n整型常量表示:十进制整数整型常量表示:十进制整数(1357,421L),八进制整数,八进制整数(020),十六进制整数,十六进制整数(0X20)n浮点数表示:十进制小数浮点数表示:十进制小数(21.456,-7.98,1234F,-43f)指数形式指数形式(0.314159e1,3.14159e0,31.4159e-1)第2页,此课件共30页哦常量常量n普通的字符常量:普通的字符常量:单撇号括起来的一个字符单撇号括起来的一个字符a,#,D 字符常量只能包括一个字符字符常量只能包括一个字符 字符常量区分大小写字母字符常量区分大小写字母 撇号撇号()是定界符,而不属于字符常量的一部分。是定界符,而不属于字符常量的一部分。n转义字符常量:转义字符常量:以以“”开头的特殊字符开头的特殊字符n字符数据在内存中的存储形式:字符数据在内存中的存储形式:在存储单元中存放该字符相应的在存储单元中存放该字符相应的ASCII代码;在代码;在C+中中字符型数据和整型数据之间就可以通用字符型数据和整型数据之间就可以通用。第3页,此课件共30页哦常量常量n字符串常量:字符串常量:用双撇号括起来的部分用双撇号括起来的部分abc,Hello!字符串结束标志字符串结束标志0 字符串常量要用字符数组来存放字符串常量要用字符数组来存放char c;/定义一个字符变量定义一个字符变量c=a;/正确正确c=a;/错误,错误,c只能容纳一个字符只能容纳一个字符coutabcnendl;输出:输出:abc,然后换行。,然后换行。coutI say Thank you!n;输出:输出:I say Thank you!coutWe must study C +hard!;则输出则输出:We must study C+hard!n符号常量:一个符号名代表一个常量,称为符号常量,即以标识符形式出符号常量:一个符号名代表一个常量,称为符号常量,即以标识符形式出现的常量。(预处理命令现的常量。(预处理命令#define)第4页,此课件共30页哦变量变量n在程序运行期间其值可以改变的量称为变量。在程序运行期间其值可以改变的量称为变量。n变量的名字必须遵循标识符的命名规则。变量的名字必须遵循标识符的命名规则。C+规定标识符只能由规定标识符只能由字母、数字和下划线字母、数字和下划线3种字符组成,且种字符组成,且第一第一个字符必须为字母或下划线个字符必须为字母或下划线。合法的变量名:合法的变量名:sum,average,Student_name,tan,BASIC不合法的标识符和变量名:不合法的标识符和变量名:M.D.John,$123,#33,3G64,Ling li,C+,Zhang-ling,U.S.A.大写字母和小写字母被认为是两个不同的字符。大写字母和小写字母被认为是两个不同的字符。变量名不能与变量名不能与C+的关键字、系统函数名和类名相同。的关键字、系统函数名和类名相同。第5页,此课件共30页哦变量变量n变量定义:变量类型变量定义:变量类型 变量名表列;变量名表列;(float a=83.5,b,c,d=81.2;)nC+要求对变量作强制定义:要求对变量作强制定义:(1)凡未被事先定义的,不作为变量名,这就能保证程序中变量凡未被事先定义的,不作为变量名,这就能保证程序中变量名使用得正确。名使用得正确。(2)每一个变量被指定为一确定类型,在编译时就能为其分配相应的存每一个变量被指定为一确定类型,在编译时就能为其分配相应的存储单元。储单元。(3)指定每一变量属于一个特定的类型,这就便于在编译时,据此检指定每一变量属于一个特定的类型,这就便于在编译时,据此检查该变量所进行的运算是否合法。查该变量所进行的运算是否合法。n为变量赋初值:为变量赋初值:在定义变量时对它赋予一个初值,称为变量初始化。在定义变量时对它赋予一个初值,称为变量初始化。float a,b=5.78*3.5,c=2*sin(2.0);couta b cendl;输出结果可能为输出结果可能为1.48544e-38 15 1.81858多个变量赋予同一初值,必须分别指定:多个变量赋予同一初值,必须分别指定:float a=b=c=4.5;第6页,此课件共30页哦常变量常变量n常变量常变量(constant variable):在定义变量时,如果加上关键字:在定义变量时,如果加上关键字const,则,则变量的值在程序运行期间不能改变变量的值在程序运行期间不能改变 const int a=3;const int b=3+6,c=3*cos(1.5);n定义常变量时必须同时对它初始化定义常变量时必须同时对它初始化(即指定其值即指定其值),此后它的值不能,此后它的值不能再改变再改变 const int a;a=3;/常变量不能被赋值常变量不能被赋值n符号常量只是用一个符号代替一个字符串,在预编译时把所有符号常量替换符号常量只是用一个符号代替一个字符串,在预编译时把所有符号常量替换为所指定的字符串,它没有类型,在内存中并不存在以符号常量命名的存储为所指定的字符串,它没有类型,在内存中并不存在以符号常量命名的存储单元。单元。n常变量具有变量的特征,它具有类型,在内存中存在着以它命名的存储单常变量具有变量的特征,它具有类型,在内存中存在着以它命名的存储单元,可以用元,可以用sizeof运算符测出其长度。与一般变量惟一的不同是指定变量运算符测出其长度。与一般变量惟一的不同是指定变量的值不能改变。的值不能改变。第7页,此课件共30页哦C+的运算符的运算符(1)算术运算符算术运算符 +(加加)-(减减)*(乘乘)/(除除)%(整除求余整除求余)+(自加自加)-(自减自减)(2)关系运算符关系运算符(大于大于)(小于小于)(等于等于)(大于或等于大于或等于)(小于或等于小于或等于)!(不等于不等于)(3)逻辑运算符逻辑运算符 (逻辑与逻辑与)|(逻辑或逻辑或)!(逻辑非逻辑非)(4)位运算符位运算符(按位右移按位右移)(按位与按位与)|(按位或按位或)(按位异或按位异或)(按位取反按位取反)(5)赋值运算符赋值运算符(及其扩展赋值运算符及其扩展赋值运算符)(6)条件运算符条件运算符(?:)(7)逗号运算符逗号运算符(,)(8)指针运算符指针运算符(*)(9)引用运算符和地址运算符引用运算符和地址运算符()(10)求字节数运算符()求字节数运算符()(11)强制类型转换运算符(强制类型转换运算符((类型类型)或类型或类型())(12)成员运算符成员运算符(.)(13)指向成员的运算符指向成员的运算符(-)(14)下标运算符下标运算符()(15)其他其他(如函数调用运算符()(如函数调用运算符()第8页,此课件共30页哦算术运算符与算术表达式算术运算符与算术表达式n基本的算术运算符:基本的算术运算符:(加法运算符,或正值运算符。如(加法运算符,或正值运算符。如3+5,+3)(减法运算符,或负值运算符。如(减法运算符,或负值运算符。如5-2,-3)*(乘法运算符。如(乘法运算符。如3*5)(除法运算符。如(除法运算符。如5/3)(模运算符,两侧均应为整型数据,如的值为)。(模运算符,两侧均应为整型数据,如的值为)。参加参加+,-,*,/运算的两个数中有一个数为运算的两个数中有一个数为float型数据,则运算型数据,则运算的结果是的结果是double型。型。n优先级与结合性优先级与结合性 用算术运算符和括号将运算对象(也称操作数)连接起来的、用算术运算符和括号将运算对象(也称操作数)连接起来的、符合符合C+语法规则的式子,称语法规则的式子,称C+算术表达式。算术表达式。(1)在求解表达式时,先按运算符的优先级别高低次序执行;在求解表达式时,先按运算符的优先级别高低次序执行;(2)如果在一个运算对象两侧的运算符的优先级别相同,则按规定的如果在一个运算对象两侧的运算符的优先级别相同,则按规定的“结合方向结合方向”处理。处理。“自左至右的结合方向自左至右的结合方向”称称“左结合性左结合性”,“自右至自右至左的结合方向左的结合方向”称右结合性称右结合性第9页,此课件共30页哦算术运算符与算术表达式算术运算符与算术表达式n各类数值型数据间的混合运算:先转换成同一类型,然后进行运算。转换规各类数值型数据间的混合运算:先转换成同一类型,然后进行运算。转换规则:则:假设已指定为整型变量,为假设已指定为整型变量,为float变量,为变量,为double型变量,为型变量,为long型,有表达式:型,有表达式:10+a+i*f-d/e运算次序为:运算次序为:进行进行10+a的运算,先将的运算,先将转换成整数转换成整数97,运算结果为,运算结果为107。进进行行i*f的运算。先将的运算。先将i与与f都转换成都转换成double型,运算结果为型,运算结果为double型。型。整数整数107与与i*f的积相加。先将整数的积相加。先将整数107转换成双精度数(小数点后加若干个转换成双精度数(小数点后加若干个0,即,即107.00000),),结果为结果为double型。型。将变量将变量e转换成转换成double型,型,d/e结果为结果为double型。型。将将10+a+i*f的结果与的结果与d/e的商相减,结果为的商相减,结果为double型。型。上述的类型转换是由系统自动进行的。上述的类型转换是由系统自动进行的。第10页,此课件共30页哦算术运算符与算术表达式算术运算符与算术表达式n自增和自减运算符自增和自减运算符+n 表示先将表示先将n的值增的值增1,然后再使用,然后再使用n的值,即先加后用;的值,即先加后用;n+表示先使用表示先使用n的值,然后再将的值,然后再将n增增1,即先用后加;,即先用后加;-n 表示先将表示先将n的值减的值减1,然后再使用,然后再使用n的值,即先减后用;的值,即先减后用;n-表示先使用表示先使用n的值,然后再将的值,然后再将n减减1,即先用后减。,即先用后减。n强制类型转换运算符强制类型转换运算符 (类型名类型名)(表达式表达式):(double)a;(int)(x+y);(float)(5%3)类型名类型名(表达式表达式):int(x)或或 int(x+y)在强制类型转换时,得到一个所需类型的中间变量,但原来变量的类在强制类型转换时,得到一个所需类型的中间变量,但原来变量的类型未发生变化。型未发生变化。int i;x=3.6;i=(int)x;coutx=x,i=iendl;输出:输出:x=3.6,i=3第11页,此课件共30页哦赋值运算符与赋值表达式赋值运算符与赋值表达式n赋值运算符:将一个数据赋给一个变量;也可以将一个表达式的值赋给一赋值运算符:将一个数据赋给一个变量;也可以将一个表达式的值赋给一个变量。个变量。n赋值过程中的类型转换赋值过程中的类型转换对数值型或字符型在赋值时自动进行的类型转换:对数值型或字符型在赋值时自动进行的类型转换:(1)将浮点型数据(包括单、双精度)赋给整型变量时,舍弃其小数部分。将浮点型数据(包括单、双精度)赋给整型变量时,舍弃其小数部分。(2)将整型数据赋给浮点型变量时,数值不变,但以指数形式存储到变量中。将整型数据赋给浮点型变量时,数值不变,但以指数形式存储到变量中。(3)将一个将一个double型数据赋给型数据赋给float变量时,要注意数值范围不能溢出。变量时,要注意数值范围不能溢出。(4)字符型数据赋给整型变量,将字符的字符型数据赋给整型变量,将字符的ASCII码赋给整型变量。码赋给整型变量。(5)将一个将一个int、short或或long型数据赋给一个型数据赋给一个char型变量,只将其低型变量,只将其低8位原封不动地送到位原封不动地送到char型变型变量(发生截断)。量(发生截断)。(6)将将signed(有符号有符号)型数据赋给长度相同的型数据赋给长度相同的unsigned(无符号无符号)型变量,将存储单元内容原型变量,将存储单元内容原样照搬。样照搬。第12页,此课件共30页哦赋值运算符与赋值表达式赋值运算符与赋值表达式n复合的赋值运算符:在赋值符复合的赋值运算符:在赋值符“”之前加上其他运算符,可以构成复合的之前加上其他运算符,可以构成复合的运算符。运算符。a+=3 等价于等价于 a=a+3 x*=y+8 等价于等价于 x=x*(y+8)x%=3 等价于等价于 x=x%3 C+中常见的复合赋值运算符:中常见的复合赋值运算符:,*,&,|n赋值表达式:由赋值运算符将一个变量和一个表达式连接起来的式子。一般赋值表达式:由赋值运算符将一个变量和一个表达式连接起来的式子。一般形式为:形式为:n赋值运算符左侧的标识符称为赋值运算符左侧的标识符称为“左值左值”(left value,简写为,简写为lvalue)。变量可以作为左值,表达式、常变量不能作为左值。变量可以作为左值,表达式、常变量不能作为左值。n赋值运算符右侧的表达式称为赋值运算符右侧的表达式称为“右值右值”(right value,简写为,简写为rvalue)。左值都可以作为右值。左值都可以作为右值。第13页,此课件共30页哦赋值运算符与赋值表达式赋值运算符与赋值表达式n赋值表达式赋值表达式a=(b=4)+(c=6)(表达式值为(表达式值为10,a值为值为10,b等于等于4,c等于等于6)a=(b=10)/(c=2)(表达式值为(表达式值为5,a等于等于5,b等于等于10,c等于等于2)(a=3*5)=4*3 赋值表达式作为左值时应加括号赋值表达式作为左值时应加括号a+=a-=a*a 如果如果a的初值为的初值为12,此赋值表达式的求解步骤如下:,此赋值表达式的求解步骤如下:先进行先进行“a-=a*a”的运算,它相当于的运算,它相当于a=a-a*a=12-144-132。再进行再进行“a+=-132”的运算,它相当于的运算,它相当于a=a+(-132)132-132-264。n用用cout语句输出一个赋值表达式的值时,要将该赋值表达式用括号语句输出一个赋值表达式的值时,要将该赋值表达式用括号括起来,如果写成括起来,如果写成“couta=b;”将会出现编译错误。将会出现编译错误。n逗号运算符与逗号表达式逗号运算符与逗号表达式 一般形式:表达式,表达式一般形式:表达式,表达式先求解表达式先求解表达式1,再求解表达式,再求解表达式2。整个逗号表达式的值是表达式。整个逗号表达式的值是表达式2的值。如:的值。如:a=3*5,a*4 整个逗号表达式的值为整个逗号表达式的值为60。第14页,此课件共30页哦2.3.3 关系运算符与关系表达式关系运算符与关系表达式 6个关系运算符:、=、=、!=优先级高 优先级低 关系运算符优先级低于算术运算符、高于赋值运算符 注意区分“等于”运算符“=”与“赋值”运算符“=”关系表达式的结果类型为bool,值只能为 true 或 false 如:int a=4,b=10;a b,ab,a=b,a=b,a!=b 的结果分别为:的结果分别为:true,true,false,false,false,true第15页,此课件共30页哦2.3.4 逻辑运算符与逻辑表达式逻辑运算符与逻辑表达式 3个逻辑运算符:|、&、!优先级:低 高 逻辑表达式:用逻辑运算符连接进行逻辑运算的式子,逻辑表达式的结果类型为bool,值只能为 true 或 false 如:(a=60)&(a90)|(b85)/a大于90,或者b大于85,结果为true,条件成立 !(a=100)/a不等于100时,条件成立 第16页,此课件共30页哦2.3.4 逻辑运算符与逻辑表达式(续)逻辑运算符与逻辑表达式(续)逻辑运算符的运算规则逻辑与&:当且仅当两个运算量的值都为“真”时,运算结果为“真”,否则为“假”。逻辑或|:当且仅当两个运算量的值都为“假”时,运算结果为“假”,否则为“真”。逻辑非!:当运算量的值为“真”时,运算结果为“假”;当运算量的值为“假”时,运算结果为“真”。第17页,此课件共30页哦2.3.5 条件运算符条件运算符 条件运算符:?:条件表达式:表达式1?表达式2:表达式3 运算规则:如果“表达式1”的值为真(非0),则整个表达式的值等于表达式2的值,否则,整个表达式的值等于表达式3的值。如:ab?a:b /如ab,结果为a,否则为b,可求两数中较大者 ab?a:b /如ab,结果为a,否则为b,可求两数中较小者 第18页,此课件共30页哦2.3.6 sizeof运算符运算符 sizeof运算符用于计算指定数据类型或指定变量占用内存的字节数 用法:sizeof(数据类型)或 sizeof(表达式)如:sizeof(int)/结果为4 sizeof(3.3+20)/结果为8 返 回第19页,此课件共30页哦2.4 2.4 位运算符位运算符2.4.1 位运算符位运算符 C+使用位运算符可以对数据按二进制位进行操作。使用位运算符可以对数据按二进制位进行操作。1.按位与(&):将两个操作数对应的每一位分别进行逻辑:将两个操作数对应的每一位分别进行逻辑与与 如:9&7 9:00001001 7:00000111 9&7:00000001 9&7结果为结果为1 2.按位或(|):将两个操作数对应的每一位分别进行逻辑:将两个操作数对应的每一位分别进行逻辑或或 3.按位异或():将两个操作数对应的每一位分别进行异或:将两个操作数对应的每一位分别进行异或第20页,此课件共30页哦2.4.1 位运算符(续)位运算符(续)4.按位取反():单目运算符,对二进制的每一位取反:单目运算符,对二进制的每一位取反 5.左移位():使运算符左侧的操作数的各位左移指定:使运算符左侧的操作数的各位左移指定位数,低位补位数,低位补0,高位溢出部分舍弃。如,高位溢出部分舍弃。如 7):使运算符左侧操作数的各位右移指定位:使运算符左侧操作数的各位右移指定位数,溢出的低位舍弃,对无符号数和有符号中的正数,高位补数,溢出的低位舍弃,对无符号数和有符号中的正数,高位补0,对于有符号数中的负数,有些系统补对于有符号数中的负数,有些系统补0(称为逻辑右移),有些系(称为逻辑右移),有些系统补统补1(称为算术右移)。如(称为算术右移)。如 72的结果是的结果是1。0000011170001110072第21页,此课件共30页哦2.4.2 位运算符应用举例位运算符应用举例 例例2.10 输入变量输入变量a,b的值,并将变量的值,并将变量a的低的低4位置为位置为0,将变,将变量量b的低的低4位置为位置为1。#include void main()int a,b;cin a;cin b;a=a&(0 xf);b=b|0 xf;cout a endl;cout b endl;0 xf为十六进制数,它的后四位为为十六进制数,它的后四位为1,其他位均为,其他位均为0。取反后后四位为。取反后后四位为0,其他位均为,其他位均为1。若输入若输入2525和和2323,程序执,程序执行结果为:行结果为:16163131 返 回第22页,此课件共30页哦2.5 C+2.5 C+的构造类型的构造类型2.5.1 结构结构 1.结构:将不同数据类型但相互关联的一组数据组成一个有机整:将不同数据类型但相互关联的一组数据组成一个有机整体,如一个学生可包含学号、性别、年龄、成绩等不同类型的数据,体,如一个学生可包含学号、性别、年龄、成绩等不同类型的数据,这些数据是相互关联的一个整体。这些数据是相互关联的一个整体。2.结构类型定义的形式:struct 结构名结构名 如:如:struct student 数据类型数据类型1 成员名成员名1;int no;数据类型数据类型2 成员名成员名2;char sex;int age;数据类型数据类型n 成员名成员名n;float score;第23页,此课件共30页哦2.5 C+2.5 C+的构造类型的构造类型2.5.1 结构(续)结构(续)3.结构变量的定义:结构名结构名 结构变量名;结构变量名;如如 student s1,s2;也可以在定义结构类型的同时定义结构变量,如:也可以在定义结构类型的同时定义结构变量,如:struct student s1,s2;4.结构变量的引用:结构变量名结构变量名.成员名成员名 5.结构变量所占字节:总是最大成员所占字节的倍数,总是最大成员所占字节的倍数,可由可由sizeof 运算符求出。运算符求出。第24页,此课件共30页哦例2.11 结构变量的定义和使用结构变量的定义和使用#include struct studentint no;char sex;int age;float score;程序执行结果为:程序执行结果为:99010019901001mm2020909016161616void main()void main()student s1;student s1;s1.no=9901001;s1.no=9901001;s1.sex=m;s1.sex=m;s1.age=20;s1.age=20;s1.score=90;s1.score=90;cout s1.no endl;cout s1.no endl;cout s1.sex endl;cout s1.sex endl;cout s1.age endl;cout s1.age endl;cout s1.score endl;cout s1.score endl;cout sizeof(student)endl;cout sizeof(student)endl;cout sizeof(s1)endl;cout sizeof(s1)endl;第25页,此课件共30页哦2.5.2 联合联合 1.联合:与结构类似,但其所有成员共同占有同一内存空间。:与结构类似,但其所有成员共同占有同一内存空间。2.联合类型定义的形式:union 联合名联合名 如:如:union data 数据类型数据类型1 成员名成员名1;int i;数据类型数据类型2 成员名成员名2;char ch;float f;数据类型数据类型n 成员名成员名n;第26页,此课件共30页哦2.5.2 联合(续)联合(续)3.联合变量的定义:联合名联合名 联合变量名;联合变量名;如如 data d1,d2;4.联合变量的引用:联合变量名联合变量名.成员名成员名 5.结构变量所占字节:最大成员所占字节数,可由最大成员所占字节数,可由sizeof 运算运算符求出。如联合类型符求出。如联合类型data所占字节数为所占字节数为4。第27页,此课件共30页哦例2.12 联合变量的定义和使用联合变量的定义和使用#include union dataint i;char ch;float f;程序执行结果为:程序执行结果为:100100,d d,1.4013e-0431.4013e-0436565,A A,9.10844e-0449.10844e-04411134566401113456640,55.555.54 44 4 void main()void main()data d;data d;d.i=100;d.i=100;cout d.i ,d.ch ,d.f endl;cout d.i ,d.ch ,d.f endl;d.ch=A;d.ch=A;cout d.i ,d.ch ,d.f endl;cout d.i ,d.ch ,d.f endl;d.f=55.5;d.f=55.5;cout d.i ,d.ch ,d.f endl;cout d.i ,d.ch ,d.f endl;cout sizeof(data)endl;cout sizeof(data)endl;cout sizeof(d)endl;cout sizeof(d)endl;注意:每次对一个成员赋值后,其他成员值也发生注意:每次对一个成员赋值后,其他成员值也发生变化,是由于他们共同占有同一内存空间变化,是由于他们共同占有同一内存空间第28页,此课件共30页哦2.5.3 枚举枚举 1.枚举:用标识符表示的整型常量的集合。:用标识符表示的整型常量的集合。2.枚举类型定义的形式:enum 枚举类型名枚举类型名 枚举元素枚举元素1,枚举元素枚举元素2,枚举元素枚举元素n;如:如:enum weekdays Sun,Mon,Tue,Wed,Thu,Fri,Sat;3.枚举元素的值:若不指定初始值,将自动从若不指定初始值,将自动从0开始为每个元素赋值。开始为每个元素赋值。如如 weekdays 的各元素值分别为:的各元素值分别为:0,1,2,3,4,5,6 也可直接指定元素值,如:也可直接指定元素值,如:enum weekdays Sun=7,Mon=1,Tue,Wed,Thu,Fri,Sat;则以上则以上 weekdays 各元素的值分别为:各元素的值分别为:7,1,2,3,4,5,6第29页,此课件共30页哦2.5.3 枚举(续)枚举(续)4.枚举变量的定义:枚举类型名枚举类型名 枚举变量名;枚举变量名;例例2.13 枚举类型的应用枚举类型的应用#include enum weekdays Sun=7,Mon=1,Tue,Wed,Thu,Fri,Sat;void main()weekdays someday;someday=Mon;cout someday endl;someday=Thu;cout someday endl;cout Mon Tue Wed Thu Fri Sat Sun endl;程序执行结果为:程序执行结果为:1 14 412345671234567 返 回第30页,此课件共30页哦