C05第3章 操作符和表达式.pptVIP

  1. 1、本文档共60页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第3章 操作符与表达式 3.1概述 3.2赋值操作符和赋值表达式 3.2.1 赋值操作符 3.2.2 类型不匹配时的赋值操作 3.2.3 复合赋值操作符 3.3算术操作符和算术表达式 3.3.1 算术表达式的求值 3.3.2 强制类型转换操作符 3.3.3 自增自减操作符 3.4逗号操作符和逗号表达式 3.5值与编译系统相关的表达式 3.6 典型例题分析 操作符 操作符也称运算符,是一种表示对数据进行何种处理的符号,如+,-,*,等。 操作符处理的对象(数据)称为操作数。操作数可以是字面量、变量或函数调用等。根据所需操作数的个数,操作符可分类为单目操作符(一个操作数),双目操作符(二个操作数)和三目操作符(三个操作数)。 根据功能,操作符可分为赋值、算术、关系与逻辑、位和地址操作符等几种。 表达式 用操作符把操作数连接起来的,符合C语言语法规则的式子如3+2*5-6 ,称作表达式。C语言丰富的操作符构成了种类繁多的表达式。 C语言表达式最重要的特征是每个表达式都有一个确定的值及(该值的)类型。所谓表达式的值是指按照规定的规则,对表达式进行运算所得到的结果。 求解表达式的值 要求解表达式的值就必须熟悉操作符的运算顺序。表达式中操作符的运算顺序服从于操作符的优先级和结合性规则。3+2*5-6 优先级规则要求表达式求值时,优先级高的操作符先进行运算,类似于熟知的“先乘除后加减”规则。 表达式中两个相邻的操作符具有相同的优先级时,首先运算哪一个操作符的问题由操作符的结合性规则来决定。 结合性 显然优先级相同的操作符的结合性也相同。 若按自左向右的顺序进行运算,则称该优先级的操作符的结合性为左结合;若按自右向左的顺序进行运算,则称该优先级的操作符的结合性为右结合。 +、-、*、/ C语言表达式举例 其中的字母均为变量。 i + (j – m / n) % 5 n 5 i % 3 = = 0 x = y++ % 2 i j ? n = 2 : n = -2 n = 2 x = 3, y *= 6, 89 + 56 常见的数学运算 C语言表达式中的操作符和操作数必须写在同一行上。对于数学上复杂的表达式如 在改写成单行的表达式时需用到库函数。 常见的数学运算如求绝对值、求平方根、求幂等在C语言中都已用库函数实现,如求绝对值可用fabs函数,求平方根可用sqrt函数,求幂可用pow函数。 有关数学运算的库函数归类在数学库中,在math.h头文件中声明。用include命令把math.h头文件包含到程序中后,就可以方便地使用这些有关数学运算的库函数了。 表达式求值和C语句 表达式求值时,不仅需要注意操作符的优先级和结合性,还需注意操作数的数据类型和表达式的序列点。 5/2 5/2.0 在后面加一个分号(;),C语言表达式就变成了C语句,此时计算机执行C语句的过程,就是对表达式“求值”的过程。 3.2 赋值操作符和赋值表达式 赋值操作符“=”是双目操作符、右结合,由它构成的赋值表达式的一般形式为:变量=表达式。 赋值表达式的操作是先计算出右边子表达式的值,再把值转换成变量的类型后存入变量所标示的存储空间。如:i = 5 / 2; 由于赋值操作符的优先级较低,可记为:先计算再赋值。 例3-1 分析下面程序的运行 变量i的值并不会消失 赋值语句i = i + 1;执行过程中,会先计算赋值操作符右边子表达式i + 1的值。在求i + 1的值时变量i的值(1)被取到运算器中,然后运算器求出i + 1的值为2。接着,计算结果会由运算器传回到变量i所标识的存储单元中,变量i值变为2。 变量i的值并不会因被“取到”运算器中而消失。计算后,运算器中的和会被赋值给变量i,因此这条语句不矛盾。 变量i的值并不会消失 执行赋值语句j = i;时,变量i所标示的内存空间的存储状态(2的补码)会被传送到变量j所标示的内存空间中,因此变量j的值变为2,变量j原来的值因为存储状态的改变而消失,但是变量i的值仍然为2, 因为变量i所标示的内存空间的存储状态没有改变仍然为2的补码。计算机在执行时只是检测一下(只是检测没有改变)变量i所标示的内存空间的状态(相关导线上的开关是接通还是断开),然后把变量j所标示的内存空间也设置成同样的状态。 赋值表达式合法吗? 赋值操作符左边的操作数只能是变量,如3 = i、i++ = 5和a + b = 23等的赋值表达式都不合法。 赋值表达式i = j = k = 23合法吗? 赋值操作是右结合,故该表达式的操作顺序为i=(j=(k=23))。 子表达式k=23是一个合法的赋值表达式。C语言表达式都有一个值,赋值表达式的值就是该表达式左边的操作数,即变量,也就是说表达式k=23执行完赋值操

您可能关注的文档

文档评论(0)

xiaofei2001129 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档