计算机基础数据类型与表达式.ppt

上传人:牧羊曲112 文档编号:6023569 上传时间:2023-09-15 格式:PPT 页数:166 大小:931KB
返回 下载 相关 举报
计算机基础数据类型与表达式.ppt_第1页
第1页 / 共166页
计算机基础数据类型与表达式.ppt_第2页
第2页 / 共166页
计算机基础数据类型与表达式.ppt_第3页
第3页 / 共166页
计算机基础数据类型与表达式.ppt_第4页
第4页 / 共166页
计算机基础数据类型与表达式.ppt_第5页
第5页 / 共166页
点击查看更多>>
资源描述

《计算机基础数据类型与表达式.ppt》由会员分享,可在线阅读,更多相关《计算机基础数据类型与表达式.ppt(166页珍藏版)》请在三一办公上搜索。

1、数据类型常量与变量C+的运算符和表达式,本章内容要点:,第二章 数据类型与表达式,所有的语言系统都是由字符集和规则集组成的;字符根据规则组合形成表达式、语句;由各种语句构成函数和程序.,2.1 C+的字符集与词汇,C+语言的字符集是ASCII码的子集,有:26个小写字母:a b c d e f g h i j k l m n o p q r s t u v w x y z26个大写字母:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z10个数字:0 1 2 3 4 5 6 7 8 9其他符号:空格!#%?_|.,2.1 C+的字符集与词汇,

2、1关键字又称保留字关键字是系统预定义的单词。C+不允许对关键字重定义。,2.1 C+的字符集与词汇,C+常用的关键字:auto break case char class const continue default delete elseenum explicit extern float for friend goto if inline int long new operator private protected public register return short signed sizeof static struct switch this typedef union unsi

3、gned virtual void while,2标识符 由程序员定义的命名符,2.1 C+的字符集与词汇,语法:以字母或下划线开始,由字母、数字和下划线组成的符号串,注意:,break main int 等不能用于命名程序中的自定义函数、变量、常量,(1)不能使用关键字作用户标识符;,(2)C+中,字母大小写敏感;,(3)C+没有规定标识符的长度,不同编译系统有不同的识别长度;,(4)标识符尽可能做到见文知义。,Aa 和 aa是两个不同的标识符,2标识符 由程序员定义的命名符,2.1 C+的字符集与词汇,语法:以字母或下划线开始,由字母、数字和下划线组成的符号串,例 判断以下标识符的正确性:

4、,合法标识符有:a x1 no_1 _a2c sum Name name不合法标识符有:2a x+y a,b a&b const,2标识符 由程序员定义的命名符,2.1 C+的字符集与词汇,语法:以字母或下划线开始,由字母、数字和下划线组成的符号串,例 判断以下标识符的正确性:,合法标识符有:a x1 no_1 _a2c sum Name name不合法标识符有:2a x+y a,b a&b const,1.2 C+的字符集与词汇,2标识符 由程序员定义的命名符,2.1 C+的字符集与词汇,语法:以字母或下划线开始,由字母、数字和下划线组成的符号串,例 判断以下标识符的正确性:,以数字开头,合

5、法标识符有:a x1 no_1 _a2c sum Name name不合法标识符有:2a x+y a,b a&b const,2标识符 由程序员定义的命名符,2.1 C+的字符集与词汇,语法:以字母或下划线开始,由字母、数字和下划线组成的符号串,例 判断以下标识符的正确性:,合法标识符有:a x1 no_1 _a2c sum Name name不合法标识符有:2a x+y a,b a&b const,2标识符 由程序员定义的命名符,2.1 C+的字符集与词汇,语法:以字母或下划线开始,由字母、数字和下划线组成的符号串,例 判断以下标识符的正确性:,关键字,合法标识符有:a x1 no_1 _a

6、2c sum Name name不合法标识符有:2a x+y a,b a&b const,3运算符 运算符是对数据进行操作的简洁表达,以单词的形式调用系统预定义函数,2.1 C+的字符集与词汇,例如:+加-减*乘/除 大于=大于或等于=等于!=不等于=小于或等于,4分隔符 用于在程序分隔不同的语法单位,便于编译系统的识别,2.1 C+的字符集与词汇,常用的分隔符有:空格,逗号,分号,冒号,括号,注释符等,有些单词,例如运算符,也起到分隔符的作用,例如:int a,b,c;a=b+c;,必须用空格作分隔符,4分隔符 用于在程序分隔不同的语法单位,便于编译系统的识别,2.1 C+的字符集与词汇,常

7、用的分隔符有:空格,逗号,分号,冒号,括号,注释符等,有些单词,例如运算符,也起到分隔符的作用,例如:int a,b,c;a=b+c;,类型是对数据的抽象;类型相同的数据有相同的表示形式、存储格式以及相关的操作;程序中使用的所有数据都必定属于某一种数据类型.,2.2 C+的基本数据类型与存储形式,2.2.1 C+的数据类型,2.2.2 数据存储,一个二进制位(bit),存储阵列,一个二进制位(bit),存储阵列,2.2.2 数据存储,一个二进制位(bit),存储阵列,2.2.2 数据存储,8位一个字节(byte),存储阵列,2.2.2 数据存储,8位一个字节(byte),存储阵列,2.2.2

8、数据存储,16位一个字(word),存储阵列,2.2.2 数据存储,32位一个字(word),存储阵列,2.2.2 数据存储,空字符,存储阵列,2.2.2 数据存储,字符A,存储阵列,2.2.2 数据存储,整型值65,存储阵列,2.2.2 数据存储,2.2.3 基本类型,常用数据类型描述,实际上,各种数据类型的宽度是由计算机和所使用的C+环境决定的.请同学们上机查一查你的系统的数据类型的宽度.,1整型,1.3.3 基本类型,十进制(Decimal,base 10),示数形式,+|-Digits L|l,1整型,1.3.3 基本类型,十进制(Decimal,base 10),+|-Digits

9、L|l,09 数字串第一个数字必须非0,1整型,示数形式,1.3.3 基本类型,+|-Digits L|l,可选 L or l 指定 long int,十进制(Decimal,base 10),1整型,示数形式,1.3.3 基本类型,例如:23-45101+5523L-45L101L+55L,+|-Digits L|l,十进制(Decimal,base 10),1整型,示数形式,1.3.3 基本类型,八进制(Octal,base 8),OctalDigits L|l,1整型,示数形式,1.3.3 基本类型,OctalDigits L|l,07 数字串必须以数字 0 为前缀,八进制(Octal,

10、base 8),1整型,示数形式,1.3.3 基本类型,OctalDigits L|l,例如:0230771045010,八进制(Octal,base 8),1整型,示数形式,1.3.3 基本类型,OctalDigits L|l,例如:0230771045010,八进制(Octal,base 8),1整型,示数形式,281380=19,1.3.3 基本类型,十六进制(Hexadecimal,base 16),(0 x|0X)HexDigits L|l,1整型,示数形式,1.3.3 基本类型,以 0 x 或 0X 为前缀,(0 x|0X)HexDigits L|l,十六进制(Hexadecima

11、l,base 16),1整型,示数形式,1.3.3 基本类型,十六进制数字串可以为 09,af(或 AF),(0 x|0X)HexDigits L|l,十六进制(Hexadecimal,base 16),1整型,示数形式,1.3.3 基本类型,(0 x|0X)HexDigits L|l,例如:0 x2a0 x450 xffL0 xA1e,十六进制(Hexadecimal,base 16),1整型,示数形式,1.3.3 基本类型,(0 x|0X)HexDigits L|l,例如:0 x2a0 x450 xffL0 xA1e,十六进制(Hexadecimal,base 16),1整型,示数形式,1

12、516115160=255,1.3.3 基本类型,(0 x|0X)HexDigits L|l,例如:0 x2a0 x450 xffL0 xA1e,十六进制(Hexadecimal,base 16),1整型,示数形式,10162 116114160=2590,1.3.3 基本类型,float4 字节单精度浮点型double8 字节双精度浮点型long double 16 字节长双精度浮点型,2浮点型,常用示数方式,+|-Digits.Digits F|f|L|l,2浮点型,+|-Digits.Digits F|f|L|l,常用示数方式,2浮点型,+|-Digits.Digits F|f|L|l,

13、只允许省略其中一个数字串,常用示数方式,2浮点型,+|-Digits.Digits F|f|L|l,可选的类型说明符,常用示数方式,2浮点型,+|-Digits.Digits F|f|L|l,例如:-2.34 3.1416 29.00.23 0.23,常用示数方式,2浮点型,科学示数方式,+|-Digits.Digits Exponent F|f|L|l,2浮点型,+|-Digits.Digits Exponent F|f|L|l,科学示数方式,2浮点型,+|-Digits.Digits Exponent F|f|L|l,有指数部分时不能省略尾数部分,科学示数方式,2浮点型,+|-Digits

14、.Digits Exponent F|f|L|l,可选择的指数部分,科学示数方式,2浮点型,+|-Digits.Digits Exponent F|f|L|l,指数部分的表示形式,(e|E)+|-Digits,科学示数方式,2浮点型,+|-Digits.Digits Exponent F|f|L|l,(e|E)+|-Digits,以字母 e 或 E 开始,指数部分的表示形式,科学示数方式,2浮点型,+|-Digits.Digits Exponent F|f|L|l,(e|E)+|-Digits,可选符号,指数部分的表示形式,科学示数方式,2浮点型,+|-Digits.Digits Expone

15、nt F|f|L|l,(e|E)+|-Digits,整数数字串,指数部分的表示形式,科学示数方式,2浮点型,+|-Digits.Digits Exponent F|f|L|l,(e|E)+|-Digits,例如:1.23E10 0.23E-4 45.e+23-23.68E121.23E10F 0.23E-4f 45.e+23L-23.68E12L,指数部分的表示形式,科学示数方式,2浮点型,+|-Digits.Digits Exponent F|f|L|l,(e|E)+|-Digits,例如:1.23E10 0.23E-4 45.e+23-23.68E121.23E10F 0.23E-4f 4

16、5.e+23L-23.68E12L,指数部分的表示形式,科学示数方式,2浮点型,1.231010,+|-Digits.Digits Exponent F|f|L|l,(e|E)+|-Digits,例如:1.23E10 0.23E-4 45.e+23-23.68E121.23E10F 0.23E-4f 45.e+23L-23.68E12L,指数部分的表示形式,科学示数方式,2浮点型,0.2310-4,+|-Digits.Digits Exponent F|f|L|l,(e|E)+|-Digits,例如:1.23E10 0.23E-4 45.e+23-23.68E121.23E10F 0.23E-

17、4f 45.e+23L-23.68E12L,指数部分的表示形式,科学示数方式,2浮点型,0.2310-4(单精度),+|-Digits.Digits Exponent F|f|L|l,(e|E)+|-Digits,例如:1.23E10 0.23E-4 45.e+23-23.68E121.23E10F 0.23E-4f 45.e+23L-23.68E12L,指数部分的表示形式,科学示数方式,2浮点型,45.01023(双精度),char 字符一般用 ASCII 编码 C+的字符型与整型数据密切相关,以ASCII 值参与运算,3字符型,表示方式,character,字符,八进制或十六进制值的转义符

18、,字符,或八进制、十六进制值的转义符,char 字符一般用 ASCII 编码 C+的字符型与整型数据密切相关,以ASCII 值参与运算,3字符型,表示方式,character,例如:A 4,字符,八进制或十六进制值的转义符,char 字符一般用 ASCII 编码 C+的字符型与整型数据密切相关,以ASCII 值参与运算,3字符型,表示方式,character,例如:A 4,空格符,字符,八进制或十六进制值的转义符,char 字符一般用 ASCII 编码 C+的字符型与整型数据密切相关,以ASCII 值参与运算,3字符型,表示方式,例如:A 4,空字符,character,字符,八进制或十六进制

19、值的转义符,char 字符一般用 ASCII 编码 C+的字符型与整型数据密切相关,以ASCII 值参与运算,3字符型,表示方式,转义字符 escape_character 以“”为前缀,表示改变后面escape_character符号或整数值的意义,使其成为控制符或字符值。ddd ddd为八进制,xhh hh为十六进制,character,字符,八进制或十六进制值的转义符,3字符型,C+常用转义字符,1.3 C+的基本数据类型与存储形式,3字符型,#include void main()cout 0 x07operationt systemn;cout 101 t A 012;,例1 转义字

20、符示例,1.3.3 基本类型,3字符型,#include void main()cout 0 x07operationt systemn;cout 101 t A 012;,例 转义字符示例,响铃,等价于 a,ch2_0.cpp,3字符型,#include void main()cout 0 x07operationt systemn;cout 101 t A 012;,例 转义字符示例,3字符型,#include void main()cout 0 x07operationt systemn;cout 101 t A 012;,例 转义字符示例,3字符型,#include void main

21、()cout 0 x07operationt systemn;cout 101 t A 012;,例 转义字符示例,字符A的ASCII码,与A等价,3字符型,例2.1#include void main()int i,j;i=A;j=B;cout i j n;,字符数据在内存中的存储形式和使用方法:字符常量存放到内存单元时,是将该字符相应的ASCII代码放到存储单元中。C+中字符型数据可以和整型数据之间可以通用。,例2.2#include void main()char c1,c2;c1=a;c2=b;c1=c1-32;c2=c2-32;cout c1 c2 n;,注意:字符数据只占一个字节,

22、它只能存放0255范围内的整数,4字符串常量,用双撇号括起来的是字符串常量,如”abc”“a+b”编译系统会在字符串最后自动加一个0作为结束标志。0占用一个字节的存储空间,但它不是字符串的一部分,只是一个标志。,问题:1.a 和”a”有何不同?2.“abcn”和“abcn”各有几个字符,各占几个字节?,2.3 常量与变量,程序中,所有数据以常量形式出现或存放在变量中.常量,是程序运行中保持不变的数据量变量,是程序中可访问的内存单元.,2.3.1 常量,C+常量有两种表示形式:直接常量和标识常量,1直接常量,直接常量由数据的书写形式定义它的类型和值 基本类型的直接常量在程序运行时直接参与运算,不

23、占用内存存储,例如:500 3.14159 0.263e-10 N,2.3.1 常量,C+常量有两种表示形式:直接常量和标识常量,1直接常量,例如:500 3.14159 0.263e-10 N,整型常量,直接常量由数据的书写形式定义它的类型和值 基本类型的直接常量在程序运行时直接参与运算,不占用内存存储,2.3.1 常量,C+常量有两种表示形式:直接常量和标识常量,1直接常量,例如:500 3.14159 0.263e-10 N,直接常量由数据的书写形式定义它的类型和值 基本类型的直接常量在程序运行时直接参与运算,不占用内存存储,2.3.1 常量,C+常量有两种表示形式:直接常量和标识常量,

24、1直接常量,例如:500 3.14159 0.263e-10 N,字符常量,直接常量由数据的书写形式定义它的类型和值 基本类型的直接常量在程序运行时直接参与运算,不占用内存存储,2符号常量,符号常量对常数加以命名;常量名是存储常量值的内存单元的名字;程序中以只读形式访问符号常量.,2符号常量,定义形式:#define 常量标识符 常量值,直接常量或简单表达式,如#define YES 1,符号常量虽然有名字,但不是变量,不能被“=”赋值。符号常量在编译时只作字符串式的简单替换。,2.3.2 变量,变量是存储单元 变量定义:申请指定类型的存储空间,并以指定标识符命名,变量定义形式:类型 标识符,

25、标识符,标识符;,2.3.2 变量,已定义类型,变量是存储单元 变量定义:申请指定类型的存储空间,并以指定标识符命名,变量定义形式:类型 标识符,标识符,标识符;,2.3.2 变量,标识符表,变量是存储单元 变量定义:申请指定类型的存储空间,并以指定标识符命名,变量定义形式:类型 标识符,标识符,标识符;,2.3.2 变量,变量是存储单元 变量定义:申请指定类型的存储空间,并以指定标识符命名,变量定义形式:类型 标识符,标识符,标识符;,例如:int x;int wordCut,Radius,Height;double FlightTime,Mileage,Speed;,2.3.2 变量,变量

26、是存储单元 变量定义:申请指定类型的存储空间,并以指定标识符命名,变量定义形式:类型 标识符,标识符,标识符;,变量定义同时可以赋初始值,类型 标识符=常量,标识符=常量,标识符=常量;,2.3.2 变量,变量是存储单元 变量定义:申请指定类型的存储空间,并以指定标识符命名,变量定义形式:类型 标识符,标识符,标识符;,变量定义同时可以赋初始值,直接常量或标识常量,类型 标识符=常量,标识符=常量,标识符=常量;,2.3.2 变量,变量是存储单元 变量定义:申请指定类型的存储空间,并以指定标识符命名,变量定义形式:类型 标识符,标识符,标识符;,变量定义同时可以赋初始值,类型 标识符=常量,标

27、识符=常量,标识符=常量;,例如:int sum=0;double TaxRate=0.06;char c=A;如果不对变量赋值,那它的值是多少?,常变量:变量的值在程序运行期间不能变化.,定义形式:const 类型 标识符=常量值;,直接常量或简单表达式,例如,以下是正确的常变量定义:const float pi=3.14159;const int min=50;const int max=2*min;,2.3.2 变量,2.4 C+的运算符,运算符是以简洁的方式表达对数据操作的符号,运算符的优先级和结合性,单目运算符,运算符 右操作数,例如:-123+500,双目运算符,左操作数 运算符

28、右操作数,例如:a*3xy,三目运算符,条件运算:操作数1?操作数2:操作数3,例如:a?b:c,2.5 表达式,运算符是以简洁的方式表达对数据操作的符号,表达式是由数据和运算符,按求值规则,表达一个值的式子。,2.5 表达式,运算符是以简洁的方式表达对数据操作的符号,算术表达式关系表达式逻辑表达式赋值表达式条件表达式逗号表达式,用二元组表示表达式的类型和值:,例如30;20.06;a;int Xcoord=23;Xcoord;,2.5.1 赋值表达式,赋值表达式的作用是把数据值写入变量,修改对象的值,一般形式为:变量=表达式 例 int x=10,y=20;x=y;y=x;cout x ye

29、ndl;输出的结果是:,赋值表达式的作用是把数据值写入变量,修改对象的值,一般形式为:变量=表达式,赋值运算符,例如int Score1=90;int Score2=75;int Temp=Score2;Score2=Score1;Score1=Temp;,2.5.1 赋值表达式,赋值表达式的作用是把数据值写入变量,修改对象的值,一般形式为:变量=表达式,例如int Score1=90;int Score2=75;int Temp=Score2;Score2=Score1;Score1=Temp;,2.5.1 赋值表达式,赋值表达式的作用是把数据值写入变量,修改对象的值,一般形式为:变量=表达

30、式,例如int Score1=90;int Score2=75;int Temp=Score2;Score2=Score1;Score1=Temp;,90,75,Score1,Score2,Temp,75,2.5.1 赋值表达式,赋值表达式的作用是把数据值写入变量,修改对象的值,一般形式为:变量=表达式,例如int Score1=90;int Score2=75;int Temp=Score2;Score2=Score1;Score1=Temp;,90,75,Score1,Score2,Temp,75,90,2.5.1 赋值表达式,赋值表达式的作用是把数据值写入变量,修改对象的值,一般形式为:

31、变量=表达式,例如int Score1=90;int Score2=75;int Temp=Score2;Score2=Score1;Score1=Temp;,90,90,Score1,Score2,Temp,75,75,2.5.1 赋值表达式,赋值运算的强制类型转换,例如int x=0;x=2.3;cout x=x;,x=2,2.5.1 赋值表达式,赋值运算的优先级和关联性,赋值运算的优先级很低 赋值运算的右结合 赋值表达式为左值表达式,允许关联赋值,例如x=y=z+2;x=y=(z+2);x=(y=z+2);(x=y)=z+2;z+2=x=y;,2.5.1 赋值表达式,赋值运算的优先级和关

32、联性,赋值运算的优先级很低 赋值运算的右结合 赋值表达式称为左值表达式,允许关联赋值,例如x=y=z+2;x=y=(z+2);x=(y=z+2);(x=y)=z+2;z+2=x=y;,(1)计值,2.5.1 赋值表达式,赋值运算的优先级和关联性,赋值运算的优先级很低 赋值运算的右结合 赋值表达式称为左值表达式,允许关联赋值,例如x=y=z+2;x=y=(z+2);x=(y=z+2);(x=y)=z+2;z+2=x=y;,(2)把 z+2 的值写入 y,2.5.1 赋值表达式,赋值运算的优先级和关联性,赋值运算的优先级很低 赋值运算的右结合 赋值表达式称为左值表达式,允许关联赋值,例如x=y=z

33、+2;x=y=(z+2);x=(y=z+2);(x=y)=z+2;z+2=x=y;,(3)把 y 的值写入 x,2.5.1 赋值表达式,赋值运算的优先级和关联性,赋值运算的优先级很低 赋值运算的右结合 赋值表达式称为左值表达式,允许关联赋值,例如x=y=z+2;x=y=(z+2);x=(y=z+2);(x=y)=z+2;z+2=x=y;,与第一行等价,2.5.1 赋值表达式,赋值运算的优先级和关联性,赋值运算的优先级很低 赋值运算的右结合 赋值表达式称为左值表达式,允许关联赋值,例如x=y=z+2;x=y=(z+2);x=(y=z+2);(x=y)=z+2;z+2=x=y;,与第一行等价,2.

34、5.1 赋值表达式,赋值运算的优先级和关联性,赋值运算的优先级很低 赋值运算的右结合 赋值表达式称为左值表达式,允许关联赋值,例如x=y=z+2;x=y=(z+2);x=(y=z+2);(x=y)=z+2;z+2=x=y;,(1)把 y 的值写入 x,2.5.1 赋值表达式,赋值运算的优先级和关联性,赋值运算的优先级很低 赋值运算的右结合 赋值表达式称为左值表达式,允许关联赋值,例如x=y=z+2;x=y=(z+2);x=(y=z+2);(x=y)=z+2;z+2=x=y;,(2)求值,2.5.1 赋值表达式,赋值运算的优先级和关联性,赋值运算的优先级很低 赋值运算的右结合 赋值表达式称为左值

35、表达式,允许关联赋值,例如x=y=z+2;x=y=(z+2);x=(y=z+2);(x=y)=z+2;z+2=x=y;,(3)把 z+2 的值写入 x,2.5.1 赋值表达式,赋值运算的优先级和关联性,赋值运算的优先级很低 赋值运算的右结合 赋值表达式称为左值表达式,允许关联赋值,例如x=y=z+2;x=y=(z+2);x=(y=z+2);(x=y)=z+2;z+2=x=y;,注意对变量 x 作了两次写操作,2.5.1 赋值表达式,赋值运算的优先级和关联性,赋值运算的优先级很低 赋值运算的右结合 赋值表达式称为左值表达式,允许关联赋值,例如x=y=z+2;x=y=(z+2);x=(y=z+2)

36、;(x=y)=z+2;z+2=x=y;,注意第一次赋值操作没有意义,2.5.1 赋值表达式,赋值运算的优先级和关联性,赋值运算的优先级很低 赋值运算的右结合 赋值表达式称为左值表达式,允许关联赋值,例如x=y=z+2;x=y=(z+2);x=(y=z+2);(x=y)=z+2;z+2=x=y;,错误向哪一个对象赋值?,2.5.1 赋值表达式,赋值运算的优先级和关联性,赋值运算的优先级很低 赋值运算的右结合 赋值表达式称为左值表达式,允许关联赋值,例如x=y=z+2;x=y=(z+2);x=(y=z+2);(x=y)=z+2;z+2=x=y;,它是一个右值表达式只能放在赋值号右边,2.5.1 赋

37、值表达式,2.5.2 算术表达式,算术表达式由算术运算符和操作数组成,结果值是算术值,基本算术运算符有:,当双目运算符的两个操作数都是整型,结果值为整型,当双目运算符的两个操作数都是整型,结果值为整型,简单截取整数部分,当双目运算符的两个操作数都是整型,结果值为整型,由编译器选择,当双目运算符的两个操作数都是整型,结果值为整型,除数为 0,溢出,无值定义,当双目运算符的两个操作数都是整型,结果值为整型,求模(求余数),当双目运算符的两个操作数都是整型,结果值为整型,除数为0,无值定义,当双目运算符的两个操作数都是整型,结果值为整型,操作数可以是常量,变量,类型,除求余%运算外,浮点数可以进行各

38、种算术运算,当双目运算符的两个操作数都是整型,结果值为整型,2.5.3 类型转换 表达式求值之前,要对操作数进行必要的类型转换:P33 图2.7,目的:(1)将短数扩展为机器处理的长度(2)使运算符两端的操作数具有相同的类型 原则:(1)开始运算前,扩展数据长度:char、short int unsigned char、unsigned short unsigned int float double long unsigned long 参与算术运算的只有5种类型数据(2)算符两端运算量类型不同时:“向高看齐”,向表达能力强的类型转换 逐个算符转换(3)赋值转换具有强制性,例如float Te

39、mp=23.3;double Volume=3.2;long double ldConstant=6.23E23;cout Volume*ldConstant;cout Temp/Volume;,2.5.3 类型转换,例如float Temp=23.3;double Volume=3.2;long double ldConstant=6.23E23;cout Volume*ldConstant;cout Temp/Volume;,2.5.3 类型转换,double long double,例如float Temp=23.3;double Volume=3.2;long double ldCon

40、stant=6.23E23;cout Volume*ldConstant;cout Temp/Volume;,2.5.3 类型转换,float double,2.5.3 类型转换,强制类型转换,用类型符对表达式值转换成所需类型,一般形式为:(类型)(表达式)或(类型)表达式,例如:(int)(x+y)/把x+y的结果转换成整型(char)70/把整数70转换成字符 F(float)(2/4)/结果为 0,想一想,为什么?,2.5.3 类型转换,强制类型转换,用类型符对表达式值转换成所需类型,一般形式为:(类型)(表达式)或 类型(表达式),赋值时的类型转换和用类型符实现的类型转换是强制性例如:

41、int a=2.516;/a 的值为2P36-37 例2.4 例2.5,2.5.4 自增和自减,程序设计中,常对变量进行如下操作:i=i+1 i=i-1此时,变量 i 称为计数器,1,2.5.4 自增和自减,程序设计中,常对变量进行如下操作:i=i+1 i=i-1此时,变量 i 称为计数器,C+为其提供自增和自减算符,2.5.4 自增和自减,注:自增、自减算符的运算对象只能是整型变量,不能为常量或表达式;错误:例:5+(a+)+a+(x+y)-,2.5.4 自增和自减,注:自增、自减算符的运算对象只能是整型变量,不能为常量或表达式;例:5+(a+)(x+y)-错误,不是整型变量,2.5.4 自

42、增和自减,注:自增、自减算符的运算对象只能是整型变量,不能为常量或表达式;例:5+(a+)(x+y)-错误,+、-算符均为右结合,后缀式为书写特例;自增式和自减式作为独立的表达式,前缀式和后缀式没有区别;作为表达式右值时:(1)前缀式 先增值后引用例:x=+i 相当于i=i+1;x=i;(2)后缀式 先引用后增值例:x=i+相当于 x=i;i=i+1;,2.5.4 自增和自减,例:int a=3;int b=+a;/相当于 a=a+1;b=a;int c=a+;/相当于 c=a;a=a+1;b=a-;/相当于 b=a;a=a-1;c=-a;/相当于 a=a-1;c=a;+(a+);/错(a+)

43、不是变量名c=a+b;/错 a+无法对 b 操作c=a+b;/相当于 c=a+b;a=a+1;c=a+b;/(a+)+b 错注意:编译扫描器优先向左识别算符 自增、自减的副作用(歧义带来的不确定性)P34,2.5.5 关系表达式P58,关系运算是指对两个运算量的大小进行比较;关系表达式的值只有两个:表达式 成立 为 true(1,非0)表达式 不成立 为 false(0),关系运算符:大于=大于等于 小于=小于等于=等于!=不等于优先级:低于算术运算类,高于赋值类结合性:从左向右结合,例:若有int x=2,y=3,z;则 x=y x!=y,值为 0,值为 1,z 的值为 1,z=2=3=5,

44、z=0=5,z=1,z=3-1=x+1=y+2,2.5.5 关系表达式,(1)设 a=0,b=0.5,x=0.3 表达式 a=x=b 的结果为:,0,1,注意:说明数学含义 x在区间a,b 的数学表达式 a x b 不能使用 a=x=b 表示 应该使用 a=x&x=b 表示,注意关系运算的正确使用:,2.5.5 关系表达式,注意关系运算的正确使用:,(2)表达式 5 2 7 8 的结果为:,0,1,讨论:5 2 7 8 是一个无意义的数学式子,但在C+中是合法表达式 应尽量避免使用这种意义不清的表达式,0,2.5.5 关系表达式,注意关系运算的正确使用:,(3)关系表达式的结果为整数,所以也可

45、以看作整型表达式。例:int i=1,j=7,a;a=i+(j%4!=0);,讨论:应尽量避免使用这种意义不清的表达式,3,1,2,2.5.5 关系表达式,注意关系运算的正确使用:,(4)字符数据按ASC码值进行比较例:a 0值为 1(true)A 100 值为 0(false),2.5.5 关系表达式,注意关系运算的正确使用:,(5)实数比较的误差 例:1.2345678901234567897=1.2345678901234567898 值为 1(true)这是数据有效位数引起的误差。,讨论:实数比较宜采用求误差值形式:fabs(x-y)例如:fabs(x-y)1e-5,2.5.5 关系表

46、达式,2.5.5 关系表达式,&逻辑与左结合|逻辑或左结合!逻辑非右结合,逻辑运算符:,逻辑与,2.5.6 逻辑表达式,逻辑与,2.5.6 逻辑表达式,逻辑与,2.5.6 逻辑表达式,逻辑或,逻辑与,2.5.6 逻辑表达式,逻辑或,逻辑与,2.5.6 逻辑表达式,逻辑或,逻辑与,2.5.6 逻辑表达式,逻辑与,逻辑或,2.5.6 逻辑表达式,逻辑与,逻辑或,2.5.6 逻辑表达式,逻辑与,逻辑或,逻辑非,2.5.6 逻辑表达式,逻辑与,逻辑或,逻辑非,2.5.6 逻辑表达式,逻辑与,逻辑或,逻辑非,2.5.6 逻辑表达式,逻辑与,逻辑或,逻辑非,2.5.6 逻辑表达式,逻辑运算符和关系运算符经

47、常一起使用构造条件。相互之间的优先级由高到低如下:!算术运算符关系运算符&|赋值运算符,2.5.6 逻辑表达式,低,高,-2 1,例:写出描述点 A(x,y)落在图中绿色部分(不压线)的 C+表达式:,2.5.6 逻辑表达式,逻辑运算规律:,E1&E2当表达式 E1 的值为 0 时,不再对 E2 求值E1|E2当表达式 E1 值为非 0 时,不再对 E2 求值,例:,x=y=0;x+,2.5.6 逻辑表达式,逻辑运算规律:,E1&E2当表达式 E1 的值为 0 时,不再对 E2 求值E1|E2当表达式 E1 值为非 0 时,不再对 E2 求值,例:,x=y=0;x+,x+,&,x+&,y+;,

48、结果:逻辑表达式值为0,x 的值为 2,y 的值为 1,2.5.6 逻辑表达式,结果:逻辑表达式值为0,结果:逻辑表达式值为1,逻辑运算规律:,E1&E2当表达式 E1 的值为 0 时,不再对 E2 求值E1|E2当表达式 E1 值为非 0 时,不再对 E2 求值,例:,x=y=0;x+,x=y=1;x-|y-;,结果:逻辑表达式值为0,2.5.6 逻辑表达式,复合赋值运算,双目算符 op 的表达式:A=A op B 可以缩写成:A op=B,+=-=*=/=%=&=|=,C+提供的10个复合赋值运算符:,用于位运算,2.5.7 复合赋值表达式,复合赋值运算,双目算符 op 的表达式:A=A

49、op B 可以缩写成:A op=B,c=c-k,c-=k,x=x*(y+8),x*=y+8,x=x+3,x+=3,x=x%3,x%=3,例:,2.5.7 复合赋值表达式,2.5.8 条件表达式,条件运算表达式格式:,E1?E2:E3其中?:称为条件运算符,是C+中唯一的三目运算符;E1、E2、E3 为表达式。功能 根据 E1 的值,决定计算 E2 或 E3。若 E1 的值为true(非0),条件表达式的值为 E2 的值;若 E1 的值为false(0),条件表达式的值为 E3 的值。,示例,/例:计算 a+|b|的值#include void main()float a,b;cout a b;

50、cout=0?a+b:a-b)endl;,注意 添加括号条件运算级别低于插入,2.5.8 条件表达式,示例,计算 a、b之中的大值:max=a b?a:b 求 a 的符号:sig=a 0?1:(a=A&ch=Z)?(ch+32):ch,2.5.8 条件表达式,2.5.9 逗号表达式,逗号表达式格式:,E1,E2,E3,En 其中,称为逗号运算符,运算级别最低;E1、E2、E3、En 为表达式。功能 顺序执行 E1、E2、E3 En,最后获得逗号表达式的值。注意,也用于分隔符,如:int func(int a,int b,double x);,注意:变量的值和表达式的值,(1)a=3*5,a*4

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号