C语言第2章C语言的基本数据类型与表达式.ppt

上传人:牧羊曲112 文档编号:6504227 上传时间:2023-11-07 格式:PPT 页数:55 大小:834KB
返回 下载 相关 举报
C语言第2章C语言的基本数据类型与表达式.ppt_第1页
第1页 / 共55页
C语言第2章C语言的基本数据类型与表达式.ppt_第2页
第2页 / 共55页
C语言第2章C语言的基本数据类型与表达式.ppt_第3页
第3页 / 共55页
C语言第2章C语言的基本数据类型与表达式.ppt_第4页
第4页 / 共55页
C语言第2章C语言的基本数据类型与表达式.ppt_第5页
第5页 / 共55页
点击查看更多>>
资源描述

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

1、第 2 章 C语言的基本数据类型与表达式,2.1 C语言的基本数据类型 2.2 常量与变量 2.3 运算符与表达式 2.4 数据类型转换,教学目的和基本要求:,要求学生清楚数据类型与变量、常量的关系,掌握各种常量的性质和定义,掌握表达式中各种运算符的功能和特点,明白产生副作用的原因,了解数据类型的相互转换规则。,教学重点:,数据类型、常量定义,运算符与表达式。,存取数据必须先确定数据的编码方式、存储格式和所占的存储长度,C语言中把这三者结合起来,给出几种固定的形式,这些形式就是最基本的数据类型。,2.1 C语言的基本数据类型,为什么要设置数据类型?,在计算机中使用一定长度的存储单元(通常是字节

2、的倍数)来存储数据。,存储的编码方式有:原码、反码、补码、ASCII码 存储的存储格式有:定点型、浮点型,其中,用于存储数据的存储单元的长度决定了数据取值范围的大小。,例如:,【例2.1】计算圆的面积,半径为 5 cm。程序如下:,main()float r,area;r=5;area=3.14*r*r;printf(%fn,area);,运算结果是输出圆的面积:78.500000,程序中用到的数据:r、area、5、3.14对数据进行的运算:*、=,例jc2_1,分析:,计算机操作处理时,要完成以下工作:在内存中给半径 r 和运算结果 area 开辟存储空间,存放它们的值。应该留多大的地方来

3、存放它们的值?数据 5 和 3.14 与 r、area 不同,它们是在编写程序时就给出确定的值,在运算过程中不会改变。这样的数计算机怎么处理?对整数 5 和小数3.14,计算机存放时是否有区别?,涉及数据类型的基本知识,字符型(char)整型(int,short,long,unsigned,long long)单精度型(float)实型 双精度型(double)长双精度(long long_comple)枚举类型(enum)数组类型()构造类型 结构体类型(struct)共用体类型(union)指针类型(*)空类型(void),一、数据类型概述,本章讨论基本类型数据,变量:指以标识符为名字,其

4、值可以改变的量。,在学习各种数据类型之前,我们先简单了解一下常量和变量的概念。后面的章节中将会详细介绍。,常量:指在程序运行中,其数值不能被改变的量。,变量 代表计算机内存中的某一存储空间,变量的类型决定了该存储空间的长度和其中存放数据的编码方式及存储格式。变量的类型也决定了该存储空间中存放数据的数据形式和取值范围。,*八进制的数码范围为07;018*十六进制的数码除了数字09外,还使用英文字母a f(或A F)表示1015。如:0 x1e*整型数据均以二进制补码形式存储,注意!,二、整型(采用定点整数的存储格式,只能表示纯整数),1、整型常量:,(1)十进制形式:与数学上的整数表示相同;例如

5、:12,-100,0(2)八进制形式:在数码前加数字0;例如:012=1*81+2*80=10(十进制)(3)十六进制形式:在数码前加0X(数字0和字母X)。例如:0 x12=1*161+2*160=18(十进制),问题:为什么要采用补码?如何表示?,计算机中正、负数的表示,例如:109(1101101)2要区别:109 和 109 方法是:将符号也数码化即:正的符号 用 0 表示 负的符号 用 1 表示,计算机中的数表示方法是:符号位二进制数值(以 8bit 为例)109 110 1101 0110 1101109 110 1101 1110 1101,问题:计算机计算复杂化,例如计算:(-

6、19)+(+22)1001 0011+0001 0110,解决的方法是:使用反码或补码的表示方法(按前述表示的编码称为原码),即能将减法一律转换为加法。,需要判断符号是否相同:如果相同,结果符号不变,并进行绝对值相加如果不同,结果取绝对值大的数的符号,并进行绝对值相减,原码、反码和补码,正数:原码、反码、补码相同符号位为0,数值为对应的二进制数。109,01101101原=01101101反=01101101补负数:原码符号位为1,数值为绝对值的二进制数。10911101101原反码符号位为1,数值为绝对值的二进制数各位变反。10910010010反 补码符号位为1,数值为绝对值的二进制数各位

7、变反加1。10910010011补,2、整型变量的分类:,根据数据所占的存储长度的不同分为:int、short、long、long long;同样存储长度的数据又分unsigned、signed;故可组合出八种类型(参考课本P46)。,3、整型变量的值域:,由机器中数据的存储长度决定,思考:int a=20000,b=20000,c;c=a+b;c的值为多少?如果c定义为long型是否能解决问题?,注意:C标准没有具体规定各种数据类型占用存储单元的长度,在不同的编译系统中规定不尽相同,如在VC6.0中short为2B,int和long都为四个字节,注意,三、实型,1、常量:(1)十进制小数形式

8、:由数字和小数点组成;例如:3.4,4.,.3。(2)指数形式:“十进制小数”+“e(或E)”+“十进制数整数”。例如:12.5e-6 表示12.510-6。,小数点不能单独出现;0.0.e或E的两边必须有数,且其后面必须为整数;如:6E0.2 e5,实型数据的类型 单精度实型数据 float,分配4 Byte双精度实型数据double,分配 8 Byte实型数据的存储,单精度实型,指数部分31 30(8位)23 63 62(11位)52,小数部分22 051 0,小数的符号位,隐藏“1”,2、实型变量的分类及值域:,实型数据的类型及规定,C标准并未具体规定各种实型数据所占字节数,也不规定具体

9、小数和指数部分的位数。一般而言,小数部分位数多,数据表示的有效数字多,精度就高;而指数部分位数多,则表示的数据范围更大。(参照课本P51说明),有效数字的意义?,字符形式 功能 n 换行 t 横向跳格 b 退格 r 回车 反斜杠字符 单引号字符 ddd 8进制数表示的ASCII码对应的字符 xhh 16进制数表示的ASCII码对应的字符,四、字符类型,1、常量:(1)用单引号括起来的一个字符;如:A、1、?等。(2)用单引号括起来的由反斜杠()引导的转义字符。,4、字符串常量:是用一对双引号括起来的字符序列。注意:每个字符串的后面都有一个0结束符。如:“SHANGHAI”,“AbcdeFGHi

10、jk”,“How are you”。,注意,a与“a”的区别。,例如:字符A的ASCII码为:65D(十进制)=41H(十六进制)=101Q(八进制)字符A可以表示为A、x41、101。,2、字符型变量的分类:char 和 unsigned char;,3、值域(字符型可参与数学运算,也可看成一种一字节的整型变量)每个字符型数据在内存中占一个字节;包括ASCII字符表中的所有字符(可显示字符和非显示字符)。,一、常量、符号常量及常变量 常量是指在程序运行中,其数值不能被改变的量。常量又可分为直接常量和符号常量。,2.2 常量与变量,120、-100、0;0120、072;0 xFFFF、0 x

11、1e、0X28AF,0XED4;120L,200L;长整型常量 3.14、-3.1、5.12E-6;a、#、n、101;099、12f、0 xg、48EA;019.5、1e-08;实型常量只能用十进制形式表示 2.1E10.2、E-6、6.4E+4.8、E9;changsha、+?ab;、p、ab;,1、直接常量:是在程序中直接引用的数据。,请判断这些常量正确与否:,定义形式:#define 标识符 常量数据 例如:#define PI 3.14159 在程序预处理时,凡是出现标识符PI的地方都将用数据3.14159来替换。如:2*2.3*PI 就等价于 2*2.3*3.14159。,变量是指

12、以标识符为名字,其值可以改变的量。变量代表计算机内存中的某一存储空间,该存储空间 中存放的数据就是变量的值。在同一程序块中,变量不能被重复定义。使用变量时必须“先定义,后使用”。,2、符号常量 是用标识符来表示一个数据;在程序不能给它赋值。,二、变量,3、常变量(C99中使用)const int a=3;,注意符号常量和常变量的区别(课本P42),注意,int a=5,b=3;int a=b=c=3;int a,b,c;a=b=c=3;,例如:int a,b,c;float x,y;char c1,c2;或 int c1,c2;定义变量就是在内存中划出一块相应类型的存储空间存放该变量的值。,m

13、ain()int x,y,z,w;/*定义x,y,z,w为整型变量*/unsigned int k;/*定义k为无符号整型变量*/x=10;y=-20;k=30;z=x+k;w=y+k;printf(“x+k=%d,y+k=%dn”,z,w);,例2-2:,程序运行结果为:x+k=40,y+k=10,变量根据作用域的不同可分为局部变量和全局变量,根据存储方式的不同可分为静态存储变量和动态存储变量,这些我们将在第六章中详细介绍。,2.3 运算符和表达式,主要内容:算术运算符和算术表达式赋值运算符和赋值表达式关系运算符和关系表达式逻辑运算符和逻辑表达式位运算符和位运算表达式条件运算符和条件表达式逗

14、号运算符和逗号表达式其他运算符及其运算,运算符的有关概念,作用:对运算对象完成规定的操作运算类型:按运算对象分:单目、双目、三目按功能分:算术、赋值、关系、逻辑条件、逗号、位、其他,运算符的优先级和结合性,优先级指各种运算符号的运算优先顺序例如:算术运算优先于关系运算 算术运算中先*/后+-,结合性指运算符号和运算对象的结合方向分为:从左向右(左结合)和从右向左(右结合)例如:算术运算符为左结合 a-b+4 赋值运算符为右结合 a=b=5(C语言规定见教材 附录C),本章涉及的运算符,+-*/%+-+-=+=-=*=/=%=&=|=?:,&sizeof(数据类型标识符),表达式的有关概念,什么

15、是表达式由运算符将运算对象连接成的式子,它描述了一个具体的求值运算过程。计算表达式的值按照运算符的运算规则求值求值时注意运算符的优先级和结合性表达式值的类型自动转换强制转换,例如:,表达式:150+b*212.456 b=(+a)-2a/=a*=(a=2)f=abc-a|+b&c+max=ab?a:b a=3,a+=3,a*a 1/(float)a+6,%(取余)(注意:取余运算的操作数只能是整数,且结 果的符号与前一操作数的符号相同),一、算术运算符和算术表达式,1、运算符+(加):3+4、+3-(减):3-5、-5*(乘):3*5/(除):5/2、5.0/2(注意,此二种形式,结果不同),

16、5%3的值为2;-5%3的值为-2;5%(-3)的值为2;-5%(-3)的值为-2;12.3%3 若a%b 的结果为0,则有a能被b整除,2、算术表达式 用算术运算符和括符将操作数连接起来的式子。优先级:()*、/、%+、-结合性:从左至右;表达式的值:数值型(int、long、unsigned、float、double);,例如:已知:float a=2.0;int b=6,c=3;求解:a*b/c-1.5+a+fabs(-5)=?,float a=2.0;int b=6,c=3;a*b/c-1.5+a+fabs(-5),12.0/3,5,4.0-1.5,2.5+97(int),99.5+5

17、,104.5(double),思考 int a=1,b=2;表达式a/b+3的结果是多少?int a=10000,b=30000;表达式a+b的结果是多少?如何修改?,3、自增自减运算,+-是单目运算符有前缀和后缀两种形式 前缀形式:先自增(自减)再引用;后缀形式:先引用再自增(自减);功能:前缀形式+a 等价于 a=a+1-a 等价于 a=a 1 后缀形式 a+等价于 a=a+1 a-等价于 a=a 1,表达式的值会不同,例如当 a5 时+a 表达式的值为 6,且 a6 a+表达式的值为5,且 a6 b=+a 等价于 a=a+1;b=a 表达式的值为6,且 a=6,b=6 b=a+等价于 b

18、=a;a=a+1 表达式的值为5,且 a=6,b=5,说明:,+和-的运算对象只能是变量(或运算结果是变量的表达式),不能是常量(或运算结果是数值的表达式)。例如:5+、(a+2)+不合法。具有右结合性,结合方向为从右到左。例如:a+等价于-(a+)如果有多个运算符连续出现时,C系统尽可能多的从左到右将字符组合成一个运算符例如:i+j 等价于(i+)+j-i+-j 等价于-(i+)+(-j),main()int a=5;printf(%d%dn,a,a+);,说明(续):,对函数参数的求值顺序:Turbo C系统先计算最右边的参数值,再依次计算左面的参数值。,【例2.3】有多个函数参数且为同一

19、变量自增的运算处理。,输出结果:6 5,运行例2.3,说明(续):,【例2.4】有多个函数参数且为同一变量多次自增的运算处理。,main()int a=5;printf(%d%dn,a,(a+)+(a+);,输出结果:7 11,运行例2.4,特殊的:设i=3,j=4,k=i+j,k=i=j=,再看几个例子:如:设i=3,k=(i+)+(i+)+(i+)k=i=,9,6,如:设a=3,b=(a+)+(a+)b=a=,6,5,设a=3,b=(+a)+(a+)b=a=,8,5,设a=3,b=(a+)+(+a)b=a=,7,5,设a=3,b=(+a)+(+a)b=a=,10,5,7,4,4,main(

20、)int a=5,b,c,k;k=a+(b=a+)+(c=a+);printf(%d%d%d%dn,a,b,c,k);,main()int a=5,b,c;printf(%d%d%d%dn,a,b,c,a+(b=a+)+(c=a+);,思考!,1、6种关系运算符:=!=2、关系表达式:用关系运算符将表达式连接起来的式子 优先级:(=)(=!=)结合性:自左至右;表达式的值:若为真,则结果为1;若为假,则结果为0。,35 值为:32 值为:设x=-2;-3x-1 值为:设x=1;2x4 值为:,例如,二、关系运算符和关系表达式,求如下关系表达式的值:,0,0,0,1,算术运算符优先级高于关系运算

21、符3+(43)*4 值为:3+43*4 值为,3,1,注意,不能用数学里习惯的关系运算符连用表示区间关系!,2、逻辑表达式:用逻辑运算符将表达式连接起来的式子 优先级:!&|结合性:自左至右;表达式的值:若为真,则结果为1;若为假,则结果为0。,三、逻辑运算符和逻辑表达式,1、3种逻辑运算符:&|!,参与逻辑运算的操作数叫逻辑量。,逻辑量可以是整型、实型、字符型和指针类型,其中,0,0.0,0,NULL代表假,其余逻辑量代表真。,int a=5;float b=3.5;!a()!(a 0)()(a 0)(),例如,0,1,1,0,0,0,1,1,0,0,0,1,例如表达式运算如下:,混合优先级

22、:!高 算术运算符 关系运算符&和|赋值运算符 低,4-0,1&2,8 4,1,0,1,5 3&2|8 4-!5,运算按照从左至右的顺序进行,一旦能够确定逻辑表达式的值,就立即结束运算逻辑运算的短路性质例如设:a=1,b=0,c=-2a&b&c,(a+)|+b&-c,为 0,运算终止,表达式值为 0,为非0,运算终止,表达式值为 1且a为2,b为0,c为-2(b,c保持原值),例如:(1)a=0;b=1;c=a+执行后:a为,b为,c为。,1,1,0,(2)a=1;b=1;c=0;d=-a b-(c=b+3);执行后:a为,b为,c为,d为。,0,0,0,1,例如:(1)n是小于m的偶数:(2

23、)year是闰年:(能被4整除但不能被100整除,或能被400整除),逻辑表达式一般用于控制语句中的条件:,n m&n%2=0,year%4=0&year%100!=0|year%400=0,例如:(1)x=(y=12)/4(2)x=y=12/4(3)x=(y=12/4)(4)(x=y)=12/4,四、赋值运算符和赋值表达式,1、赋值运算符=(执行功能:把=右边的表达式的值,存入=左边的变量对应的存储空间,即给此变量赋值)3=2+1 a=a+2,2、赋值表达式:用赋值运算符将变量和表达式连接起来的式子 形式:=求值规则:将“=”右边表达式的值赋给左边的变量。优先级:!算术关系&|赋值 结合性:

24、自右至左;表达式的值:被赋值变量的值。,y值为12,x值为3,表达式的值为3,y值为3,x值为3,表达式的值为3,y值为3,x值为3,表达式的值为3,练习:设a=12,计算表达式a+=a-=a*12和a+=a-=a*=12的值,3、复合赋值运算符*=、/=、%=、+=、-=,=,&=、=、=复合运算符是一个运算符,但功能上,是两个运算符功能的组合。,例如:a+=b 相当于 a=a+b a*=b 相当于 a=a*b,注意:a*=b+c 相当于 a=a*(b+c)而不是 a=a*b+c,优先级:与=是同一优先级。结合性:自右至左;表达式的值:被赋值变量的值。,-264,0,求值规则:先求解表达式1

25、的值 若为真(非0),求解表达式2,并把表达式2的值 作为整个条件表达式的值 若为假(0),求解表达式3,并把表达式3的值作 为整个条件表达式的值,四、其它运算符,1、条件运算符?和:,它们与三个操作数组组成三元运算。形式为:?:,优先级:逻辑条件赋值,结合性:自右至左;,2、逗号运算符:,形式:表达式1,表达式2,表达式n 求值规则:从左至右依次计算各表达式的值;优先级:最低;结合性:自左至右;表达式的值:最后一个表达式的值。,又如:y=x10?x/10:x0?x:-x 当x的值为整型的15时,表达式的结果为:当x的值为整型的5时,表达式的结果为:,1,5,例如:int max,a=5,b=

26、3;max=ab?a:b 求max的值,max的值为5,例如:a b y 表达式 y=a=4,b=5,a+b;y=(a=4,b=5,a+b);y=(a=4,b=5),a+b;y=a=(4,b=5),a+b;,4,5,4,9,4,5,9,9,4,5,9,5,5,5,5,10,形式有两种:sizeof 变量名 sizeof(类型名)结果为整型数。,int a;float x;printf(“%d,%d”,sizeof a,sizeof x);printf(“%d,%d”,sizeof(int),sizeof(float);以上两个printf语句结果均为。,例如,3、求字节运算符:sizeof 作

27、用:求得变量或某种数据类型所需的字节数。,2,4,C语言允许整型、实型、字符型数据进行混合运算。有3种转换方式:自动转换、赋值转换和强制转换。一、类型自动转换,2.4 数据类型转换,特点:由数值存储位数少的向多的转换;整型向实型转换!操作数为相同类型的不转换,仍取原类型,特别注意此时可能带来的错误!,int x=2;float y=1.6;char c=A;则:c+1/x*y=,例如,char c=68.5;printf(“%c”,c);,65(int)+0(int)*1.6(float),65(float),二、赋值转换 在赋值时将赋值符右边值的类型转换成与其左边变量类型一致的类型。,有下列

28、几种情况:(1)实型 整型(字符型):去掉小数部分;,(2)整型(字符型)实型:补足有效位;,float f=23;23.00000 f(7位)double f=A;65.0000000000000 f(15位),(3)对char、int、short、long、unsigned型数据:赋值符右边数据(a位)赋值符左边的变量(b位)若 a=b ab,ab,原样照赋;,截断高a-b位,送低b 位;,有符号数据 有符号变量:符号扩展;,其他情况:高b-a位全补0。,符号扩展:符号位为0,剩余的高位补0;符号位为1,剩余的高位补1。,例如:int a=2,b=5;float x=4.4;则有:表达式 结果 b/a(float)b/a(float)(b/a)(int)x%a+x(int)x%(a+x),三、强制类型转换 形式:(类型名)表达式 强制类型转换时,得到所需类型的中间变量,原来变量的类型不会改变。,2,2.5,2.0,4.4,本章结束,再见!,同学们:,

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号