C课件第2章基本数据类型与表达式.ppt

上传人:本田雅阁 文档编号:3480003 上传时间:2019-09-01 格式:PPT 页数:46 大小:134.02KB
返回 下载 相关 举报
C课件第2章基本数据类型与表达式.ppt_第1页
第1页 / 共46页
C课件第2章基本数据类型与表达式.ppt_第2页
第2页 / 共46页
C课件第2章基本数据类型与表达式.ppt_第3页
第3页 / 共46页
C课件第2章基本数据类型与表达式.ppt_第4页
第4页 / 共46页
C课件第2章基本数据类型与表达式.ppt_第5页
第5页 / 共46页
点击查看更多>>
资源描述

《C课件第2章基本数据类型与表达式.ppt》由会员分享,可在线阅读,更多相关《C课件第2章基本数据类型与表达式.ppt(46页珍藏版)》请在三一文库上搜索。

1、第2章 基本数据类型与表达式,2006-04-01,C+程序设计,第2章 基本数据类型与表达式,2.1 C+数据类型概述 2.2 C+的基本数据类型 2.3 常量与变量 2.4 运算符与表达式 2.5 数值运算符与数值表达式 2.6 赋值运算 2.7 关系与逻辑运算 2.8 条件运算符与逗号表达式 2.9 sizeof运算符 2.10 表达式的副作用和表达式语句,2006-04-01,C+程序设计,2.1 c+数据类型概述,1.基本数据类型,基本数 据类型,整型 int,字符型,实型,逻辑型,单字符型 char,宽字符型 wchar_t,单精度型 float,双精度型 double,bool,

2、2006-04-01,C+程序设计,2.数据类型修饰符 signed:有符号 unsigned:无符号 short:短型 long:长型 说明: 1) 类型修饰符可以修饰除void、bool类型以外的其他类型; 2) 上述修饰符均可用于整型和字符型; 3) long修饰符还适用于双精度浮点数;,2006-04-01,C+程序设计,2.2 C+的基本数据类型,2006-04-01,C+程序设计,说明: (1)表中的int可以省略,既在int之前有修饰符出现时,可以省略关键字int; (2) 单精度类型float、双精度类型double、长精度类型long double统称浮点类型; (3) ch

3、ar型和各种int类型统称整型类型;char型变量在内存中以字符的ASCII码值的形式存储; (4) 字宽(字节)取决于操作系统和编译器的实现,可用sizeof验证;,2006-04-01,C+程序设计,/ ch2_1.cpp 测试计算机中数据类型的字节长度 #include void main() cout“char类型的长度是“sizeof(char)endl; cout“宽char类型的长度是“sizeof(wchar_t)endl; cout“int类型的长度是“sizeof(int)endl; cout“long类型的长度是“sizeof(long)endl; cout“float类

4、型的长度是“sizeof(float)endl; cout“double类型的长度是“sizeof(double)endl; cout“long double类型的长度是“sizeof(long double); coutendl; ,2006-04-01,C+程序设计,2.3 常量与变量,2.3.1 变量 变量是指程序在运行时其值可改变的量。每个变量由一个变量名惟一标识,同时,每个变量又具有一个特定的数据类型。不同类型的变量在内存中占有存储单元的个数不同。,2006-04-01,C+程序设计,变量定义,1.命名变量名 每个变量都必须有一个名字变量名,变量命名遵循标识符命名规则。 2.标识符命

5、名规则 (1)有效字符:只能由字母、数字和下划线组成,且以字母或下划线开头。( _Num1 , 8NUM, NUM8) (2)有效长度:随系统而异,但至少前个字符有效。如果超长,则超长部分被舍弃。 例如,由于student_name和student_number的前个字符相同,有的系统认为这两个变量,是一回事而不加区别。,2006-04-01,C+程序设计,(3)C+的关键字不能用作变量名。 注意:C+对英文字母的大小敏感,即同一字母的大小写,被认为是两个不同的字符。习惯上,变量名和函数名中的英文字母用小写,以增加可读性。 标识符命名的良好习惯见名知意,即通过变量名就知道变量值的含义。通常应选

6、择能表示数据含义的英文单词(或缩写)作变量名,或汉语拼音字头作变量名。 例如,name/xm(姓名)、sex/xb(性别)、age/nl(年龄)、salary/gz(工资)。 (4)命名风格:my_car,myCar,iMyCar,dMyCar,2006-04-01,C+程序设计,3.变量定义方式: ; 例如:int a,b,c; double x,y,z; 4.变量赋值与初始化 数据类型 标识符1(初始值1), ,标识符n(初始值n); 数据类型 标识符1=初始值1, ,标识符n=初始值n; 例如:double price=15.5; int size=100; 5.typedf 用type

7、def可以为一个已有的类型名提供一个同义词 例如:typedef double profit; typedef int INT,integer; INT a; profit d;,2006-04-01,C+程序设计,2.3.2 常量,1.整型常量 10进制表示例:132, -345 8进制表示例:010, -0536 16进制表示例:0x7A, -0X3de 2.实型常量 (1)定点数形式 。它由数字和小数点组成。如:0.123,.234,0.0等。 (2)指数形式。如,123e5或123E5都表示123105。要注意E或e的前面必须要有数字,且E后面的指数必须为整数。,2006-04-01,

8、C+程序设计,3.字符常量 (1)由一对单引号括起的一个字符表示; (2)其值为所括起字符在ASCII表中的编码; (3)转义序列表示方法:以反斜线()开头,后跟字符的ASCII码值;,2006-04-01,C+程序设计,C+中常用转义序列符,2006-04-01,C+程序设计,.字符串常量 一对双引号括起的字符序列,字符序列可以包含空格、转义序列或任何其他字符,这些字符不一定是C+字符集中的字符,只要C+编译器支持即可. 例如:“This is a string;” “How do you do?” “I am a student.”,2006-04-01,C+程序设计,串常量与字符常量的区

9、别:,2006-04-01,C+程序设计,5.布尔常量 布尔常量仅有两个: false(假)和true(真) 或:1 (真) 0 (假),2006-04-01,C+程序设计,6.枚举常量 枚举声明: enum ; 由若干个枚举符组成,多个枚举符之间用逗号分隔; 枚举符是用标识符表示的整型常量,又称枚举常量; 枚举常量的值默认为最前边的一个为0,其后的值依次加1; 枚举常量的值也可显式定义,未显式定义的则在前一个值的基础上加1; 例如:enum day Sun,Mon,Tue,Wed,Thu,Fri,Sat; enum day Sun=7,Mon=1, Tue,Wed,Tur,Fri,Sat;,

10、2006-04-01,C+程序设计,2.3.3 常量定义,定义方法:使用类型说明符const; 例如:const int size=80; 定义的符号常量必须初始化; 一个符号常量可看作是一个只读变量,由const定义的常量的值不可以改变;,2006-04-01,C+程序设计,2.3.4 宏定义的使用,例: define pi 3.14,说明: define 在c+中不常用,已经被const所取代,2006-04-01,C+程序设计,2.4 运算符与表达式,在程序中,表达式是计算求值的基本单位,它是由运算符和运算数组成的式子。运算符是表示进行某种运算的符号。运算数包含常量、变量和函数等。 C+

11、语言的运算符按其在表达式中与运算对象的关系(连接运算对象的个数)可分为: 单目运算(一元运算符,只需一个操作数) 双目运算(二元运算符,需两个操作数) 三目运算(三元运算符,需三个操作数),2006-04-01,C+程序设计,按其在表达式中所起的作用又可分为: 算术运算符 + - * / % 关系运算符 = = != 逻辑运算符 ! & | 位运算符 | & 自增自减运算符 + - 赋值运算符 = 及其扩展(+= -= *= /= %= 等) 条件运算符 ? : 指针运算符 * 和 & 逗号运算符 , 分量运算符 * - 函数调用运算符() 下标运算符 求字节运算符 sizeof 强制类型转换

12、运算符:(type),2006-04-01,C+程序设计,2.左值和右值 左值(left value,缩写为lvalue)是能出现在赋值表达式左边的表达式。左值表达式具有存放数据的空间,而且存放是允许的。例如: int a=3; /a是变量,所以a是左值 const int b=4; /b是常量,所以b不是左值 显然常量不是左值,因为c+规定常量的值一旦确定就不能更改。,2006-04-01,C+程序设计,右值(right value,缩写为rvalue)只能出现在赋值表达式的右边。左值表达式也可以作为右值表达式。例如: int a,b=6; a=b;/ b是变量,所以是左值,此处作为右值。

13、a=8;/ 8是常量,只能作右值,不能作为左值。 表达式可产生左值、右值或不产生值。例如: int a; (a=4)=28; /a=4是左值表达式,可以被赋以值28。 /* 28是右值表达式,而a=4是左值表达式(C+的语法规定),所以可以放在赋值语句的左边。该语句表示a的值使用28代替刚刚赋给的值4。*/,2006-04-01,C+程序设计,2.5 数值运算符与数值表达式,+(加法运算符,或正值运算符,如1+2,+3) - (减法运算符,或负值运算符,如1-2,-3) *(乘法运算符,如1*2) / (除法运算符,如1/2) 两整数相除,结果取整。 如:5/2结果为2;1/2为0 浮点数参与

14、除法运算,结果是浮点数。 如:5.0/2.0结果为2.5; 1.0/2.0为 0.5 %(模运算符或称求余运算符,如7%3=1) 只能对整数进行操作。,2006-04-01,C+程序设计,算术类型转换,数据类型转换 C+中数据类型转换有两类,即隐式类型转换和显式类型转换。 1. 隐式类型转换 隐式类型转换是由编译器自动完成的类型转换。当编译器遇到不同类型的数据参与同一运算时,会自动将它们转换为相同类型后再进行运算,赋值时会把所赋值的类型转换为与被赋值变量类型一样。隐式类型转换按从低到高的顺序进行,如图2-1所示。,2006-04-01,C+程序设计,2006-04-01,C+程序设计,2. 显

15、式类型转换 显式类型转换是由程序员显式指出的类型转换,转换形式有两种: 类型名(表达式) (类型名)表达式 这里的“类型名”是任何合法的C+数据类型,例如float、int等。通过类型的显式转换可以将“表达式”转换成适当的类型。 例如: double f=3.6; int n=(int)f; 这样n为3。,2006-04-01,C+程序设计,2.6 赋值运算,2.6.1 赋值运算符 (1)赋值运算符“=”的一般格式为: 变量=表达式; 表示将其右侧的表达式求出结果,赋给其左侧的变量。 例如: int i; i=3*(4+5); /i的值变为27 (2)赋值表达式本身的运算结果是右侧表达式的值,

16、而结果类型是左侧变量的数据类型。 例如: int i=1.2*3; /结果为3,而不是3.6,2006-04-01,C+程序设计,(3)赋值运算符的结合性是从右至左的,因此,C+程序中可以出现连续赋值的情况。例如,下面的赋值是合法的: int i,j,k; i=j=k=10; /i,j,k都赋值为10 (4)复合赋值运算符: +=(加赋值), -=(减赋值), *=(乘赋值), /=(除赋值), %=(取模赋值), =(右移赋值), &=(与赋值), =(异或赋值), |=(或赋值),2006-04-01,C+程序设计,它们的含义如下: a+=b 等价于 a=a+b a-=b 等价于 a=a-

17、b a*=b 等价于 a=a*b a/=b 等价于 a=a/b a%=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=144 a=a-a /a=144-144=0 a=a+a /a=0+0=0,2006-04-01,C+程序设计,2.6.2 溢出,进行算术运算和赋值运算时,很可能溢出结果。 发生溢出的原因: 是由于一个变量被赋予一个超出其数值类型表示范围的数值。 数值溢出不会引起编译错误,但会使运行结果发生偏差 例如:在16位机器上进行如下操作:

18、 int weight=42896; 变量weight将得不到42896,而是得到-22640。因为有符号整数的表示范围是-3276832767。所以它只能得到42896的补码-22640 (42896-65536),2006-04-01,C+程序设计,思考如下的问题: 在16位机器中,做如下操作: int x=142896; 变量x将会得到什么数?,如果x是2个字节的整数,得到的值为:11824 因为:142896=265536+11824,2006-04-01,C+程序设计,2.6.3 自增、自减运算符,(1)自增(+)、自减(-)运算符为变量的增1和减1提供了紧凑格式。 (2)自增、自减

19、运算符都是单目运算符,其作用是使变量的值增1或减1。 (3)自增、自减运算符有四种应用格式: b=a+; 等价于 b=a;a=a+1; b=a-; 等价于 b=a;a=a-1; (运算符后置用法,代表先使用变量,然后对变量增值) b=+a; 等价于 a=a+1;b=a; b=-a; 等价于 a=a-1;b=a; (运算符前置用法,代表先对变量增值,再使用变量),2006-04-01,C+程序设计,2.7 关系与逻辑运算符,2.7.1 关系运算符 1.关系运算符用于两个值进行比较, 运算结果为true(1)或false(0)。 C+中的关系运算符如下: (大于), =(大于等于),=(等于),

20、!=(不等于), 2.关系运算符都是双目运算符,其结合性是从左到右,、=运算符的优先级相同,=和!=运算符的优先级相同,前者运算的优先级高于后者。 3.关系运算符的优先级低于算术运算符。 例如: a+bc 等价于 (a+b)c a!=bc 等价于 a!=(bc),2006-04-01,C+程序设计,2.7.2 逻辑运算符,&(逻辑与), |(逻辑或),!(逻辑非) 逻辑表达式的结果为真则为1,结果为假则为0。 逻辑非(!)是单目运算符,逻辑与(&)与逻辑或(|)为双目运算符。 逻辑非的优先级最高,逻辑与次之,逻辑或最低。 逻辑运算真值表如表2-3所示。,2006-04-01,C+程序设计,表2

21、-3 逻辑运算真值(真为非0,假为0),2006-04-01,C+程序设计,如果多个表达使用 输出结果为: m=6 由于n4的比较值为0,所以整个表达式的值不用看后面就知道为0。因此,后面的表达式不被执行。这样,m的值是6而不是7。,2.7.3 短路表达式,2006-04-01,C+程序设计,同理,如果多个表达式用 | 连接,则第一个表达式为真,整个连接都为真。 例如:t=10; If ( t80 ) cout“*:endl;,2006-04-01,C+程序设计,2.8 条件运算符与逗号表达式,2.8.1 条件运算符 (1)条件运算符“?:”是C+中惟一三目运算符,其形式为: 表达式1 ?表达

22、式2 :表达式3 它的运算方式为:先计算表达式1的值,如果其值为非0(真),则表达式2的值就是整个表达式的值;否则表达式3的值就是整个表达式的值。例如: max=(ab)?a:b) 上面例子定义了一个求两个数a和b中最大值,其中决定哪一个是最大值用了条件运算符。,2006-04-01,C+程序设计,(2)条件运算符的结合性是自右向左。 例如条件表达式: ab?a:cd?c:d 相当于 ab?a:(cd?c:d) (3)条件运算符的优先级别高于赋值运算符,低于关系运算符和算术运算符。 例如条件表达式: ab?a-b:b-a 相当于 ab?(a-b):(b-a),2006-04-01,C+程序设计

23、,2.8.2 逗号表达式,(1) 逗号表达式的语法为: 表达式1,表达式2,表达式n C+顺序计算表达式1 ,表达式2,表达式n的值。例如: int a,b,c; a=1,b=a+2,c=b+3; 由于按顺序求值,所以能够保证b一定在a赋值之后,c一定在b赋值之后。该逗号表达式可以用下面3个有序的赋值语句来表示: a=1; b=a+2; c=b+3; 逗号表达式是有值的,这一点是语句所不能代替的。,2006-04-01,C+程序设计,(2) 逗号表达式的值为第n个子表达式的值,即表达式n的值。 例如: int a,b,c,d; d=(a=1,b=a+2,c=b+3); coutdendl; 输

24、出结果为: 6 上例中输出的结果d即为c的值。 逗号表达式还可以用于函数调用中的参数。例如: func(n,(j=1,j+4),k); 该函数调用3个参数,中间的参数是一个逗号表达式。 括号是必须的,否则,该函数有4个参数了。 C+中,如果逗号表达式的最后一个表达式为左值, 则该逗号表达式为左值。例如: (a=1,b,c+1,d)=5; /ok:即d=5,2006-04-01,C+程序设计,2.9 sizeof运算符(求字节运算符),(1)sizeof运算符是单目运算符,用于计算运算对象在内存中所占字节的多少,它有两种形式: sizeof (类型标识符); sizeof 表达式; (2)siz

25、eof可以接受的类型标识符很多,如sizeof(int)表示求整型数据在内存中所占字节数。 例如:int a,则sizeof(a)表示求变量a在内存中所占字节数。 例如:int a10,则sizeof(a)表示求数组a在内存中所占字节数。,2006-04-01,C+程序设计,2.10 求值次序与副作用,1.不同的编译器求值顺序不同; 2.求值顺序使交换律失去作用; 加法操作我们都知道a+b=b+a。也就是说,交换律成立。而在C+中,对简单的表达式,交换律是成立的,但对复合表达式,交换律未必成立。例如:当int a=3,b=5,c;时 c=a*b+ +b; 与: c=+b+a*b; 在VC中,运

26、行结果前者为21,后者为24。 3.求值顺序使括号失去作用 在表达式中,括号的优先级是最高的。C+中,简单 的表达式括号优先可以做到,但复合表达式未必如此。例如: int a=3,b=5,c; c=+b*(a+b);,2006-04-01,C+程序设计,实际在VC中得数为54而不是48。这是因为先将括号外面 的表达式求值。 4.消除副作用 在我们举的例子中,+b是引起副作用的主要操作。+b具有变量b的修改(副作用)和它所提供的表达式值两个操作。同样赋值表达式也会引起副作用。例如: int a,b=20; a=(b=25)+b; 解决表达式副作用的方法是分解表达式语句,即将复合 表达式语句写成几个简单的表达式语句。例如,前面有副作用的表达式语句可以分解为下面的两个表达式: c=b+a*b;b+; 或者: b+;c=b+a*b;,

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

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1