第2章 数据类型与表达式【专业教育】.ppt

上传人:rrsccc 文档编号:9970868 上传时间:2021-04-07 格式:PPT 页数:86 大小:2.01MB
返回 下载 相关 举报
第2章 数据类型与表达式【专业教育】.ppt_第1页
第1页 / 共86页
第2章 数据类型与表达式【专业教育】.ppt_第2页
第2页 / 共86页
第2章 数据类型与表达式【专业教育】.ppt_第3页
第3页 / 共86页
第2章 数据类型与表达式【专业教育】.ppt_第4页
第4页 / 共86页
第2章 数据类型与表达式【专业教育】.ppt_第5页
第5页 / 共86页
点击查看更多>>
资源描述

《第2章 数据类型与表达式【专业教育】.ppt》由会员分享,可在线阅读,更多相关《第2章 数据类型与表达式【专业教育】.ppt(86页珍藏版)》请在三一文库上搜索。

1、第2章 数据类型与表达式,1,学习幻灯,本章导读,本章包括知识点: C语言的基本数据类型 数据类型与变量、常量的关系 各种常量的性质和定义 表达式中各种运算符的功能和特点及副作用 数据类型的相互转换规则,2,学习幻灯,2.1数学上的“数”到计算机中的“数”,数学中,数是一门研究抽象的学科,数和数的运算都是抽象的,数据不分类型,其运算是绝对精确的,如果88-8=80,1/6=0.16666(循环小数)。当从纯数学的计算过渡到用计算机来解决问题时,数变成了一个实在的工程问题,在计算机中,数值是具体存在的,它存放在计算机的存储器中。,3,学习幻灯,存储空间是有限的,每一个存储单元存放的数据范围都是有

2、限的,不可能无穷大也不可能无穷小,如前面所说的1/6=0.16666(循环小数)用计算机是表示不出来的,因为存储器的空间大小是有限的,用计算机的计算不是抽象的理论值的计算,而是用工程的方法实现的计算,在许多情况下只能得到近似的结果,用计算机来计算1/6:得到的结果为0.166667,而不是无穷的小数位。,4,学习幻灯,为什么要划分“数据类型”,怎样使计算机合理的表示现实生活中各种类型的数据,也就是说,使计算机能够根据数据的实际表示范围以及数据的表示形式,为数据分配合理的存储空间。计算机存储器的资源是十分宝贵的,如何为存储器做到量体裁衣? 为了解决这个问题,计算机对不同种类的数据用不同的“数据类

3、型”来表示,不同的数据类型有不同的存储空间(所表示的数的范围不相同)和存储形式。“数据类型”是学习程序设计语言时必须首先明确的问题。,5,学习幻灯,2.2 数据类型概述,整型,基本整型int,6,学习幻灯,基本数据类型,int 整数,在目前绝大多数机器上占4个字节。在Visual C+ 6.0中,int型占4个字节 。 float 单精度浮点数,一般是4个字节长 double 双精度浮点数,一般是8个字节长 char 字符,一般是1个字节长 用来表示256个ASCII字符,或者0255的整数,7,学习幻灯,数据类型修饰符,short short int,短整数,一般2个字节长。通常简写为sho

4、rt long long int,长整数,一般是4个字节长。通常简写为long long double,长双精度(高精度)浮点数,一般是10 个字节长。 signed 用来修饰char、int、short和long,说明他们是有符的 整数(正整数、0和负整数)。一般缺省都是有符号的,所 以这个修饰符通常省略 unsigned 用来修饰char、int、short和long,说明他们是无符号 的整数(正整数和0),8,学习幻灯,2.3常量和变量,2.3.1 常量 2.3.2 变量 2.3.3 变量命名规则 2.3.4 变量的定义,9,学习幻灯,2.3.1 常量,常量是指直接用于程序中的、不能被程

5、序修改的、固定不变的量。 C语言中的常量值是用数值或字符串表示的。C语言常量包括整数、浮点数、字符、字符串四种类型。 有时为了使用方便,可用一个符号名来代表一个常量,这称为符号常量。 符号常量一般定义格式如下: #define 标识符 常量数据 例如: #define PI 3.14159 一旦某标识符定义成为一个常量后,以后在程序处理时,凡是碰到了该标识符,都将替换成对应的常量。,10,学习幻灯,2.3.2 变量,变量是指C语言编程中合法的标识符,是用来存取某种类型值的存储单元,其中存储的值可以在程序执行的过程中被改变。,变量必须先定义后使用,11,学习幻灯,定义变量的一般形式为:变量类型说

6、明符 变量列表=初值,变量类型说明符,确定了变量的取值范围以及对变量所能进行的操作规范 变量列表,由一个或多个变量名组成。当要定义多个变量时,各变量之间用逗号分隔。 初值是可选项,变量可以在定义的同时赋初值,也可以先定义,在后续程序中赋初值。,12,学习幻灯,C语言中的变量名除了符合标识符的条件之外,还必须满足下列约定: 变量名不能与关键字相同。 C语言对变量名区分大小写。 变量名应具有一定的含义,以增加程序的可读性。,例: char esc = a; int i = 1; int sum = 0; float eps = 1.0e-5;,13,学习幻灯,2.3.3 变量命名规则,C语言的标识

7、符的命名规则是: 1.由字母或下划线(_)开头,同时由字母、09的数字或下划线(_)组成。 2.不能与关键词同名。 例如:school_id,_age,es10为合法的标识符。 school-id,man*,2year,class为不合法的标识符。,标识符是用来标识对象名字(包括变量、函数、数组、类型等)的有效字符序列。构造一个标识符的名字,需要按照一定的规则。,标识符不宜过短,过短的标识符会导致程序的可读性变差;但也不宜过长,否则将增加录入工作量和出错的可能性。,14,学习幻灯,关键字(32个),关键字在C语言中,有其特殊的含义,不能用作一般的标识符使用,即一般的标识符(变量名、类名、方法名

8、等)不能与其同名。,15,学习幻灯,2.3.4 变量的定义,C语言对变量强制定义的目的是: 因为只有在定义了变量的类型后,系统才知道如何给变量分配存储空间。如指定变量a为整型,在编译时就能为其分配相应的4个字节的存储空间,并按整数方式存储数据。 指定一个变量属于一个特定的类型,在编译时,能根据该类型进行运算是否合法性的检查。,16,学习幻灯,变量的具体定义形式,int a,b,c; /表示定义了a,b,c三个整型变量,其初值是不确定的; int a=4,b=5,c=6; /表示定义了a,b,c三个整型变量并分别赋初值4,5,6; float a=3.5,b,c; /表示定义了a,b,c三个单精

9、度型变量,其中只有a赋初值3.5; char a, b=A, c;/表示定义了a,b,c三个字符型变量,其中只有变量b赋初值A;,17,学习幻灯,2.4 整数类型,2.4.1 整型常量 2.4.2 整型变量,18,学习幻灯,2.4.1 整型常量,整数常量是不带小数的数值,用来表示正负数。 例如0 x55、0 x55ff、1000000 都是C语言的整数常量。 整数常量的取值范围是有限的,它的大小取决于此类整型数的类型,与所使用的进制形式无关。,19,学习幻灯,整数常量三种形式:十进制、八进制、十六进制,(1)十进制整数是由不以0开头的09的数字组成的数据。 (2)八进制整数是由以0开头的07的

10、数字组成的数据。 (3)十六进制整数是由以0 x或0X开头的09的数字及AF的字母组成的数据。 例如:0,63,83是十进制数, 00,077,0123是八进制数, 0 x0,0X53,0 x53,0X3f,是 十六进制数。,20,学习幻灯,2.4.2 整型变量,整型变量类型有short、int、long、unsigned四种说明符。,21,学习幻灯,数据在存储器中的存储形式,int a=5; /表示定义了一个基本类型的int 变量,Visual C+ 6.0的编译系统为其分配4个字节的存储空间,每个字节8位,共32位。 数在内存中是以二进制形式表示的,因此,整数5在内存中的表示如下所示: 0

11、0000000000000000000000000000101 整数在存储单元的存放形式是用其补码(complement)的形式存放 。,22,学习幻灯,整数类型的取值范围,23,学习幻灯,2.5 实数类型,实数类型的数据即实型数据,在C语言中实型数据又称为浮点数。 浮点数是带有小数的十进制数,可用十进制数形式或指数形式表示。 C语言的浮点数常量在机器中有单精度和双精度之分。单精度以32位形式存放,双精度则以64位形式存放。,24,学习幻灯,2.5.1 实型常量,表示形式: (1)十进制数形式:十进制整数+小数点+十进制小数。 (2)指数形式:十进制整数+小数点+十进制小数+E(或e)+正负号

12、+指数。 例如: 3.14159,0.567,9777.12是十进制数形式, 1.234e5,4.90867e-2是指数形式。,25,学习幻灯,2.5.2 实型变量,(1)float类型 float类型是一个位数为32位的单精度浮点数。它具有运行速度较快,占用空间较少的特点。 (2)double类型 double类型是一个位数为64位的双精度浮点数。 双精度数在某些具有优化和高速运算能力的现代处理机上运算比单精度数快。双精度类型double比单精度类型 float具有更高的精度和更大表示范围,常常使用。,26,学习幻灯,2.6 字符类型,计算机中,字符是按其代码来存放的(ASCII码),例如小

13、写字母a,其代码为97,在存储时,按整数97进行存取,只是它只占一个字节的存储空间,因此字符型数据实际上是整数类型的一种。但是,字符数据在使用上有自己的特点,因此,将其作为一种数据类型来介绍。,27,学习幻灯,2.6.1 字符型常量,(1) 用单引号括起来的一个字符; 如:A、 1、?等。 (2) 用单引号括起来的由反斜杠()引导的转义字符。 如:n、 t、 x41、101等。,28,学习幻灯,转义字符表,29,学习幻灯,【例2.1】转义字符的输出,#include void main() char ch; ch=141; printf(%cn%c,ch,ch-32); ,30,学习幻灯,2.

14、6.2 字符型变量,字符型变量的类型说明符为char,它在机器中占8位,其范围为0255。 注意:字符型变量只能存放一个字符,不能存放多个字符,例如:char a=am; 这样定义赋值是错误的。,31,学习幻灯,字符串常量,用一对双引号括起来的字符序列。 注意:每个字符串的后面都有一个0结束符。 如:“SHANGHAI”,“AbcdeFGHijk”,“How are you”。, a与“a”的区别。,注意,32,学习幻灯,2.6.3 字符数据在内存中的存储形式,字符数据在内存中是以其ASCII码形式存取的。字符数据并不是直接将字符本身放到内存单元的,而是将该字符的ASCII码存放到内存单元,如

15、字符A的ASCII码值为65;其内存的具体存储形式为:01000001 在一定条件下,字符型数据和整形数据是通用的。需注意的是,字符型数据只占一个字节,只能存取0255范围内的整数。,33,学习幻灯,【例2.2】 字符数据的定义、赋值及存取,#include void main() char a,b; /定义a b两个字符变量; int i,j; /定义i j两个整形变量; a=A; /为字符变量a赋值A; i=66; /为整形变量i赋值65; b=i; /将整形变量i的值赋给字符变量b; j=a; /将字符变量a的值赋给整形变量j; printf(i=%d,j=%d,i=%c,j=%cn,i

16、,j,i,j); printf(a=%d,b=%d,a=%c,b=%cn,a,b,a,b); ,34,学习幻灯,字符数据注意事项,字符型常量区分大小写,a和A是两个不同的字符常量; 字符型常量只包含一个字符,如ab不是字符常量; a中,单撇号是定界符,而不属于字符常量的一部分。 注意字符0和数字0的区别。字符0表示输出一个形状为0的字符,保存字符0只占用内存一个字节,ASCII码值为48。而数字0是以整数存储方式存储,如果定义它为前面所讲的基本int型的话,它占用内存4个字节来保存。请读者仔细体会。如: printf(“%c”,0+0); printf(“%d”,0+0); 上机试试,输出结果

17、分别是什么?,35,学习幻灯,2.7 不同数据类型之间的转换,不同类型的数据之间的运算称为混合运算。 在混合运算中,将会碰到类型转换的情况。 类型转换可分为自动类型转换、强制类型转换两种。,36,学习幻灯,2.7.1 自动类型转换,转换从低级到高级。 各类型从低级到高级的顺序为:charintlongfloatdouble。,37,学习幻灯,例如: char ch=A; int i=28; float x=2.36; double y=6.258e+6; 若表达式为 i+ch+x*y,转换过程:先将ch 转换成int型,计算i+ch,由于ch=A,而A的ASC码值为65,故计算结果为93,类型

18、为int型。再将x转换成double型,计算x*y,结果为double类型。最后将i+ch的值93转换成double型,表达式的值最后为double类型。,38,学习幻灯,2.7.2 强制类型转换,高级数据要转换成低级数据,需用使用强制类型转换。 这种使用可能会导致溢出或精度的下降,最好不要使用。 强制类型转换的格式为: (type) 变量; 其中:type 为要转换成的变量类型。,例如: (int)(a+b) (强制将a+b的值转换成整型),39,学习幻灯,【例2.3】 数据类型转换的例子,#include void main() float x; int i; x=3.5; i=(int)

19、x; printf(x=%f,x); printf( i=%d,i); ,运行结果为: x=3.500000 i=3,40,学习幻灯,数据类型转换注意事项,注意总结不同类型的数据之间赋值的规律:对于整型数据(含字符型)之间的赋值是按内存单元的存储形式直接传送,实型数据之间以及整数与实数之间是先转换后赋值。 注意在类型转换过程中出现的错误,如: int a=32767; short b=a+1; 上机运行可以发现,得到b的结果不是32768,因为它超出了短整型数的表示范围。,41,学习幻灯,2.8 运算符与表达式,数据是需要用来加工的,如对数据的加减乘除运算,大小比较等等,这些都是编写程序必须的

20、,否则程序就没有意义了。为解决这个问题,C语言提供了丰富的运算符,使得C的运算十分灵活方便。,42,学习幻灯,2.8 运算符与表达式,2.8.1 算术运算符与算术表达式 2.8.2 赋值运算符与赋值表达式 2.8.3 关系运算符与关系表达式 2.8.4 逻辑运算符与逻辑表达式 2.8.5 条件运算符与条件表达式 2.8.6 逗号运算符与逗号表达式,43,学习幻灯,2.8.1 算术运算符与算术表达式,算术运算符用于算术运算,其操作数为数字类型或字符类型。,算术运算符表,44,学习幻灯,例:合法的C语言算术表达式。 a*b/c-1.5+a+fabs(-5) fabs(-5)是求-5 的绝对值的库函

21、数。,“+”、“-”,前缀方式是先将操作数加(或减)1,再将操作数的值作为算术表达式的值;后缀方式是先将操作数的值作为算术表达式的值,再将其加(或减)1。,45,学习幻灯,例如:a的值为5, +a为前缀方式,首先将a的值加1,再得到表达式的值为6; a+为后缀方式,首先得到表达式的值为5,再将a的值加1。 自增运算符和自减运算符运算对象只能是变量,不能是常量或表达式。形式3+或+(i+j)都是非法的表达式。,46,学习幻灯,算术运算符使用说明,运算符“”有以下规定:两个整数相除的结果为整数,如4/3的结果值为1,舍去小数部分。 运算符“%”,称之为取模,也就是通常所说的求余数,其两个操作数都必

22、须为整数,如“5%3=2”。 前面的运算符称为双目运算符,所谓双目就是有两个操作数,仅有一个操作数的运算符称为单目运算符。,47,学习幻灯,算术运算符使用说明,单目算术运算符“+”、“-”的前缀与后缀方式,对操作数本身的值的影响是相同的,但其对表达式的值的影响是不同的。前缀方式是先将操作数加(或减)1,再将操作数的值作为算术表达式的值;后缀方式是先将操作数的值作为算术表达式的值,再将其加(或减)1。(设a=5) (1) b=+a为前缀方式,结果为b=6,a=6; (2) b=a+为后缀方式,结果为b=5,a=6。,48,学习幻灯,运算符的优先级和结合性,为什么要规定运算符的优先级和结合性? 如

23、:有合法的C语言表达式: a*b-1.5/c 但上面的表达式C语言的编译系统怎样来解释? 是按(a*b)-(1.5/c)还是(a*b)-1.5)/c)来计算?,49,学习幻灯,仅有运算符,表达式的解析会出现二义性,为避免表达式计算的二义性,C+语言规定了运算符的优先级和结合性。 算术运算符的优先级是: (1)+ 、- 优先级最高 (2)然后是* 、/、 % (3)最后是+ - 。 算术运算符的结合性是:“自左至右的结合方向”又称“左结合性”,即运算对象先与左面的运算符优先结合。,50,学习幻灯,表达式a-b*c,b的左侧为减号,右侧为乘号,而乘号优先于减号,等价于a-(b*c)。如果在一个运算

24、对象两侧的运算符的优先级别相同,如a-b+c,则按规定的“结合方向”处理,等价于(a-b)+c。 显然,表达式a*b-1.5/c是按(a*b)-(1.5/c)来处理,这样就避免了二义性的问题。,51,学习幻灯,2.8.2 赋值运算符与赋值表达式,赋值运算符“=”就是把右边操作数的值赋给左边操作数 。 赋值运算符左边操作数必须是一个变量,右边操作数可以是常量、变量、表达式 。 例如:表达式b=a+3,在赋值运算符两边的操作数的数据类型如果一致,就直接将右边的数据赋给左边;如果不一致,就需要进行数据类型自动或强制转换,将右边的数据类型转换成左边的数据类型后,再将右边的数据赋给左边变量。,52,学习

25、幻灯,复合运算符,练习:设a=12, 计算表达式a+=a-=a*12和a+=a-=a*=12的值,53,学习幻灯,赋值表达式分析,a=b=c=9 正确(赋值表达式值为9,a,b,c值均为9) a=18+(c=27) 正确(表达式值为45,a值为45,c值为27) (a*b)=c=9 错误 (a*b)不是左值 a+=a-=a*a 正确,假设a的初值为5,表达式值为-40,a的最终值为-40,54,学习幻灯,赋值运算符的优先级和结合性,赋值运算符“=”及复合赋值运算符的优先级为同一级别,结合方向为“自右向左”,55,学习幻灯,2.8.3 关系运算符与关系表达式,关系运算符用来对两个操作数进行比较。

26、 关系表达式就是用关系运算符将两个表达式连接起来的式子,其运算结果为布尔逻辑值 。 如果关系表达式成立结果为真(true),否则为假(false)。由于C语言没有逻辑型数据,就用1代表“真”,0代表“假”。,56,学习幻灯,关系运算符,57,学习幻灯,关系运算符的优先级和结合性,(1)“”和“=”为同一级, “= =”和“!=”为同一级。前者优先级高于后者。 (2)关系运算符优先级低于算术运算符,高于赋值运算符和逗号运算符。 (3 ) 关系运算符的结合性为自左向右。,58,学习幻灯,【例2.4】 关系表达式的运用,#include void main() char ch=w; int a=2,

27、 b=3, c=1, d, x=10; printf(“%d”, ab=c); printf(“%d”, d=ab); printf(“%d”, cha+1); printf(“%d”, d=a+bc); printf(“%d”, b-1=a!=c); printf(“%dn”, 3=x=5); ,运行结果为 0 0 1 1 0 1,程序输出了6个表达式的值,其中有两个是赋值表达式,请读者根据运算符的优先级作出判断。,59,学习幻灯,关系表达式注意事项,关系表达式3=x=5 等价于关系表达式 (3=x) =5 当 x=10时,3=x的值是1,再计算1=5,得到1。其实,无论x去何值,关系表达式

28、3=x的值不是1就是0,都小于5,即3=x=5的值恒为1。 由此看出关系表达式3=x=5无法正确表示数学上的代数式3x5 。,60,学习幻灯,关系表达式注意事项,b=a; 这是一个赋值表达式,将变量a的内容赋值给变量b;最终变量b单元的内容被变量a单元的内容覆盖。 b=a;这个一个关系表达式,一般用在程序的条件判断中。如 if(b=a),判断变量a和变量b单元的内容是否相等,如相等,此条件表达式的结果为1,否则为0。最终变量b单元的内容和变量a单元的内容保持各自原值,变量b单元的内容不会被变量a单元的内容覆盖,61,学习幻灯,2.8.4 逻辑运算符与逻辑表达式,C语言如何表示数学上的(3x5)

29、? 某城市规定,去公园可免门票的条件为:年龄10岁以下(含10岁)的儿童或者年龄70岁以上(含70岁)的老人。 C语言如何表示这个条件?,62,学习幻灯,2.8.4 逻辑运算符与逻辑表达式,逻辑运算符用来对关系表达式进行运算。逻辑表达式就是用逻辑运算符将关系表达式连接起来的式子,其运算结果为布尔逻辑值。,逻辑运算符,63,学习幻灯,与、或、非运算规则,64,学习幻灯,逻辑运算符的优先次序,(1)! printf (“%d”, a ,运行结果为 0 1 0 1,66,学习幻灯,逻辑表达式的求解规则,求解C语言逻辑表达式时,按从左到右的顺序计算运算符两侧的操作数,一旦得到表达式的结果,就停止计算。

30、 求解逻辑表达式 exp1 int max; max=(ab)?a:b; max=(maxc)? max:c; printf (“max=%dn”, max); ,78,学习幻灯,复杂表达式的分析,由于C语言的运算符十分丰富,可以灵活地组成各种类型的表达式.在分析复杂的表达式时,可以尝试对它加上一些“没含义”的括号,帮助理解表达式的计算顺序,同时一定要掌握好运算符的优先级以及结合性。 在实际C程序的编写时,不主张太复杂的表达式,尽量多用( ),使表达式的含义一目了然。,79,学习幻灯,【例2.10】分析以下3个独立的表达式,求出表达式的值及变量i j k的值(变量初值为i=1,j=4,k=5)

31、 (1)i=+j,j=+k; (2)!i1|(k=100); (3)!i1,80,学习幻灯,表达式1:i=+j,j=+k,分析:表达式中包含三种运算符:+ = , ,运算符优先级的高低顺序是:+ = , i=+j,j=+k; 计算(+j)和(+k),由于是前缀方式,j和k先进行自加,得到j和k的值分别为5和6,两个表达式的值也分别为5和6; i=5,j=6; 计算i=5,表达式为5,i=5; 5,j=6; 计算j=6 ,表达式为6,j=6; 5,6; 运算逗号运算符,整个表达式的值为逗号运算符最后一个表达式的值,因此,表达式的值为6,i=5,j=6;,81,学习幻灯,表达式2:!i1|(k=1

32、00),分析:表达式中五种运算符优先级的高低顺序是:非(!),关系运算符( 1|(k=100); 计算(!i),由于i=1,故表达式的值为0; 01|(k=100); 计算01|(k=100); 计算(j1) 由于j=4, 表达式为1; 1 按运算符的优先级,接下来应该计算表达式: (k=100),但由于这是一个或运算,exp1|exp2时,当exp1的值为1时,这个表达式的值一定为1,系统不需计算表达式(k=100),因此,整个表达式的值为1,i=1, j=4,k=5。,82,学习幻灯,表达式3:!i1 /正确, a属于变量,它占有四个字节的存储空间,它的变量类型是基本整型,a的初值为5。 int =5; /错误,不能将一个数据赋给一个抽象的类型,因为它根本就不分配具体的存储空间,数据能放到哪里呢?,小 结,86,学习幻灯,

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

当前位置:首页 > 社会民生


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