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

上传人:本田雅阁 文档编号:3426460 上传时间:2019-08-24 格式:PPT 页数:97 大小:856.04KB
返回 下载 相关 举报
第3章数据类型、运算符、表达式.ppt_第1页
第1页 / 共97页
第3章数据类型、运算符、表达式.ppt_第2页
第2页 / 共97页
第3章数据类型、运算符、表达式.ppt_第3页
第3页 / 共97页
第3章数据类型、运算符、表达式.ppt_第4页
第4页 / 共97页
第3章数据类型、运算符、表达式.ppt_第5页
第5页 / 共97页
点击查看更多>>
资源描述

《第3章数据类型、运算符、表达式.ppt》由会员分享,可在线阅读,更多相关《第3章数据类型、运算符、表达式.ppt(97页珍藏版)》请在三一文库上搜索。

1、第三章 数据类型、运算符、表达式,数据类型分类,数据类型,基本类型,整型,实型,字符型,枚举类型,双精度,单精度,构造类型,指针类型,空类型,数组类型,共同体类型,结构体类型,常量,常量: 在程序运行过程中,其值不能被改变的量。 习惯上,符号常量名用大写,变量用小写,以示区别,符号常量: 代表常量的标识符(符号) 符号常量在程序开头定义,并且在程序中不可以改变值。 只可以在定义处修改,并且所有要替代处都做出相应的修改。 习惯上符号常量用大写字符。,例:求园面积,#define PI 3.14 main() float r,s; r=2; s=PI*r*r; printf(“s=%f“,s);

2、,EXP0301.C,变量,变量:在程序运行过程中,其值可以被改变的量。 变量在内存中占据一定的存储单元。 变量类型决定存储单元的大小。 变量名表示存储单元的值(该值在程序运行过程中可能随时变化)。,i,int i; i=9;,?,9,int a,b,c; a=123; b=456; c=a+b;,123,456,579,标识符,变量用标识符表示,即变量的名字。 标识符的要求: 以字母、数字、下划线组成 且第一个字符必须为字母或下划线 一般长度取8个字符(建议,不同系统) 关键字不能作为标示符,合法&不合法标识符,sum $123 int class day #33 month 3D64 st

3、udent_name main _above ab lotus_1_23 basic M.D.Jhon, int_a average _123,合法&不合法标识符,sum $123 int class day #33 month 3D64 student_name main _above ab lotus_1_23 basic M.D.Jhon int_a average _123,对所有要使用的变量必须定义,每一变量属于一个类型。 int a; float a;,大写字母和小写字母被认为是两个不同的字符。 int sum,SUM; 习惯上,变量名用小写字母表示 符号常量习惯上用大写字母标识。

4、,程序设计中变量的命名: 必须满足C语言的语法规定。 应该“见其名,知其意”,容易理解,方便阅读程序。 int sum; float average,area;,一定要“先定义、后使用“!,编译程序不能翻译未定义变量。 没有开辟空间,把数据放到哪里去? 编译程序在编译时根据变量类型确定存储单元的数量。 不同类型的变量占据的内存单元大小不同。,编译程序在编译时要根据变量类型进行语法检查。 例,整型变量a、b可以进行“求余”运算a%b 若把a、b定义为实型变量,则上述运算非法。,常量类型与变量类型比较,常量:整型、实型、字符型、字符串型 变量:整型、实型、字符型 没有字符串型变量,字符串由字符型数

5、组来存放!,整型数据,整型常量: 10进制数 8进制数(以0开头、0-7) 16进制数(以0x开头、0-f),能够进行各类数据的转换(含2进制),数制转换,2进制到10进制,20+24+26+27+29+212+214= 1+16+64+128+512+4096+16384= 21201,10进制转换为2进制,(20484096),0,0,0,0,1,1,1,0,1,0,1,1,0,0,0,1,2进制转换为8进制,6,2,7,3,5,1,0153726,2进制转换为16进制,6,D,7,D,0xD7D6,8进制转换为2进制,0153726,16进制转换为2进制,0xD7D6,8进制转换为10进

6、制,0123,3*80+2*81+1*82= 3*1+2*8+1*64= 83,10进制转换为8进制,(64512),1,2,3,0123,10进制转换成8进制也可以先转换成2进制,再转换成8进制 10进制与16进制的转换与8进制类似 16进制与8进制之间的转换略,整型变量分类,有符号,无符号,(有符号)基本整型 int,(有符号)短整型 short,(有符号)长整型 long,无符号基本整型 unsigned int,无符号长整型 unsigned long,无符号短整型 unsigned short,整型变量,整型变量在内存的存储形式,整型变量在内存中是以二进制数形式存在的 不同类型的整型

7、变量分别占据2或4个字节。 数制以补码形式表示(正数负数都是),正数补码就是其本身 负数补码:绝对值二进制按位求反加1得到 第一位为符号位(有符号时) 0表示正数、1表示负数,int a=9;,+1,int a=-9;内存中如何存储?,整型变量分类及参数,基本整型能表示的范围?,unsigned int a; a能表示多少的范围? 2字节16位二进制数 最大1111111111111111 最小0000000000000000 0到65535(216-1),基本整型能表示的范围?,int a; a能表示多少的范围? 最高位表示符号 最大0111111111111111 32767(215-1)

8、 最小1000000000000000 ?,int a; a的值是多少?,-1,按位求反,6,添负号,-6,求负数补码 负数绝对值(添负号) 按位求反 +1,负数补码转换成十进制 (上面的逆过程)?,int a; a的值是多少?,-1,按位求反,32768,添负号,-32768,基本整型能表示的范围?,int a; a能表示多少的范围? 最高位表示符号 最大0111111111111111 32767(215-1) 最小1000000000000000 ?,-32768,整型变量的定义,int a,b; unsigned short c,d; long e,f; unsigned g; 要在函

9、数的开头部分定义(声明)变量。,整型常量的类型,1、整型常量的值在-32768+32767范围内,编译器认为是int类型。 2、整型常量的值超过上述范围,而在 -214748648+214748647范围内,编译器认为是long类型。,3、在整型常量的值后面家字母L(l),则告诉编译器,把该整数常量作为long类型处理。 例:123L、0L 常量没有unsigned类型。,实型数据,实型常量 实数(real)又称为浮点数(float),表达方式: 小数表示: 0.123 、 .123 、 123.0 、 123. 、 0.0 (必须有小数点) 指数表示: 123e3 或 123E3 、123E

10、-2,实型数据内存存储方式,实型变量类型及参数,实型变量的定义,float x,y; /* 指定x、y为单精度实型变量 */ double z; /* 指定z为双精度实型变量 */,实型常量不分float型和double型。 一个实型常量可以赋给一个float型或double型变量。 根据变量的类型截取实型常量中相应的有效位数字。,float a; double b; a=12345.6789; b=12345.6789; 单精度a只能接收7位 双精度b能接收9位,作业: P65 3.3 (计算各种数制,除二进制外不算补码) 3.4 (除了char型),字符型数据,字符常量: 单引号括起来的一

11、个字符 如:a、x、D、?、$。 注意:a和A是不同的字符常量。(区分大小写),如何表示字符 , “开头的字符序列称为“转义序列“ “使其后字符变为另外的意义,转义字符,n t b r,换行 横向跳格 退格 回车,如何表示 & “ & , “ ,有没有另外一种方法实现?,输出是什么样的?,例: main() printf(“abctderftgn“);,制表区1,制表区2,f,g,字符变量,字符变量用来存放字符常量 定义形式及赋值: char c1,c2; c1=d; c2=a; 字符常量用单引号括起来,字符数据在内存中的存储形式及其使用方法,一个字符变量在内存中占一个字节 将一个字符常量放到

12、一个字符变量中 是把该字符的ASCII码放到存储单元中 例,a的ASCII码为97,字符以ASCII码存储,其存储方式与整数类似。 C语言允许字符和整数之间进行运算。 字符型变量和整型变量某些情况可互用 P374 附录I (常用字符与ACSII代码表),输出如何?,main() char a,b; a=A; b=65; printf(“a: %c %dn“,a,a); printf(“b: %c %dn“,b,b); ,EXP0302.C,a: A 65 b: A 65,输出如何?,main() int a,b; a=A; b=65; printf(“a: %c %dn“,a,a); prin

13、tf(“b: %c %dn“,b,b); ,EXP0303.C,a: A 65 b: A 65,输出如何?,main() int a; char b; a=A+15; b=D+32; printf(“a: %c %dn“,a,a); printf(“b: %c %dn“,b,b); ,EXP0304.C,a: P 80 b: d 100,如何输出 & “ & ,main() char a,b,c; a=39; b= “ ; c=92; printf(“a: %c %dn“,a,a); printf(“b: %c %dn“,b,b); printf(“c: %c %dn“,c,c); ,EXP0

14、305.C,a: 39 b: “ 34 b: 92,输出如何?,main() char c1,c2,c3,c4,c5,c6; c1=65; c2=32; c3=97; c4=10; c5=48; c6=1; printf(“%c%c%c%c%c%c“, c1,c2,c3,c4,c5,c6); ,EXP0306.C,Aa 0,输出如何?,main() printf(“101x20141x0a060x01“); printf(“nn“); ,EXP0307.C,Aa 0,字符串常量,字符常量:单引号括起来的一个字符。 字符串常量:双引号括起来的字符序列 “How do you do.“ “CHIN

15、A“ “$123.45“ “a“ ( a ? ),字符串常量在内存中的存放,字符串常量在内存中的存放: 每一个字符均以其ASCII码存放 最后添加一个“空字符“ 即“0“ 字符串常量“CHINA“存放在内存中的情况是:,C,H,I,N,A,0,注意:字符变量中只能存放一个字符,不能存放字符串! char c; c = a; /* 字符a */ c = “a“; /* 字符串“a“*/,变量赋初值,在定义变量的同时指定其初值 例: int a = 3; float f = 3.56; char c = a; int a, b, c = 5;,注意:多个变量指定相同的初值时 定义a,b,c三个整型

16、变量均赋初值为3: int a = 3, b = 3, c = 3; int a = b = c = 3;,可是在付值时允许: int a,b,c; a=b=c=3;,各类数值型数据间的混合运算,整型、实型(包括单、双精度)、字符型数据可以混合运算。 例:10 + a + 1.5 - 8765.1234 * b 混合运算时,先转换成同一种类型,然后进行运算。,转换规则,例:10+a+i*f-d/e (int i; float f; double d; long e;),C运算符简介,1算术运算符 (+ - * / 等) 2关系运算符 ( = & | ) 5赋值运算符 (= 等) 6条件运算符

17、(? :) 7逗号运算符 (,),8 指针运算符 (*、&) 9 求字节数运算符 (sizeof) 10强制类型转换运算符 (类型) 11分量运算符 ( ) 12下标运算符 ( ) 13其它 (函数调用运算符(),算术运算符、算术表达式,基本运算符:+ - * / % 运算方法与数学运算基本一致 * / % 运算优先级一样,从左向有右计算。,3*5 15 3/5 0 两个整型变量,运算后结果为整型变量,17/10/3 0 17%10%3 1,17/10%3 1 17%10/3 2,强制类型转换运算符,运算符两侧的数据类型不同时,先自动进行类型转换,再运算。但是程序员可以强制进行某种转换。 强制

18、类型转换的一般形式是: (类型名)(表达式),(double)a; /* 将a的值转换为double类型 */ (int)(x+y); /* 将x+y的值转换为int类型 */ (float)(5%3); /* 将5%3的值转换为float类型 */,(int)(x+y); (int)x+y; (int)(x); (int)x; int(x); 说明:强制类型转换时,得到一个所需类型的中间变量,原来变量的类型不发生变化。,17/10/3 (float)17/10/3 (float)(17/10)/3 0 0.567 0.333,自增、自减运算符,自增:使变量的值加1 自减:使变量的值减1 +i

19、; /* 在使用i之前使i加1 */ -i; /* 在使用i之前使i减1 */ i+; /* 在使用i之后使i加1 */ i-; /* 在使用i之后使i减1 */,i = 3;j=+i; /*先使i加1,再赋给j,执行后j=4, i=4*/ i = 3;j=i+; /*先把i赋给j,再使i加1,执行后j=3,i=4*/ i=3; printf(“%d”,+i);printf(“%d”,i+);,注意: +和-只能用于变量,不能用于常量和表达式。 5+; (a+b)+; #define ONE 1; ONE+;,+和-的结合方向为“右结合”。 i=3; printf(“%d”,-i+); -i+

20、(负值运算符-和自增运算符优先级相同) -(i+) (-i)+ 输出是 3 输出后i值为4,有关表达式使用中的问题,表达式中使用+或-易错 i = 3;k = (i+) + (i+) + (i+) i+先使用i,再加1 执行后:k = 3 + 3 + 3 = 9 、i = 6 k = (+i) + (+i) + (+i) +i先加1 ,并且执行了3次,再使用i,执行后:k = 6 + 6 + 6 = 18 、i = 6,出现多个运算符时,编译器在处理时尽可能多的(从左到右)将若干个字符组合成一个运算符 i+j; (i+)+j i+(+j),i = 3; printf(“%d,%d“,i,i+)

21、; Turbo C中,调用函数时,实际参数的处理顺序是从右到左。 先右:i+,先使用i(3),再使i加1。 后左: i (现在值为4) 因此,输出结果:4,3,对于初学者来说,要尽可能的使用意义明确(虽然书写要麻烦一些)的语句,尽量不要将-or +与其他运算符一起使用: 例:j=i+; 可以等效为: j=i; i=i+1;,赋值运算符和赋值表达式,赋值运算符:= 作用:将一个表达式的值赋给变量 例:a = 3 /*常数3赋给变量a,常数是特殊的表达式*/ a = b + c + 1;,复合的赋值运算符,a=3; a+=3-2; a*=2; a/=3;,赋值表达式, 表达式: a = 5 语句:

22、 a = 5; a = (b = 5); /* b的值等于5,表达式b=5的值等于5,因此a的值等于5 */ a = b = 5; /* 与上述表达式的意义相同 */,a = 5 + (c = 6) a = (b = 4) + (c = 6) a = (b = 10) / (c = 2) a += a -= a*a,逗号运算符和逗号表达式,逗号运算符:, 逗号表达式:用逗号运算符把两个表达式连接起来的表达式 其一般形式为:表达式1,表达式2 3+5,6+8 /* 是一个逗号表达式 */ 逗号表达式的值等于“表达式2”的值,b = (a = 3*5,a*4); 逗号运算符在所有运算符中优先级最低 先计算a=3*5,则a=15,在计算a*4,即60,则b=60 x = (a=3,6*3) /* 赋值表达式 */ x = a =3,6*a /* 逗号表达式 */,逗号可以作运算符,也可以作分隔符 printf(“%d,%d,%d“,a,b,c); /* 逗号做分隔符 */ printf(“%d,%d,%d“,(a,b,c),b,c); /* (a,b,c)中的逗号是运算符 其余逗号是分隔符 */,预习试验(上机指导) P245 试验2 试验报告(严格要求&作业) 作业 P66 3.93.12,

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

当前位置:首页 > 其他


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