第2讲数据类型与表达式_第1页
第2讲数据类型与表达式_第2页
第2讲数据类型与表达式_第3页
第2讲数据类型与表达式_第4页
第2讲数据类型与表达式_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第第2讲讲 数据类型与表达式数据类型与表达式学习目标学习目标:认识、理解认识、理解C+表达式及其基本使用表达式及其基本使用l C+的数据类型的数据类型l 常量常量l 变量变量l C+的运算符的运算符l 算术运算符与算术表达式算术运算符与算术表达式l 赋值运算符与赋值表达式赋值运算符与赋值表达式l 逗号运算符与逗号表达式逗号运算符与逗号表达式n 编程基本目的:编程基本目的:处理数据处理数据n 处理数据的方法处理数据的方法l 表示数据:表示数据:使用常量与变量使用常量与变量l 处理数据的基本方法:处理数据的基本方法:使用运算符使用运算符n为了便于数据处理为了便于数据处理l对数据进行分类对数据进行分

2、类2.1 C+的数据类型的数据类型n数据类型数据类型是指:值的集合以及在这些值上可以进是指:值的集合以及在这些值上可以进行的操作行的操作。注意,在数据类型的概念中包含了两个注意,在数据类型的概念中包含了两个方面:方面:1. 数据的取值范围数据的取值范围2. 数据上的操作数据上的操作nC+数据类型(下图):数据类型(下图):2.1 C+的数据类型的数据类型数据类型数据类型基本类型基本类型整型整型短整型短整型(short int)整型整型(int) 长整型长整型(long int)字符型字符型(char)浮点型浮点型 单精度型单精度型(float)双精度型双精度型(double)长双精度型长双精度

3、型(long double)布尔型布尔型(bool) -逻辑型逻辑型构造类型构造类型枚举类型枚举类型(enum)数组类型数组类型结构体类型结构体类型(struct)共用体类型共用体类型(union)类类型类类型(class)指针类型指针类型引用类型引用类型空类型空类型(void) -无值型无值型n常量的值是不能改变的常量的值是不能改变的,一般从其字面形式即可,一般从其字面形式即可判别是否为常量判别是否为常量(或称为或称为“字面常量字面常量”、“字面值字面值”)。n常量区分类型常量区分类型, 主要包括两大类主要包括两大类:l数值型常量数值型常量l字符型常量字符型常量2.2 常量常量 2.2.1

4、什么是常量什么是常量1. 整型常量整型常量(整数)的类型整数)的类型(1) short int型整数,范围型整数,范围 -32768+32767(2) long int型整数,范围型整数,范围-2147483648+2147483647整型常量的整型常量的3种书写形式:种书写形式: n十进制十进制可后加可后加l或或L,则为则为long int型常量型常量如如123L,421L,0L等,等,n 八进制八进制: 以以0开始开始n 十六进制十六进制: 以以0X或或0 x开始开始2.2.2 数值常量数值常量(或称或称常数常数)十进制十进制 八进制八进制 十六进十六进0 0 0 x05 05 0 x59

5、 011 0 x0982 0122 0 x52123 0173 0 x7B2. 浮点数的表示方法浮点数的表示方法(1) 十进制十进制小数小数形式,如形式,如21.456,-7.98 等等l 加加字母字母F或或f,表示单精度表示单精度浮点数,如浮点数,如1234F,-43f,占占4个字节个字节。l 加加字母字母L或或l,表示长表示长双精度数双精度数(long double),占占8个字节个字节。(2) 指数形式指数形式(即科学计数法即科学计数法)0.314159e1 表示表示 0.3141591013.14159e0 表示表示 3159e-2 表示表示 314.1591

6、0-21. 普通的字符常量普通的字符常量l用用单撇号括起来单撇号括起来一个字符。如一个字符。如a#%D2. 转义字符常量转义字符常量l以反斜杠以反斜杠“”开头的字符序列。如开头的字符序列。如n 表示表示 “换行换行”符符2.2.3 字符常量字符常量3. 字符数据在内存中的存储形式及其使用方法字符数据在内存中的存储形式及其使用方法n存储形式:存储形式:存贮字符的存贮字符的ASCII代码。代码。如如 a97,b 98n视为单字节整数视为单字节整数,如如:l 字符字符 赋给赋给 整型变量整型变量l 整型数据整型数据 赋给赋给 字符变量字符变量l 可以对字符数据进行算术运算可以对字符数据进行算术运算例

7、例2.1 将字符赋给整型变量。将字符赋给整型变量。#include using namespace std;int main( ) int i,j; /i和和j是整型变量是整型变量 i=A; /将一个字符常量赋给整型变量将一个字符常量赋给整型变量i j=B; /将一个字符常量赋给整型变量将一个字符常量赋给整型变量j couti jn; /输出整型变量输出整型变量i和和j的值,的值,n 是换行符是换行符 return 0;编程查看字编程查看字符符ASCII例例2.2 字符数据与整数进行算术运算。下面程序的字符数据与整数进行算术运算。下面程序的作用是将小写字母转换为大写字母。作用是将小写字母转换为

8、大写字母。#include using namespace std;int main( ) char c1,c2; c1 = a; c2 = b; c1 = c1 - 32; c2 = c2 - 32; coutc1 c2endl; return 0;转换大小写转换大小写4. 字符串常量字符串常量n形式形式: 用双撇号括起来的部分用双撇号括起来的部分就是字符串常量就是字符串常量l如如abcHello!a+bLiping My name is Jones n 4. 字符串常量字符串常量n存贮方式存贮方式连续字节存贮连续字节存贮,以以0结束结束l例如例如, abc在内存中占在内存中占4个字节个字节

9、(而不是而不是3个字节个字节)n注意注意: 区别区别l字符串长度字符串长度: 字符个数字符个数l字符串存贮容量字符串存贮容量: 字符个数字符个数+ 0, 即多一个字节即多一个字节l如如 coutabcendl; 输出输出3个字符个字符abc,而不包括而不包括0n字符串常量与字符区别字符串常量与字符区别注意:注意: a和和a代表不同的含义,代表不同的含义,ua 是字符串常量,占两个字节是字符串常量,占两个字节ua 是字符常量,占是字符常量,占1个字节个字节l例如:判断以下程序片段对错:例如:判断以下程序片段对错: char c; /定义一个字符变量定义一个字符变量c=a; /正确正确c=a; /

10、错误错误,c只能容纳一个字符只能容纳一个字符为了编程和阅读的方便为了编程和阅读的方便,在,在C+程序设计中,常用程序设计中,常用一个符号名代表一个常量,称为一个符号名代表一个常量,称为符号常量符号常量,即以标,即以标识符形式出现的常量。识符形式出现的常量。l例例2.3 符号常量的使用。符号常量的使用。 #include using namespace std;#define PRICE 30 /注意这不是语句,末尾不要加分号注意这不是语句,末尾不要加分号int main ( ) int num,total; num=10; total=num * PRICE; couttotal=totale

11、ndl; return 0; 2.2.4 符号常量符号常量定义定义宏常量宏常量n变量:变量:是指在程序运行期间其值可以改变的量是指在程序运行期间其值可以改变的量n理解变量理解变量:l变量表示内存中的某个变量表示内存中的某个存储单元存储单元l变量名变量名:标识该存储单元:标识该存储单元l变量值变量值:在该存储单元中存放变量的值:在该存储单元中存放变量的值图图2.6 2.3 变量变量 2.3.1 什么是变量什么是变量n标识符(标识符(identifier):用来标识变量、符号常量、:用来标识变量、符号常量、函数、数组、类型等函数、数组、类型等实体名字实体名字的有效字符序列的有效字符序列。l标识符只

12、能由字母、数字和下划线标识符只能由字母、数字和下划线3种字符组成种字符组成,且第且第1个字符必须为字母或下划线,一般不超过个字符必须为字母或下划线,一般不超过32个字符个字符l区分大写和小写字母区分大写和小写字母l不能与关键字不能与关键字、系统函数名和类名相同、系统函数名和类名相同2.3.2 变量名规则变量名规则n合法变量名示例合法变量名示例: myAge myWeight y2000 _t s2i bookTitleBookTitle2.3.2 变量名规则变量名规则n不合法变量名示例不合法变量名示例:40pigs 不能以数字开头不能以数字开头Mymoney 不能出现不能出现空格空格Lengt

13、h-10 不能出现不能出现连字号连字号myhotmail 不能出现不能出现符。符。int 是保留字,由系统使用,程序是保留字,由系统使用,程序 员不能再重复定义该标识符员不能再重复定义该标识符2.3.2 变量名规则变量名规则l先定义,后使用先定义,后使用l定义变量的一般形式定义变量的一般形式 变量类型变量类型 变量名表列;变量名表列;如如 float a,b,c,d,e; 2.3.3 定义变量定义变量l如果对变量未赋初值,则该变量的初值是一个不如果对变量未赋初值,则该变量的初值是一个不可预测的值。可预测的值。l形式:形式:在定义变量时赋予初值(称为在定义变量时赋予初值(称为变量初始变量初始化)

14、化)。如。如 float a=3, b=5.78*3.5, c=2*sin(2.0);l效果:效果:初始化不是在编译阶段完成的,而是在程序运行初始化不是在编译阶段完成的,而是在程序运行时完成赋值,相当于执行一个赋值语句。时完成赋值,相当于执行一个赋值语句。如,如, int a=3;相当于以下两个语句相当于以下两个语句 : int a; a=3;2.3.4 为变量赋初值为变量赋初值 l定义形式定义形式:在定义变量时,加上关键字:在定义变量时,加上关键字const,则则变量的值在程序运行期间不能改变,这种变量称为变量的值在程序运行期间不能改变,这种变量称为常变量常变量。l例如例如 const in

15、t a=3;l注意:注意:u在定义常变量时必须同时指定初值。在定义常变量时必须同时指定初值。u常变量不能出现在赋值号的左边。例如常变量不能出现在赋值号的左边。例如 const int a; a=3; /常变量不能被赋值常变量不能被赋值2.3.5 常变量常变量常变量与符号变量区别常变量与符号变量区别lC+建议使用常变量,不使用符号常量建议使用常变量,不使用符号常量u符号常量(用符号常量(用#define命令定义)只是用一个命令定义)只是用一个符号代替一个字符串,在预编译时进行替换符号代替一个字符串,在预编译时进行替换u常变量具有变量的特征,它具有类型常变量具有变量的特征,它具有类型,在内,在内存

16、中存在着以它命名的存储单元。但是,存中存在着以它命名的存储单元。但是,常变常变量有一个限制:量有一个限制: 存储单元中的值不允许变化,存储单元中的值不允许变化,即常变量可以称为即常变量可以称为只读变量只读变量(read-only-variable)。C+的运算符十分丰富,使得的运算符十分丰富,使得C+的运算十分灵活的运算十分灵活方便。方便。C+提供了以下运算符:提供了以下运算符:(1) 算术运算符算术运算符 +(加加)-(减减) *(乘乘) /(除除) %(整除求余整除求余)+(自加自加) -(自自减减)(2) 关系运算符关系运算符(大于大于)(小于小于) (等于等于)(大于或等于大于或等于)

17、(小于或等于小于或等于)!(不等于不等于)2.4 C+的运算符的运算符() 逻辑运算符逻辑运算符 (逻辑与逻辑与) |(逻辑或逻辑或) !(逻辑非逻辑非)() 位运算符位运算符 (按位右移按位右移) (按位与按位与) |(按位或按位或) (按位异或按位异或) (按位取反按位取反)() 赋值运算符赋值运算符 (及其扩展赋值运算符及其扩展赋值运算符)() 条件运算符条件运算符 (?:)() 逗号运算符逗号运算符 (,)() 指针运算符指针运算符 (*)(9) 引用运算符和地址运算符引用运算符和地址运算符 ()(10) 求字节数运算符()求字节数运算符()(11) 强制类型转换运算符(强制类型转换运

18、算符( (类型类型) 或类型或类型( ))(12) 成员运算符成员运算符 (.)(13) 指向成员的运算符指向成员的运算符 (-)(14) 下标运算符下标运算符 ( )(15) 其他其他 (如函数调用运算符()(如函数调用运算符()l本章主要介绍本章主要介绍:l算术运算符与算术表达式算术运算符与算术表达式l赋值运算符与赋值表达式赋值运算符与赋值表达式l逗号运算符与逗号表达式逗号运算符与逗号表达式(加法运算符,或正值运算符。如(加法运算符,或正值运算符。如3+5,+3)(减法运算符,或负值运算符。如(减法运算符,或负值运算符。如5-2,-3)* (乘法运算符。如乘法运算符。如3*5)(除法运算符

19、。如(除法运算符。如5/3)(模运算符,或称求余运算符,两侧均应为整(模运算符,或称求余运算符,两侧均应为整型数据,如的值为)。型数据,如的值为)。2.5 算术运算符与算术表达式算术运算符与算术表达式 2.5.1 基本的算术运算符基本的算术运算符注意注意:l两个整数相除的结果为整数两个整数相除的结果为整数,如,如5/3的结果值为的结果值为1,舍去小数部分。舍去小数部分。l如果参加如果参加+, -, *, / 运算的两个数中有一个数为运算的两个数中有一个数为float型数据型数据,则运算的结果是,则运算的结果是double型,因为型,因为C+在运在运算时对所有算时对所有float型数据都按型数据

20、都按double型数据处理。型数据处理。l算术表达式算术表达式:用算术运算符和括号将运算对象(也用算术运算符和括号将运算对象(也称操作数)连接起来的、符合称操作数)连接起来的、符合C+语法规则的式子。语法规则的式子。运算对象包括常量、变量、函数等。如:运算对象包括常量、变量、函数等。如: a*b/c-1.5+al运算符的优先级:运算符的优先级:在求解表达式时,先按运算符在求解表达式时,先按运算符的优先级别高低次序执行,如先乘除后加减:的优先级别高低次序执行,如先乘除后加减:a-b*cl结合性:结合性:如果在一个运算对象两侧的运算符的优如果在一个运算对象两侧的运算符的优先级别相同,如先级别相同,

21、如a-b+c,则按规定的则按规定的“结合方向结合方向”(左结合、右结合)(左结合、右结合)处理。处理。2.5.2 算术表达式和运算符的优先级与结合性算术表达式和运算符的优先级与结合性在计算表达式时在计算表达式时,若操作数的类型不同,如若操作数的类型不同,如10 + a + 1.5 - 8765.1234*b则则, 不同类型的数据要先转换成同一类型不同类型的数据要先转换成同一类型,然后进,然后进行运算。转换的规则按图所示行运算。转换的规则按图所示:2.5.3 表达式中各类数值型数据间的混合运算表达式中各类数值型数据间的混合运算示例示例:假设已指定为整型变量,为假设已指定为整型变量,为float变

22、量,变量,为为double型变量,为型变量,为long型,有下面表达式:型,有下面表达式: 10+a+i*f-d/e其运算次序为:其运算次序为: 进行进行10+a的运算,先将的运算,先将转换成整数转换成整数97,运算结果为,运算结果为107进行进行 i*f 的运算。先将的运算。先将i与与f都转换成都转换成double型,运算结果型,运算结果为为double型。型。整数整数107与与i*f的积相加。先将整数的积相加。先将整数107转换成双精度数,转换成双精度数,结果为结果为double型。型。将变量将变量e转换成转换成double型,型,d/e结果为结果为double型。型。将将10+a+i*f

23、的结果与的结果与d/e的商相减,结果为的商相减,结果为double型。型。上述的类型转换是由系统自动进行的。上述的类型转换是由系统自动进行的。l自增自增(+)和自减和自减(-)运算符的作用是运算符的作用是使变量的值增使变量的值增1或减或减12.5.4 自增和自减运算符自增和自减运算符l+ 增增1运算运算。若有。若有 int x=100,y;y = +x; /y=101, x=101 作为表达式作为表达式 /作为表达式,作为表达式,(+x)返回返回x增增1之后的值之后的值y = x+; /y=100, x=101 /作为表达式,作为表达式,(x+)返回返回x增增1之前的值之前的值l- 减减1运算

24、运算。如。如若有若有 int x=100,y;y = -x; /y=99, x=99y = x-; /y=100, x=99除自动类型转换外,也可以除自动类型转换外,也可以利用强制类型转换运算利用强制类型转换运算符将一个表达式转换成所需类型符将一个表达式转换成所需类型。l形式一:形式一: (double) (将(将a转换成转换成double类型)类型) (int)()(x+y) (将将x+y的值转换成整型)的值转换成整型) (float)(5%3) (将将5%3的值转换成的值转换成float型)型)l形式二:形式二:int(x) 或或 int(x+y)2.5.5 强制类型转换运算符强制类型转换

25、运算符例例2.4 强制类型转换。强制类型转换。#include using namespace std;int main( ) float x; int i; x=3.6; i=(int)x; coutx=x,i= iendl; return 0;强制类型转强制类型转换换l赋值符号赋值符号“”就是赋值运算符,它的作用是将就是赋值运算符,它的作用是将一个数据(表达式)赋给一个变量。一个数据(表达式)赋给一个变量。l例如例如 a=3; a=3*2;/效果:执行一次赋值操作(或称赋值运算)。效果:执行一次赋值操作(或称赋值运算)。/把常量把常量3赋给变量赋给变量a2.6 赋值运算符与赋值表达式赋值运

26、算符与赋值表达式 2.6.1 赋值运算符赋值运算符如果赋值运算符两侧的类型不一致,但都是数值型如果赋值运算符两侧的类型不一致,但都是数值型或字符型时,在赋值时会自动进行类型转换。或字符型时,在赋值时会自动进行类型转换。(1) 将将浮点型浮点型数据(包括单、双精度)赋给数据(包括单、双精度)赋给整型整型变变量时,量时,舍弃其小数部分。舍弃其小数部分。(2) 将将整型整型数据赋给数据赋给浮点浮点型变量时,型变量时,数值不变数值不变,但,但以指数形式存储到变量中。以指数形式存储到变量中。(3) 将一个将一个double型数据赋给型数据赋给float变量时,要注意变量时,要注意数值范围不能溢出。数值范

27、围不能溢出。(4) 字符型字符型数据赋给数据赋给整型整型变量,将字符的变量,将字符的ASCII码码赋给整型变量。赋给整型变量。2.6.2 赋值过程中的类型转换赋值过程中的类型转换(5) 将一个将一个int、short或或long型数据赋给一个型数据赋给一个char型型变量,只将其低变量,只将其低8位原封不动地送到位原封不动地送到char型变量型变量(发生截断发生截断)。例如)。例如short int i=289;char c;c=i; /将一个将一个int型数据赋给一个型数据赋给一个char型变量型变量效果如下效果如下:假定一个:假定一个int型数据占两个字节型数据占两个字节(16位位)(6)

28、 将将signed(有符号有符号)型数据赋给长度相同的型数据赋给长度相同的unsigned(无符号无符号)型变量,将存储单元内容原样照型变量,将存储单元内容原样照搬(连原有的符号位也作为数值一起传送)。搬(连原有的符号位也作为数值一起传送)。例例2.5 将有符号数据传送给无符号变量。将有符号数据传送给无符号变量。#include using namespace std;int main( ) unsigned short a; short int b=-1; a=b; couta=aendl; return 0;转为转为无符号无符号数数运行结果为运行结果为65535赋给赋给b的值是的值是-1,

29、怎么会得到,怎么会得到65535呢?请看图呢?请看图2.9所所示的赋值情况。示的赋值情况。-1的补码形式为的补码形式为1111111111111111(即全部即全部16个二进个二进制位均为制位均为1),将它传送给,将它传送给a,而而a是无符号型变量,是无符号型变量,16个位全个位全1是十进制的是十进制的65535。如果。如果b为正值,且在为正值,且在032767之间,则赋值后数值不变。之间,则赋值后数值不变。-1变变65535l形式:形式:在赋值符在赋值符“”之前加上其他运算符,可之前加上其他运算符,可以构成复合赋值运算符。如:以构成复合赋值运算符。如: a+=3 等价于等价于 a=a+3 x

30、*=y+8 等价于等价于 x=x*(y+8) x%=3 等价于等价于 x=x%3l凡是二元(二目)运算符,都可以与赋值符一起组合成复凡是二元(二目)运算符,都可以与赋值符一起组合成复合赋值符。合赋值符。如:如:,*,&,|l用途:用途:l为了简化程序,使程序精炼为了简化程序,使程序精炼l为了提高编译效率为了提高编译效率2.6.3 复合赋值运算符复合赋值运算符l定义:定义:由赋值运算符将一个变量和一个表达式连由赋值运算符将一个变量和一个表达式连接起来的式子称为接起来的式子称为“赋值表达式赋值表达式”。形式为:。形式为: 如:如: 5+3*b;l运算过程运算过程:先求右侧:先求右侧“表达式

31、表达式”的值,然后赋给的值,然后赋给左侧变量。左侧变量。2.6.4 赋值表达式赋值表达式n左值与右值概念左值与右值概念l“左值左值”(left value,简写为简写为lvalue):出现在赋出现在赋值运算符左侧的标识符值运算符左侧的标识符。一般为变量。一般为变量。l“右值右值”(right value,简写为简写为rvalue):出现出现在赋值运算符右侧的表达式。在赋值运算符右侧的表达式。 5+3*b;2.6.4 赋值表达式赋值表达式左值左值右值右值n赋值表达式也是表达式赋值表达式也是表达式l其值是赋值后的左值其值是赋值后的左值l赋值运算符具有赋值运算符具有右结合右结合性性任意表达式有值!任意表达式有值!如:如:a=b=c=5 /表达式值为表达式值为5,a,b,c值均为值均为5)a=5+(c=6) /表达

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论