第三章 数据类型运算符和表达式ppt课件_第1页
第三章 数据类型运算符和表达式ppt课件_第2页
第三章 数据类型运算符和表达式ppt课件_第3页
第三章 数据类型运算符和表达式ppt课件_第4页
第三章 数据类型运算符和表达式ppt课件_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

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

文档简介

1、第三章 数据类型、运算符与表达式第三章第三章 数据类型、运算符与表达式数据类型、运算符与表达式3.1 C的数据类型的数据类型3.2 常量与变量常量与变量 3.3 三种基类型数据三种基类型数据3.4 运算符和表达式运算符和表达式3.5 练习练习第三章 数据类型、运算符与表达式3.1 C的数据类型的数据类型 图3.1 C的数据类型总览 第三章 数据类型、运算符与表达式3.1.1 三种基本数据类型存储形式)三种基本数据类型存储形式)1. 整型整型 整型数据在内存中以二进制补码形式存放,一般占整型数据在内存中以二进制补码形式存放,一般占2个个字节。字节。 正数的补码和其原码相同,负数的补码为其绝对值的

2、原码按位取反再加1。 10的补码:0000 0000 0000 1010等于原码) -10的补码:1111 1111 1111 0110符号位第三章 数据类型、运算符与表达式2. 字符型字符型 字符型数据在内存中以字符型数据在内存中以ASCII码存放附录码存放附录I),存储),存储形式与整数类似,只占一个字节。形式与整数类似,只占一个字节。A:0100 00013. 实型实型 实型数据在内存中按指数形式存储,分成小数实型数据在内存中按指数形式存储,分成小数部分和部分和指数部分,一般占指数部分,一般占4个字节。个字节。第三章 数据类型、运算符与表达式3.2 常量与变量常量与变量3.2.1 常量常

3、量常量是其值在程序运行过程中不能被改变的量。常量是其值在程序运行过程中不能被改变的量。常量又可以分为直接常量和符号常量。直接常量可以从字面上直接看出数据的类型和值;而符号常量是用一个标识符来代表一个常量,不能从字面上直接看出数据的类型和值。用于为语法单位命名的有效字符序列称为标识符。C语言规定标识符只能由字母、数字和下划线三种字符组成,并且不能以数字开头。第三章 数据类型、运算符与表达式合法 非法_total 1_totaltest1_2 test1-2PI hi!therea1 a1 A1 f(x)Int int留意:大小写敏感,不能用关键字作为标识符附录)。第三章 数据类型、运算符与表达式

4、符号常量的使用符号常量的使用 宏定义命令宏定义命令define用来定义一个标识符和一个字符用来定义一个标识符和一个字符串,在程序中每次遇到该标识符时就用所定义的字符串,在程序中每次遇到该标识符时就用所定义的字符串替换它。这个标识符叫做宏名,替换过程叫做宏替串替换它。这个标识符叫做宏名,替换过程叫做宏替换或宏展开。宏定义命令换或宏展开。宏定义命令define的一般形式是:的一般形式是: define 宏名宏名 字符串字符串 例如想用PI表示数值3.1415926,就可以用宏定义define来说明: define PI 3.1415926这样在预编译时,每当在源程序中遇到PI就自动用3.14159

5、26代替,这就是宏展开。第三章 数据类型、运算符与表达式例 求半径为3的圆的周长和面积。 define PI 3.1415926 main( ) float perimeter,area; perimeter=2*PI*3; area=PI*3*3; printf(“周长=%f,面积=%fn”,perimeter,area); 经过宏替换,宏展开为: perimeter=2*3.1415926*3; area=3.1415926*3*3;第三章 数据类型、运算符与表达式留意:留意:(1宏替换仅是简单地用所说明的字符串来替换对应的宏替换仅是简单地用所说明的字符串来替换对应的宏名,无实际的运算发生

6、,也不作语法检查。宏名,无实际的运算发生,也不作语法检查。例如:例如: define PI 3.1415926; perimeter=2*PI*3; area=PI*3*3;经过宏替换后,经过宏替换后, 语句展开为:语句展开为: perimeter=2*3.1415926;*3*3; area=3.1415926; *3*3; 然后经编译将出现语法错误。然后经编译将出现语法错误。第三章 数据类型、运算符与表达式(2符号常量的值在其作用域从定义开始,到源程序结束为止内不能改变。例如: define PI 3.1415926 PI=3.14; perimeter=2*PI*3; area=PI*3

7、*3;经编译将出现语法错误。 (3在C语言程序中习惯上用大写字母作为宏名。 第三章 数据类型、运算符与表达式3.2.2 变量变量若有定义 int sum;则执行语句 sum=0; 后, 它的值为0;可再执行语句 sum=1; 将它的值变为1。 变量是其值在程序执行过程中可以改变的量。每个变量都有一个名字,它代表某个存储空间及其所存储的数据。在程序中取变量的值,实际上是通过变量名找到相应的存储单元,从中读取数据。要想把内存中的某段存储单元和一个变量名联系起来, 必须首先对变量进行定义或声明。第三章 数据类型、运算符与表达式1. 变量的定义变量的定义变量定义的一般形式:变量定义的一般形式: 类型说

8、明符类型说明符 变量名表;变量名表;这里,类型说明符这里,类型说明符(type)必须是必须是C语言的有效数据类型。语言的有效数据类型。变量名表可以是一个或多个标识符名,中间用逗号分隔,变量名表可以是一个或多个标识符名,中间用逗号分隔,最后以分号结束。最后以分号结束。如:如:int a,b; float f1,f2; char ch;这样就在内存中开辟了五个相应的存储单元,这五个单这样就在内存中开辟了五个相应的存储单元,这五个单元在空间上不一定是连续的。元在空间上不一定是连续的。第三章 数据类型、运算符与表达式2. 变量的初始化变量的初始化 变量定义后,相应的存储单元内并没有确定的数据。变量定义

9、后,相应的存储单元内并没有确定的数据。因此,使用变量时要先对变量进行初始化。因此,使用变量时要先对变量进行初始化。如:int a,b;aba=2;b=3;23等价于int a=2,b=3;C语言允许在定义的同时为变量初始化。第三章 数据类型、运算符与表达式3. 阐明阐明(1变量必须先定义后使用。变量必须先定义后使用。(2同一函数内所定义的变量,变量名不能相同。同一函数内所定义的变量,变量名不能相同。 错误:错误:int a; float a;(3变量使用时要先初始化,给出相应的初值,可在定变量使用时要先初始化,给出相应的初值,可在定义的同时初始化。义的同时初始化。 正确:正确: int a,b

10、; a=b=2; int a=2,b=2; 错误:错误:int a=b=2;第三章 数据类型、运算符与表达式3.3 三种基类型数据三种基类型数据3.3.1 整型数据整型数据1. 整型常量的表示方法整型常量的表示方法(1十进制整数:用十进制数码表示数,不加十进制整数:用十进制数码表示数,不加前缀。前缀。如:如:123,-123。(2八进制整数:用八进制数码表示数,加前八进制整数:用八进制数码表示数,加前缀缀0(数字数字零零)。如:。如:0123,-0123。(3十六进制整数:用十六进制数码表示数,十六进制整数:用十六进制数码表示数,加前缀加前缀0 x或或0X(数字零和字母数字零和字母x(X)。如

11、:。如:0 x123,-0X123。留意:留意:12301230 x123第三章 数据类型、运算符与表达式2. 整型变量的分类整型变量的分类(1基本整型基本整型(int):占:占2个字节个字节(2短整型短整型(short int或或short):占:占2个字节个字节(3长整型长整型(long int或或long):占:占4个字节个字节这三类前都可以加上修饰符signed或unsigned。(1signed:有符号型,最高位为符号位,可缺省。(2unsigned:无符号型,最高位为数据位,不可缺省。如有: int a; unsigned int b;则a为有符号基本整型,b为无符号基本整型。第三

12、章 数据类型、运算符与表达式int :-32768032767unsigned int :065535图3.2 int类型和unsigned int类型的取值范围 无符号型变量由于无符号位,只能存放非负整数。而有符号型变量最高位为符号位,0表示正数,1表示负数,因此可存放负数。第三章 数据类型、运算符与表达式3. 整型数据的溢出整型数据的溢出 各种整数类型都有各自的取值范围,一旦越出了这个各种整数类型都有各自的取值范围,一旦越出了这个范围,就不能正确地表示数据,这种情况称为范围,就不能正确地表示数据,这种情况称为“溢出溢出”。main( )int a,b; a=32767; b=a+1; pr

13、intf(“%d,%dn”,a,b);编译,运行结果为:32767,-32768a: 0111 1111 1111 1111+ 0000 0000 0000 0001b: 1000 0000 0000 0000 符号位第三章 数据类型、运算符与表达式main( )int a,b; a=-32768; b=a-1; printf(“%d,%dn”,a,b);编译,运行结果为:-32768,32767a: 1000 0000 0000 0000 - 0000 0000 0000 0001b: 0111 1111 1111 1111符号位留意:常量无unsigned型;整型数据加后缀l或L,表示长整

14、型常量,即123123L。第三章 数据类型、运算符与表达式3.3.2 实型数据实型数据1. 实型常量的表示方法实型常量的表示方法(1十进制小数形式:有数字和小数点组成必须有小十进制小数形式:有数字和小数点组成必须有小数点)。如:数点)。如:123.0、123.、.123。(2指数形式:数字指数形式:数字e(或或E)整数整数正确:正确:12.3e1、1.23E2、1230e-1。错误:错误:e3、2.1e3.5、.e3、e。若要表示1.0103?1.0e3或1e3第三章 数据类型、运算符与表达式2. 实型变量的分类实型变量的分类(1单精度型:单精度型:float,占,占4个字节,个字节,7位有效

15、数字。位有效数字。(2双精度型:双精度型:double,占,占8个字节,个字节,16位有效数字。位有效数字。(3长双精度型:长双精度型:long double,占,占16个字节。个字节。3. 实型数据的舍入误差由有效位造成)实型数据的舍入误差由有效位造成)main( )float a,b; a=123456.789e5; b=a+20; printf(“%fn”,b);第三章 数据类型、运算符与表达式3.3.3 字符型数据字符型数据1. 字符常量字符常量字符常量是用单引号括起来的一个字符。字符常量是用单引号括起来的一个字符。如:如:a、1、?等。等。留意:(1大小写敏感:a和A是不同的字符常量

16、。(2)1和1不同:前者是字符常量,ASCII值为49;后者为整型常量,值为1。(3单引号仅为字符常量的定界符,而非字符常量的一部分。(4单引号内的那个字符不能为单引号、双引号或反斜杠。第三章 数据类型、运算符与表达式转义字符:以(反斜杠开头的字符序列。n: 回车换行符 r: 回车符t: 跳过一个8列 b: 退格符f: 换页符 : 反斜杠: 单引号 ”: 双引号 ddd: 八进制数所代表的字符xhh:十六进制数所代表的字符第三章 数据类型、运算符与表达式例 main( ) printf(“This is a program.n”); printf(“this isba012program.n”

17、); printf(“”firstsecond”); 运行结果为:This is a program. his iaprogram.“firstsecond” 第三章 数据类型、运算符与表达式2. 字符串常量字符串常量字符串常量是用一对双引号括起来的字符序列。系统自动地在每个字符串常量的末尾加一个“字符串结束标志”(0)。它是一个空操作符,不做任何操作。留意:(1大小写敏感:“a和“A是不同的字符常量。(2)1和“1不同:前者是字符常量,只包含一个字符;后者为字符串常量,包含两个字符1和0。(3双引号仅为字符串常量的定界符,而非字符串常量的一部分。(4字符串中要插入双引号,应借助转义字符”。第

18、三章 数据类型、运算符与表达式3. 字符变量字符变量 由于字符型数据和整型数据的存储形式类似,所以两由于字符型数据和整型数据的存储形式类似,所以两者在一定范围内可互相通用。者在一定范围内可互相通用。(1字符型数据和整型数据之间可以进行混合运算。字符型数据和整型数据之间可以进行混合运算。 main( ) char c; c=A+32; printf(“%cn”,c); 运行结果为:运行结果为:a可见,大小写字母的可见,大小写字母的ASCII码值相差码值相差32。第三章 数据类型、运算符与表达式(2字符型数据和整型数据可互相赋值;字符型数据可以用整数形式输出;反之,一定范围内的整数也可以用字符形式

19、输出。 main( ) int I; char c; I=a;c=97; printf(“%c,%dn”,c,c); printf(“%c,%dn”,I,I); 运行结果为:a,97 a,970255第三章 数据类型、运算符与表达式3.4 运算符和表达式运算符和表达式1. 表达式是由运算符和操作数组成的。依据运算的特征,表达式是由运算符和操作数组成的。依据运算的特征,可对表达式进行分类。可对表达式进行分类。2. 表达式在书写时应该注意遵循表达式在书写时应该注意遵循C语言表达式书写的原则语言表达式书写的原则: (1) C语言的表达式只能采用线性的形式书写。语言的表达式只能采用线性的形式书写。 例

20、如例如: 应写成应写成1.0/3+i+j*j*j。 应写成应写成a+b)/(c+d)*e+f。 331ji fedcba3.4.1 表达式的基础表达式的基础第三章 数据类型、运算符与表达式 (2) C语言的表达式只能使用C语言中合法的运算符和操作数, 对有些操作必须调用库函数完成, 而且运算符不能省略。例如: r2应写成3.14159*r*r。 应写成0.5*a*b*sina)。 |xy|应写成fabsxy)。 y+2X 应写成y+pow2, x)。 aabsin21第三章 数据类型、运算符与表达式3. 表达式的计算要考虑运算符的优先级和结合性。表达式的计算要考虑运算符的优先级和结合性。 运算

21、符的优先级规定了运算符执行的先后顺序。C语言将运算符的优先级划分为15级。(附录) 运算符的结合性是指,优先级相同的运算是从左到右进行左结合性还是从右至左进行右结合性)。左结合性是人们习惯的计算顺序。 C语言中, 只有单目运算(!、 、 +、 -、 -、*、 &)、条件运算(?: )、赋值运算(=、 +=、 -=、 *=、 /=、 %=)的结合性是右结合, 其余运算均为左结合。第三章 数据类型、运算符与表达式 普通,各类运算是在相应的同一类型的数据之间进行的。不同类型数据之间进行运算或数据类型不符合运算要求时,要进行类型转换。类型转换有自动转换又称隐含转换与强制转换两种方式。4. 表达式的计算

22、还要考虑类型转换。表达式的计算还要考虑类型转换。(1自动转换doublelongunsignedint floatchar,short高低第三章 数据类型、运算符与表达式 横向箭头方向表示必定要进行的转换,纵向箭头方向表示类型自动转换的方向向高看齐)。result = ( ch / i )+(f * d)-(f + i)floatintdoubledouble doubleintdoubledoubledouble;表达式中若有一数据为实型,则计算结果必为double类型。第三章 数据类型、运算符与表达式(2强制转换 强制类型转换通过类型转换运算进行。 格式:(类型名)(表达式)将表达式的类型

23、强制转换成类型名指定的类型。 如:float x=3.2, y=2.3; (int)(x+y) 将表达式x+y的值强制转换成整型。 (int) x+y 先将x的值转换成整型,再与y相加。强制类型转换是暂时性的、一次性的,并不会永久地改变所转换表达式的类型。 如:int a=2; (double)a 为双精度,a依然为整型量。 第三章 数据类型、运算符与表达式3.4.2 算术运算符和算术表达式算术运算符和算术表达式1. 基本的算术运算符(+、-、*、/、%)阐明:(1双目, *、/、% 优先级高于+、- ,左结合性。(2两个整型数据相除时,其运算结果也是整数,余数被截掉。如1/2的结果是0;10

24、/3的结果是3。 例 main( ) int i=10, j=4; float f=i/j; printf(f=%fn, f); 运行结果为:f=2.000000第三章 数据类型、运算符与表达式(3求余运算符(%)仅用于整型数据,不能用于实型。它的作用是取整数除法的余数,结果与被除数同号。如1%2的结果是1;-10%3的结果也是-1。例 main( ) int a; float f= -3.5; a=(int)f %10; printf(“a=%dn”,a); 运行结果为: a= -3第三章 数据类型、运算符与表达式2. 自增、自减运算符(+、- -)阐明:(1单目,操作数只能是变量,优先级处

25、于第2级, 右结合性。如 -i+等价于-(i+)。(2有前置、 后置两种方式: +i 或 - -i :在使用i 之前,先使i 的值增/减1,俗称先加/减后使用。 i+ 或 i- - :先使用i 的值,然后使i 的值增/减1,俗称先使用后加/减。第三章 数据类型、运算符与表达式main( )int x, y; x=10; y=+x; printf(“%d, %dn”, x, y); 运行结果为:11,11若将第四行改为:y=x+;则运行结果为:11,10第三章 数据类型、运算符与表达式将程序改为:main( )int x, y; x=y=10; printf(“%d,%dn”,+x,y+);运行

26、结果为:11,10若将第四行改为:printf( “%d,%dn”,+x,x+); 则运行结果为:12,10因为函数参数的求值顺序是自右而左。第三章 数据类型、运算符与表达式3.4.3 赋值运算符和赋值表达式赋值运算符和赋值表达式1. 一般的赋值运算符和复合的赋值运算符一般的赋值运算符和复合的赋值运算符 复合的赋值运算符是由赋值运算符和其它双目运算符复合的赋值运算符是由赋值运算符和其它双目运算符组合而成的。如:组合而成的。如:+ =、- =、* =、/ = 和和 % = 。 格式:格式: 如:如:int x=0, a, b; a=2; b=a; x+=2; /*等价于等价于x=x+2;*/ x

27、*=a+b; /*等价于等价于x=x*(a+b);*/则变量a、b的值都为2,变量x的值为8。第三章 数据类型、运算符与表达式阐明:阐明:(1赋值运算符的左侧只能为变量。赋值运算符的左侧只能为变量。 非法:非法:1 = a; - a=1; a+b=1;(2双目,优先级别为双目,优先级别为14仅比逗号运算符高),右结仅比逗号运算符高),右结合性。合性。 例例 int a=1, b, c; c=b=a ; a += a - =a*a ; /*等价于等价于 a=a - (a*a) ; a=a+a ;*/则变量则变量b、c的值都为的值都为1,变量,变量a的值为的值为0。第三章 数据类型、运算符与表达式

28、(3当赋值运算符两侧数据的类型不一致,则在赋值时要进行类型转换。 实型整型:取整,舍弃小数部分。 整型实型:数值不变,以实数形式表示。 单、双精度实型之间:数值不变,进行有效数字处理。 各种整型之间:按存储形式进行。例 float x; int i; x=i=3.14159; 则变量i的值为3, 而变量x的值为3.0而不是3, 也不是 3.14159。第三章 数据类型、运算符与表达式3.4.4 逗号运算符和逗号表达式逗号运算符和逗号表达式 逗号运算符也称顺序求值运算符,其运算优先级为15,也是最低的,结合方向是自左至右。逗号运算符把两个对象“连接起来”,使之成为一个逗号表达式。 其一般形式是:

29、 , 逗号表达式的求解过程: 先求解表达式1,再求解表达式2,最后求解表达 式n。整个逗号表达式的值是表达式n的值。第三章 数据类型、运算符与表达式例如: x=(y=3, y+1) 该表达式括号内是逗号表达式,由于结合方向是自左至右, 先将3赋给y, 然后计算表达式y+1,其值为4。整个表达式的值为最后一个表达式的值,所以表达式的值为4,最后将4赋给x。若表达式改为: x=y=3, y+1则表达式的值为4,x的值为3。第三章 数据类型、运算符与表达式3.4.5 其它运算符其它运算符1. 取地址运算符取地址运算符& 取地址运算是单目运算取地址运算是单目运算, 操作数只能是变量操作数只能是变量, 得到变量得到变量的地址。的地址。 2. 求字节数运算符求字节数运算符sizeof 求字节数运算是单目运算求字节数运算是单目运算, 操作数可以是类型名操作数可以是类型名, 也可也可以是变量、表达式,用以求得相应类型或数据所占的字以是变量、表达式,用以求得相应类型或数据所占的字节数。节数。 如:如:sizeof

温馨提示

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

评论

0/150

提交评论