第3章 数据类型、运算符与表达式.ppt

上传人:priceawful190 文档编号:373590 上传时间:2018-10-05 格式:PPT 页数:45 大小:311.50KB
下载 相关 举报
第3章 数据类型、运算符与表达式.ppt_第1页
第1页 / 共45页
第3章 数据类型、运算符与表达式.ppt_第2页
第2页 / 共45页
第3章 数据类型、运算符与表达式.ppt_第3页
第3页 / 共45页
第3章 数据类型、运算符与表达式.ppt_第4页
第4页 / 共45页
第3章 数据类型、运算符与表达式.ppt_第5页
第5页 / 共45页
亲,该文档总共45页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

1、第3章 数据类型、运算符与表达式,1-C的数据类型 2-常量与变量 3-整型数据 4-实型数据 5-字符型数据 6-变量赋初值 7-各类数值型数据间的混合运算 8-算术运算符与算术表达式 9-赋值运算符和赋值表达式 10-逗号运算符和逗号表达式,1-C语言的数据类型,数据类型,基本类型,整型 字符型 实 型 枚举型,构造类型,指针类型,空类型,数组类型结构体类型共用体类型,字符型(char) 1字节 数值型整型短整型 (short) 2字节整 型 (int) 2字节长整型 (long) 4字节 (可表示到21亿)实型单精度 (float) 4字节 6/7 位有效数字长单精度(long floa

2、t) 8字节 16/17位有效数字双精度 (double) 8字节 长双精度(long double) 10字节 20位有效数字 可知:charintlong int=floatdouble (以上字节长度为Turbo C环境)测试类型长度的专用关键字 sizeof printf(“int:%d bytes n”,sizeof(int);,2-常量与变量,程序的主要任务是处理数据(输入输出和加工),数据在程序中有两种表征形式:变量和常量。 常量:表示数据的值。常量仅仅代表某个值,它的值不能被变。 变量:值可以改变,具有自己的名字,。 C语言区分两种常量:直接常量和符号常量。12,3.5等都是直

3、接常量;符号常量是一种具有名字的常量,需要单独定义。它的定义格式: #define NUM 30 有了上行,NUM就代表30,但30在这里有个名字叫NUM。 在C语言程序中,直接常量可以直接使用,符号常量和变量必须先定义再使用。定义了一个变量,程序就为这个变量分配(安排)了一个大小合适的内存单元。,#define PRICE 30 P39 main() int num,total;float v ,r,h;num=10;total=num*PRICE;printf(“total=%d”,total);r=2.5;h=3.2;v=3.14159*r*r*h;printf(“v=%fn”,v);

4、,常量,变量名: 以字母或下划线 开头,由数字、 字母、下划线构 成。最多32个字 符(TC),多余不识别.一般小写。,变量,变量先定 义后使用,符号常量,名字常用大写,Page 5,变量名: 如 SUM, A1, A2, _Xn, ,等均为合法变量名,但a-b , c-d , a.b , $888, #555, 3x56, ab 等均为非法变量名,变量名区分大小写,如a与A意义是不一样. 如sum、Sum是不同的标识符。,2). 语言中有32个关键字,不允许用户再用来定义标识符。,3-整型数据,整型常量的表示方法 常量的表示方法是指常量数值的表示形式。C语言中提供了3种表示整数常量的方法:

5、(1)10进制整数,比如:10,-23,89。 (2)8进制整数,C语言规定,以数字0开头的数是8进制数。比如,017实际上是(17)8,相当于10进制数的15;-011相当于10进制数-9; (3)16进制整数,C语言规定,以0x或0X开头的数是16进制数。比如,0x18实际上是(18)16,相当于10进制数的24。 有了上面3种整数表示方法,我们可以这样定义整数的符号常量: #define NUM1 30 #define NUM2 026 #define NUM3 0x1a 其中常量NUM1的值是30,常量NUM2的值是22,常量NUM3的值是26。,整数在内存中的存放形式 数据在内存中以

6、2进制形式存放。PC机中,一个整数默认情况下需要 用2个字节(16位)的内存单元存放。比如,整数14的2进制表示是(1110)2, 那么在内存中它是这样存放的:,整数的数值在内存中用补码表示。 P41 一个整数的绝对值的2进制表示称为这个数的原码。比如(0000000000001110)2就是14和-14的原码。一个正整数和零的补码就是原码本身。但一个负数的补码是它的原码取反加1的结果。因此,-14的补码应为(1111111111110010)2,它的最高位是1,表明这是个负数。,-14的原码(取绝对值后用二进制表示),取反,加1后,成为补码,整型变量的分类 整型变量的基本类型符是int。C语

7、言允许程序员在定义整型变量时,在int前面增加两类修饰符: 一类是控制变量是否有符号,包括:signed(可省)和unsigned 另一类控制整型变量的值域范围,包括short和long。 比如,可以这样定义一个整型变量: unsigned long int a; 这样就形成了6类整型变量:,整型数据的分类和取值范围,类型 定义符 位数 数值范围 基本 int 16位 -32768 - 32767 短整 short 16 同上 长整 long 32 略 无符号 unsigned 16 0-65535 无符号短整 unsigned short 16 065535 无符号长整 unsigned l

8、ong 32 略,整型变量的定义 定义格式:int 变量名;必须用分号结尾 有空格 必须是合法标识符 例如:int a; 如果想一次定义多个整型变量,可以这样:int a , b , c; 变量间用逗号分隔 上面一行定义等价于下面3行,但形式却简洁一些: int a; int b; int c;,int a,b,c; (正确) a=b=c=3;int a=b=c=3; (错误),#define PRICE 30 main() int num,total;float v ,r,h;num=10;total=num*PRICE;printf(“total=%d”,total);r=2.5;h=3.

9、2;v=3.14159*r*r*h;printf(“v=%fn”,v); ,int、unsigned int 2字节 short unsigned short2字节 long unsigned long4字节,整型常量,整型变量,整型变量定义,Page 14,4-实型数据,实型常量的表示方法 实数(real number)又称为浮点数(floating-point number)。因此,实型又称为浮点型。C语言中,实型常量有两种方法表示: (1)10进制小数形式。这种实型常量由数字和小数点组成。比如:1.2、33.24、0.0等等。 (2)指数形式: 尾数e/E指数,1.234e2表示1.23

10、4x102、2.2E13表示2.2x1013。e或E前面必须有数字,后面必须是整数!e3、.e5、1e3.5都是错误的指数形式。,实型变量的分类和定义,(1)单精度实型,数据类型符是float,这种变量占用4个字节(32位)内存,变量绝对值的取值范围是10-371038。例如: float f=2.14, F; (2)双精度实型,数据类型符是double,这种变量占用8个字节(64位)内存,变量绝对值的取值范围是10-30710308。例如: double x, y;,实型数据的精度(舍入误差)实型数据的精度决定了实型变量所能表示的有效数字的个数。下表列出了2种实型数据所能精确表示的数字个数。

11、,5-字符型数据,字符型数据就是那些用来表征英文字母、符号、汉字的数据。 字符型数据实际上就是整数数据,但它只占用1个字节(8位)的内存单元。所以,一共只有256(28)个字符型数值。 每一个字符都对应着一个值,被称为字符的ASCII码。美国国家标准局为每个字符都规定了固定的数值(详见书附录的ASCII码表P374)。,字符常量和字符串常量的表示方法字符常量:用单引号括起来的一个字符,其值是该字符的ASCII 码值。 b 字符串常量:用双引号括起来的字符序列。 “abcd” (1)字符常量有两种表示方法: 对于那些可以直接输入的字符,可以用单引号将其括起来表示其常量。例如,a是代表字母a的字符

12、常量,*是代表符号*的字符常量,3是代表数字字符3的字符常量。 对于那些无法直接输入的字符以及某些特殊字符,需要用单引号括起来的转义字符来表示,比如:r、n、127、xf8,转义字符:以一个斜杠开头的字符序列, 代表某个特定的ASCII码字符。P48 P49 例,(2)字符串常量的表示方法,用单引号括起来的是字符常量, 用双引号括起来的被称为字符串常量。 字符串实际上是连续存放的一组字符,但最后一个字符的值是0。比如,字符串”HELLO”在内存中是这样存放的。,下面列出了一些包含转义字符的字符串常量: “Say “bye” 表示字符串:Say “bye” “d:borlandcbin” 表示字

13、符串:d:borlandcbin,(3)字符型变量 字符分为有符号字符和无符号字符,字符可以参与数值运算。一般默认为有符号字符。 char,有符号字符,值域:-128127(-2727-1),第8位是符号位;变量定义:char ch=A; unsigned char,无符号字符,值域:0255(027),第8位参与数值运算;变量定义:unsigned char uc;,注意:C语言没有字符串变量,6-给变量赋初值,例: int a=3; float f=3.56; char c=a; int a,b,c=5;,7各类数值型数据间的混合运算,数据参加运算前必须进行下列转换: P54 char,s

14、hortint,floatdouble 混合运算时,数据类型由低级高级: int unsigned long double 低 高,注意:上图并不意味着int必须到unsigned再到long 的依次转换,而是由算式中的最高级进行转换的。,不同类型数据混合运算时的类型转换的例子,例: int i; float f; double d; long e; 运算次序:10+ a + i*f - d/e 10+97 转换为double 转换为double 再相乘 再相除 107double 结果为double,8-算术运算符与算术表达式,C运算符简介 算术运算符 ( + - * / % ) 逗号表达式

15、 ( , ) 关系运算符 ( = | & ) 赋值运算符 ( = ) 条件运算符 ( ? : ) 指针运算符 ( * & ) 求字节数运算符 ( sizeof ) 强制类型转换运算符 ( 类型 ),C语言的运算能力体现在提供了大量的运算符,这些运算符按照需要的操作数的个数分为:三目运算符、双目运算符和单目运算符。,算术运算符和算术表达式,C语言提供的算术运算符包括:加(+)、减()、乘(*)、除(/)和取余(%)。这些运算赋是双目运算符。利用算术运算符连接起来的式子称为算术表达式。+、*、/运算符既可用于整型数据的算术运算,又可用于实型数据的算术运算。但%只能用于整数。,注意: %不能用于fl

16、oat型数据,2.5%2是非法表达式。 *、/和%比+、-优先级高,*、/、%同优先级,+、-同优先级 算术运算符具有左结合性 与赋值运算符和类型强制转换运算符相比,算术运算符的优先级比赋值运算符高,但比类型强制转换运算符低。 (int)2.6 * 2=4 (int) (2.6 * 2) =5,C语言中,任何数据类型的数据都有固定的取值范围。当表达式的值超出了取值范围时,就会丢失数据,这种现象称为数据溢出。下面的例子程序说明了这一点: (P44 例3.3),自动类型转换的规则与强制类型转换符(P59-61)自动类型转换:当=左右两边的数据类型不同时,C语言首先将=右边的表达式的值转化为=左边的

17、数据类型,然后再赋值给=左边的变量,这种操作称为自动类型转换。比如,如果a是int型变量,表达式a=3.2的值将是3,而不是3.2。 C语言进行自动类型转换的规则如下: (1)当将长整型数据转换为整型数据时,直接截取长整型数据的低16位作为整型数据。当将整型数据转换为字符型数据时,直接截取整型数据的低8位作为字符型数据。(长短,截取低位) 例如: long a=0xff00f00f; int b; char c; b=a;/b的值将是0xf00f,是a的低16位 c=b;/c的值将是0x0f,是b的低8位,(2)当将无符号字符型数据转换为整型数据时,直接将字符数据作为整型数据的低8位,整型数据

18、的高8位补零;当将无符号整型数据转换为长整型数据时,直接将整型数据作为长整型数据的低16位,高16位补零。例如: unsigned char ch=0xfa; unsigned int u=0xff00; int k; long L; k=ch;/k的值将是0x00fa L=u;/L的值将是0x0000ff00,若long b=65536;(216) int a; a=b; 则 b=? (b=0),(3)当将有符号字符型数据转换为整型数据时,直接将字符数据作为整型数据的低8位,将字符数据的符号位的值扩展到整型数据的高8位,即如果字符型数据的符号位是1,整型数据的高8位就都补1,否则都补零,这称

19、为符号位扩展; 当将有符号的整型数据转换为长整型数据时,直接将整型数据作为长整型数据的低16位,将整型数据的符号位扩展到长整型数据的高16位中。例如: char ch=0x0a; int a,k=0xf011; long L; a=ch; /a的值将是0x000a L=k; /L的值将是0xfffff011,2,错误,4,1.5,作业: P65 6,7,9,10,+的作用是使变量自己增1,而-的作用是使变量自己减1。 +、-的优先级与负号运算符的优先级相同。+a : 先将a自增1后,再用a的值;a+ : 要先用a的值,再将a自增1。-运算符也是一样。例如,已知a=20;表达式b=+a的值是21

20、,而b=a+的值却是20;表达式b=-a的值是19,而b=a-的值却是20。,自增自减运算符和负号运算符,又如: k=3; a=15-k+; printf(“a=%d ”,a); printf(“k=%dn”,k); b=+k+2; printf(“b=%d ”,b); printf(“k=%dn”,k);,将输出: a=12 k=4 b=7 k=5,注意: +和-运算符只能用于变量,不能用于常量和表达式。因为,+和-蕴含着赋值操作。 负号运算符、+、-和强制类型转换运算符这些同级别运算符连用时,按照从右向左的顺序计算,即右结合性。 两个+和-之间不能有空格。,57 157 98 未知,58

21、156 98 未知,语法错,58 156 99 99,main() int i=5; printf(“%dn”,i); printf(“%dn”,-i); printf(“%dn”,i+); printf(“%dn”,i-);printf(“%dn”,+i); printf(“%dn”,i);,连续使用+、-:(i=5) k=(+i)+(+i)+(+i)=24 (i=8) k=(i+)+(i+)+(i+)=15 (i=8) i+j=(i+)+j +的左结合性 (i=5) printf(“%d,%dn”,i,i+); 求值顺序:自右向左 6, 5 (i=6),9-赋值运算符和赋值表达式,赋值运算

22、符:= 运算符目数:双目运算符a = b 待赋值的变量 要赋的值(可以是常量、变量或表达式) 用=连接起来的式子称为赋值表达式。 赋值表达式加上分号就构成了赋值语句。,赋值运算符和赋值表达式 C语言允许在一个表达式中对多个变量连续赋值,例如:a=b=c=22。连续赋值的表达式的运算顺序是从右向左(又称为右结合性),因为=右边的表达式未求值之前,无法对=左边的变量赋值。,注意:=左边不能是表达式,因为表达式不对应内存单元。下面的赋值表达式是非法的: (3+a)=22 a=b+2=10,80 未知 未知 未知,80 80 未知 未知,70 80 未知 未知,80 80 80 未知,80 80 80

23、 80,复合的赋值运算符,C语言除了提供了一个赋值运算符=以外,还提供了各种复合赋值运算符。 将算术运算符、位运算符与赋值运算符组合在一起就构成了复合赋值运算符。 复合赋值运算既包含了算术运算或位运算,又包含了赋值操作。 复合赋值运算符与赋值运算符是同一个优先级。,a=12 a+=a-=a*a : 自右向左1 a=a-a*a=12-12*12=-1322 a+=(a=-132) 即a=a+(a=-132)= -264,10-逗号运算符和逗号表达式,一种特殊的运算符:用逗号连接起来的表达式称为逗号表达式。逗号表达式的一般形式是: 表达式1,表达式2,.,表达式k 比如:a+3,b=3,b+ 逗号运算符的优先级是最低的,并且具有左结合性。 逗号表达式的求值顺序是,从左向右依次计算用逗号分隔的各表达式的值,最后一个表达式的值就是整个逗号表达式的值。 比如 表达式a=3,b=a+3,b+的表达式的值是6 表达式a=3,b=a+3,+b的表达式的值是7,

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

当前位置:首页 > 教学课件 > 大学教育

copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1