C语言03-OperatorsandExpressions.ppt

上传人:小飞机 文档编号:6503716 上传时间:2023-11-07 格式:PPT 页数:20 大小:226.49KB
返回 下载 相关 举报
C语言03-OperatorsandExpressions.ppt_第1页
第1页 / 共20页
C语言03-OperatorsandExpressions.ppt_第2页
第2页 / 共20页
C语言03-OperatorsandExpressions.ppt_第3页
第3页 / 共20页
C语言03-OperatorsandExpressions.ppt_第4页
第4页 / 共20页
C语言03-OperatorsandExpressions.ppt_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《C语言03-OperatorsandExpressions.ppt》由会员分享,可在线阅读,更多相关《C语言03-OperatorsandExpressions.ppt(20页珍藏版)》请在三一办公上搜索。

1、运算符与表达式,吴清锋2007年秋,提纲,变量的定义与赋初值运算符与表达式概述算术运算符与算术表达式基本算术运算符自增、自减运算符几点说明赋值运算符与赋值表达式类型转换逗号运算符和逗号表达式运算符小结,结束,变量的定义与赋初值,变量定义的一般形式类型名 变量名1,变量名2,;变量定义的位置:在所有函数之外或在块内的开头部分程序中经常要对一些变量预先设置初值。C语言允许在定义变量的同时执行变量初始化。如,int a=3;int a,b,c=5;这样将使得程序更为简洁。,返回,正确的例子:int g;main()int a;a=1;printf(a=%dn,a);,错误的例子1:main()int

2、 a;a=1;printf(a=%dn,a);,错误的例子2:main()printf(errorn);int a;a=1;printf(a=%dn,a);,运算符与表达式概述(1),回顾:定义了变量的类型,不但定义了变量所拥有的存储单位的大小,同时也定义了变量所能参与的运算。这些运算就是通过运算符来实现的。C运算符范围很宽,除控制语句以外的几乎所有基本操作都由运算符表示。C语言的一个特点:运算符丰富运算符一般要携带若干运算对象,运算对象称为操作数。根据操作数的个数,运算符可以分为单目运算符、双目运算符和三目运算符。,常量、变量或函数调用,运算符与表达式概述(2),表达式由运算符和相应的操作数

3、及用于描述运算先后次序的括号构成。为了表达式的书写方便(可以少写一些括号),C引进了运算符优先级和结合方向的概念。在表达式求值时,先按运算符的优先级别高低次序执行。运算符的结合方向(结合性)规定了同优先级运算符相遇时候的运算次序。C运算符有两种结合方向:自左向右结合(左结合性),即运算对象先与左面的运算符结合;自右向左结合(右结合性),即运算对象先与左面的运算符结合,返回,运算符与表达式概述(3),在学习这部分内容的时候,注意:对于运算符要掌握适用对象、优先级(通过与其他运算符的比较来体现)和结合方向;对于表达式,一定要注意拷问下表达式的值。,基本算术运算符,C语言中的基本算术运算符有6个:+

4、、-(减)、*、/、%(求模)、-(取负)除了负号运算符是单目运算符外,基本算术运算符号都是二目运算符。%运算符的两个操作数均要求为整型或字符型数据两个整数相除的结果亦为整数,相应小数部分将被舍弃。这样,5/3的结果为1。(但-5/3的结果是-1或-2将取决于不同的系统)六个基本算术运算符的优先级如下:-(取负)*、/、%+、-(减)除了负号运算符是“右结合性”外,基本算术运算符号都是“左结合性”的。,返回,自增、自减运算符,自增、自减运算符的形式是+和-,其作用分别是使其操作数的值增1或减1。自增、自减运算符只能用于变量,而不能用于常量或表达式。例如:5+,a+,+a都是错的。自增、自减运算

5、符均有前置和后置两种形式,当采用前置形式时,将先对变量执行自增(减)操作再取变量值为表达式的值;而采用后置形式时,将先取变量值为表达式的值再对变量执行自增(减)操作。例子自增、自减运算符的优先级和负号运算符相同,其结合方向也和负号运算符相同(“自右至左”),因此表达式-i+将等价于-(i+)。自增、自减运算符常用于循环语句,指针移动中,原因是:简洁;高效。,返回,几点说明(1),C标准并没有具体规定表达式中的子表达式的求值顺序。如,下面代码在不同C编译系统中的输出可能不同:main()int i=3,j;j=(i+)+(i+)+(i+);printf(i=%d,j=%dn,i,j);在调用函数

6、时,实参的求值顺序,C标准也没有统一的规定。如,下面代码在不同C编译系统中的输出可能不同:main()int i=3;printf(%d,%dn,i,i+);,TC和VC的输出为i=6,j=9,多数系统输出4,3。原因是多数系统中的参数传递顺序是从右到左的;但是VC的输出是3,3,几点说明(2),出现可能产生歧义的运算符组合时,C编译系统在处理时尽可能多地(自左而右)将若干字符组成一个运算符。例:i+j(i+)+j。-i-(-i)为了提高程序的可读性,更明确地表达程序的意图,应该注意如下几点:适当引入括号以取消可能出现的运算符组合歧义避免表达式和函数调用的运算结果对子表达式或函数参数求值次序的

7、依赖性。,返回,这是一个错误的表达式,为什么?,赋值运算符与赋值表达式(1),赋值符号“=”就是赋值运算符,作用是将一个数据赋给一个变量。例;注意:如果原来a中有值,赋值后会如何?在赋值符“=”前加上其它运算符,可以构成复合赋值符。凡是二目运算符,都可以与赋值符一起组合成复合赋值符。目前常用的有:+=,-=,*=,/=,%=。引进复合赋值运算符是为了使程序更简洁。但在阅读程序时要注意如何“翻译”?赋值运算符的优先级比算术运算符低。,赋值运算符与赋值表达式(2),由赋值运算符将一个变量和一个表达式连接起来的式子称为“赋值表达式”。一般形式为:变量 赋值运算符 表达式赋值表达式的求解过程表达式是要

8、有值的:赋值表达式的值是被赋值的变量的最终值。赋值运算符是“自右而左”结合的,因而下面两行等价的:a=b=5a=(b=5)同理,下面两行也是等价的a+=a-=a*aa+=(a-=a*a)变量的初始化基本上相当于一次赋值。例如,下面两行是等价的int a=3;int a;a=3;,若a=12,则a+=a-=a*a的运算流程如下:首先计算a=a-(a*a),得到a=-132然后计算a=a+(a-=a*a),得到a=-264,返回,类型转换(1):混合运算,数值类型之间、数值类型和字符类型之间的数据可混合运算。运算时,不同类型数据先转换为同类型,再进行运算类型转换符合下图其中,横向向左的箭头表示必定

9、的转换,纵向箭头表示当运算对象为不同类型时转换的方向。类型转换是由系统自动进行的!一个示例,类型转换(2):强制类型转换,强制类型转换符可以将一个表达式转换为所需类型需要注意:在强制类型转换时,得到一个所需类型的中间变量,原来变量的类型未发生变化强制类型转换表达式的一般形式为:(目标类型名)表达式强制类型转换通常用于自动类型转换不能实现目的时。强制类型转换通常也用于保证函数调用的实参和形参类型一致(这时并不发生自动类型转换)。强制类型转换符是“自右至左”强制类型转换符的优先级很高(高于算术运算符),因而对整个表达式(比如算术表达式)进行类型转换时,必须将表达式用括号括起。,当x,y均为floa

10、t型时,下面两行是不同的(int)x+y(int)(x+y),当f为float型时,要使f%3合法必须使用(int)f%3这种形式,类型转换(3):赋值,当赋值运算符两侧的类型不一致但都是字符或数值型时,赋值时要进行类型转换。int=float、double:舍弃实数的小数部分。float、double=int:数值不变,补足有效数字,以浮点形式存储。float=double:数值范围不溢出时截取前7位有效数字,否则出错。double=float:数值不变,有效位数扩展。int=unsigned char:以char的8位为int的低8位,高8位补0。int=char:以char的8位为int

11、的低8位,char的符号位扩展为高8位。char=int、short或long:取其低8位。long=int:效果类似int=char。long=unsigned int:效果类似int=unsigned char。int=long:取其低16位。占用同样字节数的整型相互赋值,效果是原样拷贝字节内容。,返回,逗号运算符和逗号表达式,逗号运算符,又称“顺序求值运算符”,用它可以将两个表达式连接起来。逗号表达式的一般形式为表达式1,表达式2,表达式3逗号表达式的求值过程就是顺序求值各个表达式。逗号表达式的值为最后一个表达式的值。注意:前面表达式对某个值的修改,将影响后后面表达式的运算例子:a=a*

12、5,a*4逗号运算符的优先级是所有运算符中最低的。所以下面两行是不同的:x=(a=3,6*3)x=a=3,6*3,返回,运算符小结,返回,示例:混合运算,如果有变量定义为:int i;float f;double d;long e;则表达式10+a+i*f-d/e中涉及的类型转换可以如图,返回,C语言运算符的类型,算术运算符赋值运算符强制类型转换符逗号运算符关系运算符、逻辑运算符、条件运算符下标运算符函数调用运算符指针运算符分量运算符位运算符求字节数运算符(sizeof),返回,示例:自增、自减运算符,情景一:若有i=3,则执行j=+i运算后j=4,i=4;而执行j=i+运算后j=3,i=4。情景二:若有i=3,则执行printf(“%d”,+i);后,输出4;而执行printf(“%d”,i+);后,输出3。情景三:若有i=3,则执行printf(“%d”,-i+);后,输出-3。,返回,

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

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


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号