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

  • 1
  • 0
  • 约9.76千字
  • 约 60页
  • 2016-12-10 发布于重庆
  • 举报
C05第3章操作符与表达式

第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/25/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合法吗? 赋值操作是右结合,故该表达式的操作顺序为ijk23。 子表达式k23是一个合法的赋值表达式。C语言表达式都有一个值,赋值表达式的值就是该表达式左边的操作数,即变量,也就是说表达式k23执行完赋值操作后,它的值就是k,此时原表达式变为i(j k)。 问题 表达式(a 3 * 2)

文档评论(0)

1亿VIP精品文档

相关文档