《C51第四课课件数据描述.ppt》由会员分享,可在线阅读,更多相关《C51第四课课件数据描述.ppt(42页珍藏版)》请在金锄头文库上搜索。
1、你现在所处的位置在:首页C语言教学幻灯片版第二章 数据描述1本章知识点:本章知识点:keil环境安装,补丁,破解使用过程不同类型数据间的转换变量的作用域运算符和表达式第四课 数据类型你现在所处的位置在:首页C语言教学幻灯片版第二章 数据描述2隐式转换什么情况下发生运算转换-不同类型数据混合运算时赋值转换-把一个值赋给与其类型不同的变量时输出转换-输出时转换成指定的输出格式函数调用转换-实参与形参类型不一致时转换运算转换规则:不同类型数据运算时先自动转换成同一类型1.不同类型数据间的转换你现在所处的位置在:首页C语言教学幻灯片版第二章 数据描述3doublefloatlongunsignedin
2、tchar,short低高说明:必定的转换运算对象类型不同时转换 char ch; int i; float f; double d;ch/i + f*d - (f+i)intintdoubledoubledoubledoubledoubledoubleintintdoubledoubledoubledoubledoubledouble10+a +i*f - d/l例2 int i; float f; double d; long l;例1你现在所处的位置在:首页C语言教学幻灯片版第二章 数据描述4一般形式:一般形式:(类型名类型名)(表达式)表达式) 例例: (int)(x+y): (int
3、)(x+y) (int)x+y (int)x+y (double)(3/2) (double)(3/2) (int)3.6 (int)3.6 说明:强制转换得到所需类型的中间变量,原说明:强制转换得到所需类型的中间变量,原变量类型不变变量类型不变 例 main() float x; int i; x=3.6; i=(int)x; printf(“x=%f,i=%d”,x,i); 结果:较高类型向较低类型转换时可能发生精度损失问题显式转换(强制转换)显式转换(强制转换)x=3.600000,i=3你现在所处的位置在:首页C语言教学幻灯片版第二章 数据描述52.2.变量的作用域变量的作用域 int
4、 x=2; int x=3; printf(x=%dn,x); printf(x=%dn,x); 2.1块结构块结构:代码“块”指的是包含在一对大括号中的0行或多行代码序列。在块内可以对变量进行定义,其作用域仅限于块内。x=3x=2你现在所处的位置在:首页C语言教学幻灯片版第二章 数据描述62.2.变量的作用域变量的作用域概述变量是对程序中数据的存储空间的抽象内存.main() int a; a=10; printf(“%d”,a);编译或函数调用时为其分配内存单元1020002001程序中使用变量名对内存操作你现在所处的位置在:首页C语言教学幻灯片版第二章 数据描述72.2.变量的作用域变量
5、的作用域变量的属性数据类型:变量所持有的数据的性质(操作属性)存储属性存储器类型:寄存器、静态存储区、动态存储生存期:变量在某一时刻存在-静态变量与动态变量作用域:变量在某区域内有效-局部变量与全局变量变量的存储类型auto -自动型register-寄存器型static -静态型extern -外部型变量定义格式: 存储类型 数据类型 变量表;概述:变量是对程序中数据的存储空间的抽象如: int sum; auto int a,b,c; register int i; static float x,y;你现在所处的位置在:首页C语言教学幻灯片版第二章 数据描述82.2变量作用域说明:变量作用
6、域说明:变量只能在定义它或说明它的范围内使用,而在该范围之外是不可见的。按作用域的大小可分为程序级、文件级、函数级及复合语句级(块级)。其中程序级的作用域最大,属于程序级作用域的有外部变量,在构成程序的所有文件中都是可见的。属于文件级的作用域的有外部静态变量,外部变量和外部静态变量合称为全局变量或全程变量。属于函数级、复合语句级的变量称为局部变量或内部变量。2.2.变量的作用域变量的作用域你现在所处的位置在:首页C语言教学幻灯片版第二章 数据描述92.3自动型变量(局部变量):自动型变量(局部变量):在函数内部定义的变量称为自动型变量。以关键字“auto”来定义。声明一个局部变量,不加任何修饰
7、的话,它默认为auto,如char ch; = auto char ch;一般省略auto关键字。作用域:作用域:编译器为自动型变量动态分配存储空间。它只存在于块内(由组成一个块)一旦离开该块,变量就消失,不存在。不同的函数内可以定义同样名字的变量。2.2.变量的作用域变量的作用域你现在所处的位置在:首页C语言教学幻灯片版第二章 数据描述10自动型变量特点:自动型变量特点: (1)在一个函数内部定义的变量,只能在函数内部(块内部)使用。在一个函数内部定义的变量,只能在函数内部(块内部)使用。 (2)在主函数内部定义的变量也是局部变量。在主函数内部定义的变量也是局部变量。 (3)形式参数是局部变
8、量。形式参数是局部变量。 (4)局部变量在函数被调用的过程中占有存储单元。局部变量在函数被调用的过程中占有存储单元。 (5)不同函数中可以使用同名变量。在不同的作用域内,可以对变不同函数中可以使用同名变量。在不同的作用域内,可以对变量重新进行定义。量重新进行定义。2.2.变量的作用域变量的作用域你现在所处的位置在:首页C语言教学幻灯片版第二章 数据描述112.4外部型变量:外部型变量:在任何函数外部定义的变量称为外部型变量,它可以被一个程序中所以函数所引用。作用域:作用域:外部变量实际是“全局型”,它的作用域是整个程序。主要用来做函数之间的数据通信。 2.2.变量的作用域变量的作用域你现在所处
9、的位置在:首页C语言教学幻灯片版第二章 数据描述122.2.变量的作用域变量的作用域2.4外部型变量特点外部型变量特点 (1)在函数外部定义,其作用域是变量定义位置至整个程序文件结束。在函数外部定义,其作用域是变量定义位置至整个程序文件结束。 (2)使用外部变量,可增加函数间数据联系的渠道。全局变量可以将数据带使用外部变量,可增加函数间数据联系的渠道。全局变量可以将数据带入在作用域范围内的函数,也可以将数据带回在作用域范围内的其它函数。入在作用域范围内的函数,也可以将数据带回在作用域范围内的其它函数。使用全局变量可让函数带回多个值,但一定要注意全局变量传递数据是数使用全局变量可让函数带回多个值
10、,但一定要注意全局变量传递数据是数据传递的后门。全局变量在程序中任何地方都可以更新,使用全局变量会据传递的后门。全局变量在程序中任何地方都可以更新,使用全局变量会降低程序的安全性。降低程序的安全性。 (3)使用程序中非本程序文件的外部变量,也要对使用的外部变量进行申明使用程序中非本程序文件的外部变量,也要对使用的外部变量进行申明(extern)。)。 (4)局部变量如与外部变量同名,则在局部变量的作用域内,外部变量存在,局部变量如与外部变量同名,则在局部变量的作用域内,外部变量存在,但不可见,外部变量的作用被屏蔽。但不可见,外部变量的作用被屏蔽。 (5)全局变量在程序运行过程中均占用存储单元。
11、全局变量在程序运行过程中均占用存储单元。 (6)在编程时,原则上尽量少用全局变量;能用局部变量,不用全局变量,在编程时,原则上尽量少用全局变量;能用局部变量,不用全局变量,要避免局部变量全局化。要避免局部变量全局化。你现在所处的位置在:首页C语言教学幻灯片版第二章 数据描述132.2.变量的作用域变量的作用域2.5静态变量:静态变量: 静态变量的类型说明符是static。 静态变量是属于静态存储方式,编译器为其分配固定的存储空间。外部变量前由 static加以定义后成为静态外部变量,或称静态全局变量。 对于自动变量,它属于动态存储方式。 但是也可以用static定义它为静态自动变量,或称静态局
12、部变量,从而成为静态存储方式。1. 静态局部变量在局部变量的说明前再加上static说明符就构成静态局部变量。例如:static int a,b;static float array5=1,2,3,4,5; 2.静态全局变量全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。这两者在存储方式上并无不同。一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效。你现在所处的位置在:首页C语言教学幻灯片版第二章 数据描述142.2.变量的作用域变量的作用域静态局部变量具有以下特点:静态局部变量具
13、有以下特点: (1)静态局部变量在函数内定义,但不象自动变量那样,当调用时就存在,退出函数时就消失。静态局部变量始终存在着,也就是说它的生存期为整个源程序。但退出该函数后, 尽管该变量还继续存在,但不能使用它。(2)对基本类型的静态局部变量若在说明时未赋以初值,则系统自动赋予0值。而对自动变量不赋初值,则其值是不定的。当多次调用一个函数且要求在调用之间保留某些变量的值时,可考虑采用静态局部变量。虽然用全局变量也可以达到上述目的,但全局变量有时会造成意外的副作用,因此仍以采用局部静态变量为宜你现在所处的位置在:首页C语言教学幻灯片版第二章 数据描述152.2.变量的作用域变量的作用域静态全局变量
14、具有以下特点:静态全局变量具有以下特点: (1)由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用, 因此可以避免在其它源文件中引起错误。 从以上分析可以看出, 把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域, 限制了它的使用范围。因此static 这个说明符在不同的地方所起的作用是不同的。应予以注意。 你现在所处的位置在:首页C语言教学幻灯片版第二章 数据描述162.2.变量的作用域变量的作用域静态动态存储方式程序整个运行期间函数调用开始至结束生存期编译时赋初值,只赋一次每次函数调用时赋初值自动赋初值0或空字
15、符不确定未赋初值静态存储区动态区存储区寄存器局部变量外部变量作用域定义变量的函数或复合语句内本文件其它文件u局部变量默认为auto型uregister型变量个数受限, sfr,sbit。u局部static变量具有全局寿命和局部可见性u局部static变量具有可继承性uextern不是变量定义,可扩展外部变量作用域register局部staticauto外部static外部存储类别你现在所处的位置在:首页C语言教学幻灯片版第二章 数据描述17C运算符算术运算符:(+ - * / % + -)关系运算符:( = !=)逻辑运算符:(! & |)位运算符 :( | &)赋值运算符:(= 及其扩展)条
16、件运算符:(?:)逗号运算符:(,)指针运算符:(* &)求字节数 :(sizeof)强制类型转换:(类型)分量运算符:(. -)下标运算符:()其它 :(( ) -)2.4 运算符和表达式你现在所处的位置在:首页C语言教学幻灯片版第二章 数据描述18运算符功能与运算量关系要求运算量个数要求运算量类型运算符优先级别结合方向结果的类型学习运算符应注意学习运算符应注意你现在所处的位置在:首页C语言教学幻灯片版第二章 数据描述19基本算术运算符: + - * / %结合方向:从左向右优先级: - -* / % - + - (2) (3) (4)说明:“-”可为单目运算符时,右结合性两整数相除,结果为
17、整数%要求两侧均为整型数据例 5/2 = -5/2.0 =例 5%2 = -5%2 = 1%10 = 5%1 = 5.5%2算术运算符和表达式2-2.51-110()你现在所处的位置在:首页C语言教学幻灯片版第二章 数据描述20作用:使变量值加1或减1种类:前置 +i, -i (先执行i+1或i-1,再使用i值)后置 i+,i- (先使用i值,再执行i+1或i-1)例 j=3; k=+j; j=3; k=j+; j=3; printf(“%d”,+j); j=3; printf(“%d”,j+); a=3;b=5;c=(+a)*b; a=3;b=5;c=(a+)*b; /k=4,j=4/k=3
18、,j=4/4/3/c=20,a=4/c=15,a=4自增、自减运算符+ -你现在所处的位置在:首页C语言教学幻灯片版第二章 数据描述21作用:使变量值加作用:使变量值加1 1或减或减1 1种类:种类:前置前置 +i, -i (+i, -i (先执行先执行i+1i+1或或i-1i-1,再使用,再使用i i值)值)后置后置 i+,i- (i+,i- (先使用先使用i i值值, ,再执行再执行i+1i+1或或i-1i-1)说明:说明:+ - + - 不能用于常量和表达式不能用于常量和表达式, ,如如5+5+,(a+b)+(a+b)+ -+ -结合方向:结合方向: 自右向左自右向左优先级:优先级:-
19、+ - -* / % -+ - + - -* / % -+ - (2) (3) (4)例 -i+ -(i+) i=3; printf(“%d”,-i+); /-3 例 j+k; (j+)+k;例例 -i+-i+ i=3; printf( i=3; printf(“%d%d”,-i+);,-i+); 自增、自减运算符自增、自减运算符+ -+ -你现在所处的位置在:首页C语言教学幻灯片版第二章 数据描述22简单赋值运算符符号: =格式: 变量标识符=表达式作用:将一个数据(常量或表达式)赋给一个变量复合赋值运算符种类:+= -= *= /= %= = = &= = |=含义: exp1 op= e
20、xp2 exp1 = exp1 op exp2a+=3a=a+3x*=y+8x=x*(y+8)x%=3x=x%3例 a=3; d=func(); c=d+2;赋值运算符和表达式你现在所处的位置在:首页C语言教学幻灯片版第二章 数据描述23结合方向:自右向左优先级: 14左侧必须是变量,不能是常量或表达式赋值表达式的值与变量值相等,且可嵌套赋值转换规则:使赋值号右边表达式值自动转换成其左边变量的类型例 3=x-2*y; a+b=3;例 float f; int i; i=10; f=i;则 f=10.0例 int i; i=2.56; /结果i=2;例: a=b=c=5 a=(b=5) a=5+
21、(c=6) a=(b=4)+(c=6) a=(b=10)/(c=2)/表达式值为5,a,b,c值为5/ b=5;a=5/表达式值11,c=6,a=11/表达式值10,a=10,b=4,c=6/表达式值5,a=5,b=10,c=2说明(说明(1 1):):你现在所处的位置在:首页C语言教学幻灯片版第二章 数据描述24 结合方向:自右向左 优先级: 12 左侧必须是变量,不能是常量或表达式赋值表达式的值与变量值相等,且可嵌套赋值转换规则:使赋值号右边表达式值自动转换成其左边变量的类型例: a=12; a+=a-=a*a例: int a=2; a%=4-1; a+=a*=a-=a*=3; /a=-2
22、64 等价于a=a+(a=a-(a*a)/a=0 等价于a=a+(a=a*(a=a-(a=a*3)说明(说明(2 2): :你现在所处的位置在:首页C语言教学幻灯片版第二章 数据描述25形式:表达式1,表达式2,表达式n结合性:从左向右优先级: 15逗号表达式的值:等于表达式n的值用途:常用于循环for语句中例 a=3*5,a*4 a=3*5,a*4,a+5例 x=(a=3,6*3) x=a=3,6*a例 a=1;b=2;c=3; printf(“%d,%d,%d”,a,b,c); printf(“%d,%d,%d”,(a,b,c),b,c); /a=15,表达式值60/a=15,表达式值20
23、/赋值表达式,表达式值18,x=18/逗号表达式,表达式值18,x=3/1,2,3/3,2,3逗号运算符和表达式例:/*ch2_6.c*/#include main() int x,y=7; float z=4; x=(y=y+6,y/z); printf(x=%dn,x);运行结果:x=3你现在所处的位置在:首页C语言教学幻灯片版第二章 数据描述26关系运算符种类: = !=结合方向:自左向右优先级别:=!=优先级6(高)优先级7(低)例 ca+b /c(a+b) ab!=c /(ab)!=c a=bc /a=(bc /a=(bc)关系表达式的值:是逻辑值“真”或“假”,用1和0表示例 in
24、t a=3,b=2,c=1,d,f; ab (ab)=c b+cb f=abc/表达式值1/表达式值1/表达式值0/d=1/f=0关系运算符和表达式你现在所处的位置在:首页C语言教学幻灯片版第二章 数据描述27例 若a=0; b=0.5; x=0.3; 则 a=x278在C中是允许的, 值为0例 int i=1, j=7,a; a=i+(j%4!=0); 则a=2例 a0 结果为 A100 结果为10关系运算注意(1)你现在所处的位置在:首页C语言教学幻灯片版第二章 数据描述28例 注意区分“=”与“=” int a=0,b=1; if(a=b) printf(“a equal to b”);
25、 else printf(“a not equal to b”);例 应避免对实数作相等或不等的判断如 1.0/3.0*3.0=1.0 结果为可改写为:fabs(1.0/3.0*3.0-1.0)1e-60关系运算注意(2)你现在所处的位置在:首页C语言教学幻灯片版第二章 数据描述29ab!a!ba&ba|b真假真假假假真真逻辑运算符种类: ! & |逻辑运算真值表C语言中,运算量: 0表示“假”, 非0表示“真”, 运算结果: 0表示“假”, 1表示“真”,真假假假假假真真假假真真真假真真逻辑运算符和表达式(1)你现在所处的位置在:首页C语言教学幻灯片版第二章 数据描述30! (2)& (11
26、)| (12)高低例 a=x & xb&xy a=b|x=y !a|abl优先级:l结合方向:! :从右向左& :从左向右| :从左向右/ (a=x) & (xb)&(xy)/(a=b)|(x=y)/(!a)|(ab)逻辑运算符和表达式(2)你现在所处的位置在:首页C语言教学幻灯片版第二章 数据描述31! (2)& (11)| (12)高低l优先级:l结合方向:! :从右向左& :从左向右| :从左向右例 a=4;b=5; !a a&b a|b !a|b 4&0|2 53&2|83)&2|(8(4-(!0) 值为1逻辑运算符和表达式(3)你现在所处的位置在:首页C语言教学幻灯片版第二章 数据描
27、述32! (2)& (11)| (12)高低l优先级:l结合方向:! :从右向左& :从左向右| :从左向右短路特性:逻辑表达式求解时,并非所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符例 a&b&c /只在a为真时,才判别b的值; 只在a、b都为真时,才判别 c的值例 a|b|c /只在a为假时,才判别b的值; 只在a、b都为假时,才判别 c的值例 a=1;b=2;c=3;d=4;m=1;n=1; (m=ab)&(n=cd)/结果m=0,n=1逻辑运算符和表达式(逻辑运算符和表达式(4)你现在所处的位置在:首页C语言教学幻灯片版第二章 数据描述3
28、3一般形式: expr1 ? expr2 : expr3执行过程功能:相当于条件语句,但不能取代一般if语句例 if (ab) printf(“%d”,a); else printf(“%d”,b);printf(“%d”,ab?a:b);例 求 a+|b| printf(“a+|b|=%dn”,b0?a+b:a-b);expr1取expr2值取expr3值非0=0例 (a=b)?Y:N (x%2=1)?1:0 (x=0)?x:-x (c=a & c0?1:(xb?a:cd?c:d ab?a:(cd?c:d)expr1、expr2、expr3类型可不同,表达式值取较高的类型例 x?a:b /x
29、=0,表达式值为b; x0,表达式值为a xy?1:1.5 /xy ,值为1.0; xcd;/a=0你现在所处的位置在:首页C语言教学幻灯片版第二章 数据描述39练习:6.下面程序中x的结果为?毕业设计(论文)任务书毕业设计(论文)任务书例: int x=5,y=3; x*=y+4;/x=35你现在所处的位置在:首页C语言教学幻灯片版第二章 数据描述40练习:7.下面程序中x的结果为?毕业设计(论文)任务书毕业设计(论文)任务书/a=2例 int i=1, j=7,a; a=i+(j%4!=0); 则a=你现在所处的位置在:首页C语言教学幻灯片版第二章 数据描述41练习:8.下面程序中x的结果为?毕业设计(论文)任务书毕业设计(论文)任务书/a=1例 int i=1, j=7,a; a=i & j; 则a=你现在所处的位置在:首页C语言教学幻灯片版第二章 数据描述42实践课安排:1.按学号固定座位。每个人以后均按此顺序使用计算机。2.时间上面分两个班级上课。3.每个人均需完成程序设计。4.完成实验报告。