2.3 常用的运算符和表达式

学习目标

1)掌握几种常用运算符。

2)掌握由运算符和数据构成的表达式的运算过程。

3)熟练掌握常用运算符的优先级别关系。

实例8

实例8运算符及表达式——输出各表达式的结果

实例任务

定义一些变量,并用运算符构成各种不同类型的表达式,输出各个表达式的值。程序运行结果如图2-8所示。

图2-8 程序运行结果

程序代码

相关知识

1.算术运算符和算术运算表达式

常用的算术运算符有以下几种。

1)加法运算符“+”:双目运算符,即应有两个量参与加法运算。如x1+x1,4+8等,它具有右结合性。

2)减法运算符“-”:双目运算符。但“-”也可作为负值运算符,此时为单目运算,如-x,-5等,它具有左结合性。

3)乘法运算符“*”:双目运算符,如表达式x1*x2,它具有左结合性。

4)除法运算符“/”:双目运算符,具有左结合性。参与运算量均为整型时,结果为两数整除的商,为整型,舍去小数。如果运算量中有一个是实型,则结果为双精度实型,运算结果为数学上相除的实型结果。

5)取余运算符(求模运算符)“%”:双目运算符,具有左结合性。要求参与运算的量均为整型。求余运算的结果等于两数整除后的余数。

由算术运算符和数据一起构成的式子,是算术表达式。数学上的一些表达式,在C语言中书写时要符合一定的书写规范。例如:要写成表达式sqrt(abs(x))/2。

2.自增自减运算

自增1运算符记为“++”,其功能是使变量的值自增1。自减1运算符记为“--”,其功能是使变量的值自减1。自增1运算符和自减1运算符均为单目运算,都具有右结合性。它们有以下几种形式。

1)++i。i自增1后再参与其他运算。

2)--i。i自减1后再参与其他运算。

3)i++。i参与运算后,i的值再自增1。

4)i--。i参与运算后,i的值再自减1。

但是++和--仅能用于变量,不能用于常量或表达式。如(i+j)--或6++、(-i)++、(-i)--是不合法的。

如果i的原值为5,那么-i--就应相当于-(i--),整个表达式的输出结果为-5,i的值再自减1为4。

当遇到如a+++b这样的表达式时,C编译处理原则是尽可能多地(自左而右)将若干个字符组成一个运算符,因此a+++b等价于(a++)+b。

3.赋值运算符与赋值运算表达式

赋值运算符号为“=”,它的作用是将一个数据或表达式的值赋给一个变量。由“=”连接的式子称为赋值表达式,其一般形式为:

需要说明的是,有时“=”两侧的数据类型不一致,在赋值时要进行数据类型转换。具体处理过程如下。

1)将实型值赋予整型变量时,舍去小数部分。

2)将整型值赋予实型变量时,数值不变,但将以浮点形式存放,即增加小数部分(小数部分的值为0)。

3)将字符型值赋予整型变量时,由于字符型数据长度为1字节,而整型数据长度为2字节,故将字符的ASCII码值放到整型变量的低八位中,高八位为0。

4)将整型值赋予字符型变量时,只把低八位赋予字符型变量。

4.复合赋值运算符

在赋值符“=”之前加上其他双目运算符可构成复合赋值运算符。如+=、-=、*=、/=、%=、<<=、>>=、&=、^=、|=,如a1+=4等价于a1=a1+4。

赋值运算符都是自右向左执行的。C采用复合赋值运算符,一是为了简化程序,使程序精炼,二是为了提高编译效率。

5.逗号运算符

C语言提供一种用逗号运算符“,”连接起来的式子,称为逗号表达式。它的构成形式为:

执行时,按表达式1、表达式2、……、表达式n的顺序依次运算,最后的表达式n的值即为整个逗号表达式的值。例如,逗号表达式“a = 3*5, a*4”的值为60。即先求解a=3 × 5,得a=15;再求a× 4=60。

实例9

实例9 关系运算符、逻辑运算符和表达式——关系运算和逻辑运算的结果

实例任务

定义变量,并对其进行关系运算和逻辑运算,输出运算结果。程序运行结果如图2-9所示。

程序代码

图2-9 程序运行结果

相关知识

1.关系运算符和关系运算表达式

关系运算符又称为比较运算符,其作用是对操作数进行比较运算,以判断给定的两个操作数之间是否符合给定的关系。如符合,结果为1;如不符合,结果为0。

由关系运算符连接起来的式子,称为关系表达式。在程序设计过程中,关系表达式主要用在程序中的判断语句。C语言中的6种关系运算符及其运算规则如表2-4所示。

表2-4 关系运算符及其运算规则

2.逻辑运算符及逻辑运算表达式

关系运算只能对单一条件进行判断,如a>b等。如果要在一条语句中对多个条件进行判断,就需要用逻辑运算。常用的逻辑运算有与、或、非,对应的运算符号是&&、||、!。其中非运算为单目运算符,用于对符号后的值进行取反操作。

由逻辑运算符连接起来的式子称为逻辑运算表达式。它的运算结果为真时,值为1;运算结果为假时,值为0。C语言中,常用的3种逻辑运算符及其运算规则和优先级如表2-5所示。

表2-5 逻辑运算符及其运算规则和优先级

实例10运算符的优先级——复杂表达式的运算结果

实例任务

定义3个变量,然后组合成复杂表达式,要求输出各表达式的值。程序运行结果如图2-10所示。

实例10

图2-10 程序运行结果

程序代码

相关知识

1.运算符的优先级与结合性

C语言规定了运算符的优先级和结合性。优先级是指当一个表达式中有多个运算符并存时,并非从左至右依次执行,而是按各运算符的优先级的顺序执行。

所谓结合性是指当一个操作数两侧的运算符具有相同的优先级时,该操作数是先与左边的运算符结合,还是先与右边的运算符结合。自左至右的结合方向,称为左结合性。反之,称为右结合性。结合性是C语言的独有概念。除单目运算符、赋值运算符和条件运算符(在第3章中学习)是右结合性外,其他运算符都是左结合性。

2.常用运行符的分类及结合性

C语言的运算符比较丰富,常用运算符的优先级和结合性如表2-6所示。

表2-6 常用运算符的优先级和结合性

课堂精练

1)定义变量,要求输出一些表达式的结果。程序运行结果如图2-11所示。

根据程序运行结果,请将下面的程序补充完整并调试。

2)定义变量,并进行自加和自减运算。程序运行结果如图2-12所示。

图2-11 程序运行结果(1)

图2-12 程序运行结果(2)

根据程序运行结果,请将下面的程序补充完整并调试。