![C语言程序设计实例教程(第3版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/105/41865105/b_41865105.jpg)
2.3 常用的运算符和表达式
学习目标
1)掌握几种常用运算符。
2)掌握由运算符和数据构成的表达式的运算过程。
3)熟练掌握常用运算符的优先级别关系。
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/30_04.jpg?sign=1739674034-6CotAjErWCWTaaNhQF7rbXoe0cquDZeV-0-2d50006e4fad1c16ffeca868d81764c3)
实例8
实例8运算符及表达式——输出各表达式的结果
实例任务
定义一些变量,并用运算符构成各种不同类型的表达式,输出各个表达式的值。程序运行结果如图2-8所示。
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/30_05.jpg?sign=1739674034-gunZnboCrNHZYBn2ESRk2GNdlAp7r7ES-0-3a38c177435b48e8af0474448f041d02)
图2-8 程序运行结果
程序代码
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/31_01.jpg?sign=1739674034-aZhyZv0K8AaTpgAylLw9h1JHeWwUL8Kd-0-7be70eb06840346d70cba918053961ed)
相关知识
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.赋值运算符与赋值运算表达式
赋值运算符号为“=”,它的作用是将一个数据或表达式的值赋给一个变量。由“=”连接的式子称为赋值表达式,其一般形式为:
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/32_02.jpg?sign=1739674034-rhitbaJ5tVmwLaR4akwxLdkmk38dqxBZ-0-d456c2c3dbe5cedcda8843a482316d66)
需要说明的是,有时“=”两侧的数据类型不一致,在赋值时要进行数据类型转换。具体处理过程如下。
1)将实型值赋予整型变量时,舍去小数部分。
2)将整型值赋予实型变量时,数值不变,但将以浮点形式存放,即增加小数部分(小数部分的值为0)。
3)将字符型值赋予整型变量时,由于字符型数据长度为1字节,而整型数据长度为2字节,故将字符的ASCII码值放到整型变量的低八位中,高八位为0。
4)将整型值赋予字符型变量时,只把低八位赋予字符型变量。
4.复合赋值运算符
在赋值符“=”之前加上其他双目运算符可构成复合赋值运算符。如+=、-=、*=、/=、%=、<<=、>>=、&=、^=、|=,如a1+=4等价于a1=a1+4。
赋值运算符都是自右向左执行的。C采用复合赋值运算符,一是为了简化程序,使程序精炼,二是为了提高编译效率。
5.逗号运算符
C语言提供一种用逗号运算符“,”连接起来的式子,称为逗号表达式。它的构成形式为:
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/33_01.jpg?sign=1739674034-klxubnVCgb93GXHOtnOZxnV5RnA07FYB-0-fabfaad53f929f577c6e348707479bbc)
执行时,按表达式1、表达式2、……、表达式n的顺序依次运算,最后的表达式n的值即为整个逗号表达式的值。例如,逗号表达式“a = 3*5, a*4”的值为60。即先求解a=3 × 5,得a=15;再求a× 4=60。
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/33_02.jpg?sign=1739674034-7bmagFb6G22Tv5iwznzMVVgwEedLxXXb-0-a3049160aa07828300aca112264170e6)
实例9
实例9 关系运算符、逻辑运算符和表达式——关系运算和逻辑运算的结果
实例任务
定义变量,并对其进行关系运算和逻辑运算,输出运算结果。程序运行结果如图2-9所示。
程序代码
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/33_03.jpg?sign=1739674034-1QzP6watT2pUaGAOlUOi6QQPJ78MczKH-0-9e36df5eebee4c76e30aa0998f38ae33)
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/33_04.jpg?sign=1739674034-WJC7vQrNw4eQdrUQP7QST47wHeh16dpT-0-351c13a598f9e5407e4fc9e2cadc58b7)
图2-9 程序运行结果
相关知识
1.关系运算符和关系运算表达式
关系运算符又称为比较运算符,其作用是对操作数进行比较运算,以判断给定的两个操作数之间是否符合给定的关系。如符合,结果为1;如不符合,结果为0。
由关系运算符连接起来的式子,称为关系表达式。在程序设计过程中,关系表达式主要用在程序中的判断语句。C语言中的6种关系运算符及其运算规则如表2-4所示。
表2-4 关系运算符及其运算规则
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/34_01.jpg?sign=1739674034-3636Juj3Bd9Kr203mLYu36zKOGR0yxtJ-0-557d1dbca3b7cbc0a2649bbfaf702ebb)
2.逻辑运算符及逻辑运算表达式
关系运算只能对单一条件进行判断,如a>b等。如果要在一条语句中对多个条件进行判断,就需要用逻辑运算。常用的逻辑运算有与、或、非,对应的运算符号是&&、||、!。其中非运算为单目运算符,用于对符号后的值进行取反操作。
由逻辑运算符连接起来的式子称为逻辑运算表达式。它的运算结果为真时,值为1;运算结果为假时,值为0。C语言中,常用的3种逻辑运算符及其运算规则和优先级如表2-5所示。
表2-5 逻辑运算符及其运算规则和优先级
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/34_02.jpg?sign=1739674034-qfyEmkxS5imtCs49K6v8b1i5oQFW9MqL-0-0aa7579423af3b29e41393a812f446dc)
实例10运算符的优先级——复杂表达式的运算结果
实例任务
定义3个变量,然后组合成复杂表达式,要求输出各表达式的值。程序运行结果如图2-10所示。
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/34_03.jpg?sign=1739674034-mwVEPNVF44NSeITK3GtPKIRtBQBb2YwN-0-a2ed388e59416bda7b24a6985f8d145c)
实例10
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/34_04.jpg?sign=1739674034-LN9kywLYxNEGyI5S9ppuoyBgtrW8f4q6-0-b0770043fca5d8759633626ecd8f1ecd)
图2-10 程序运行结果
程序代码
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/35_01.jpg?sign=1739674034-rBxfooizVZr5vwDY0SFiUry3VKDWHEjK-0-9171b810d8a613527be5541e37a83973)
相关知识
1.运算符的优先级与结合性
C语言规定了运算符的优先级和结合性。优先级是指当一个表达式中有多个运算符并存时,并非从左至右依次执行,而是按各运算符的优先级的顺序执行。
所谓结合性是指当一个操作数两侧的运算符具有相同的优先级时,该操作数是先与左边的运算符结合,还是先与右边的运算符结合。自左至右的结合方向,称为左结合性。反之,称为右结合性。结合性是C语言的独有概念。除单目运算符、赋值运算符和条件运算符(在第3章中学习)是右结合性外,其他运算符都是左结合性。
2.常用运行符的分类及结合性
C语言的运算符比较丰富,常用运算符的优先级和结合性如表2-6所示。
表2-6 常用运算符的优先级和结合性
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/35_02.jpg?sign=1739674034-reUptMJ2eqsvXrAPcU1UIqoyXArO0Ikr-0-1e65c8864ec4d0782fcb6b82088699f1)
课堂精练
1)定义变量,要求输出一些表达式的结果。程序运行结果如图2-11所示。
根据程序运行结果,请将下面的程序补充完整并调试。
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/36_01.jpg?sign=1739674034-i6m0Smbkgr3FSTbPM6zETgYNj85iMWJX-0-4962cb9aa0c4c6617ea31e52055bf640)
2)定义变量,并进行自加和自减运算。程序运行结果如图2-12所示。
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/36_02.jpg?sign=1739674034-eGuJujhbuwsFLAjh91HOiLnqMRuVQe7j-0-47430956c1dcf67b6df0b07a3fffaa12)
图2-11 程序运行结果(1)
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/36_03.jpg?sign=1739674034-Ae64PUQtVtOVYCNsHG1a8gJBAc2dXZ3R-0-6cd2a7bf52a79b29655ccd5f836e0baf)
图2-12 程序运行结果(2)
根据程序运行结果,请将下面的程序补充完整并调试。
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/36_04.jpg?sign=1739674034-YrSsDp7o1N1Hl3UIHM8YNJwPvKfMGYKd-0-100b015322d3fad90be84bd62fff1cae)