![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=1739665130-1bKB1MtylYsY5mLWxfJMjrqO6X5wqDOd-0-ac184bd541d42cfff7577465c7fdaaec)
实例8
实例8运算符及表达式——输出各表达式的结果
实例任务
定义一些变量,并用运算符构成各种不同类型的表达式,输出各个表达式的值。程序运行结果如图2-8所示。
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/30_05.jpg?sign=1739665130-c5zs2U4NPBb1CKCKUQEmRRT59Bfm10Ou-0-c60fa2a92ad3b903d849ce83e842d87d)
图2-8 程序运行结果
程序代码
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/31_01.jpg?sign=1739665130-LLQAFpnv4KupFzmQQiQk0j7eXBYr41gP-0-bd2b415d191907775070fd4528542ec3)
相关知识
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=1739665130-NITU0kBmAzKbbs1IHEOwiX0jk0NgQHsI-0-6bfa1a79a94c8e27731f957e1b105f25)
需要说明的是,有时“=”两侧的数据类型不一致,在赋值时要进行数据类型转换。具体处理过程如下。
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=1739665130-3s0FiITT28tHEvi8rQ9cd3D8AY8Wtw3D-0-0a68efd0e4bcf577b36ea50ba8068bfa)
执行时,按表达式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=1739665130-VD7Tsb4BniA7AWsv4kVxJaSSn204fMcs-0-fb1686e2465b13f27a02acae0f296979)
实例9
实例9 关系运算符、逻辑运算符和表达式——关系运算和逻辑运算的结果
实例任务
定义变量,并对其进行关系运算和逻辑运算,输出运算结果。程序运行结果如图2-9所示。
程序代码
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/33_03.jpg?sign=1739665130-pN20QkGLJXDMctDau1fr9J7Pj6VvY1P2-0-87053e40e06239a4617f53d11c60d83a)
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/33_04.jpg?sign=1739665130-1vRZo78aE2jzwueCJgrQ6LRql7cVQd99-0-5479dbfdd408290a04edde919c21a3ec)
图2-9 程序运行结果
相关知识
1.关系运算符和关系运算表达式
关系运算符又称为比较运算符,其作用是对操作数进行比较运算,以判断给定的两个操作数之间是否符合给定的关系。如符合,结果为1;如不符合,结果为0。
由关系运算符连接起来的式子,称为关系表达式。在程序设计过程中,关系表达式主要用在程序中的判断语句。C语言中的6种关系运算符及其运算规则如表2-4所示。
表2-4 关系运算符及其运算规则
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/34_01.jpg?sign=1739665130-j3pDnYzVYJyh7XcQuTuD823Xxsmia0qJ-0-e34e57d7ff0f07c2336c1223ef16a7b8)
2.逻辑运算符及逻辑运算表达式
关系运算只能对单一条件进行判断,如a>b等。如果要在一条语句中对多个条件进行判断,就需要用逻辑运算。常用的逻辑运算有与、或、非,对应的运算符号是&&、||、!。其中非运算为单目运算符,用于对符号后的值进行取反操作。
由逻辑运算符连接起来的式子称为逻辑运算表达式。它的运算结果为真时,值为1;运算结果为假时,值为0。C语言中,常用的3种逻辑运算符及其运算规则和优先级如表2-5所示。
表2-5 逻辑运算符及其运算规则和优先级
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/34_02.jpg?sign=1739665130-jbUZhvnCsrvKQ5cJ7NJo6BeEyq9UJMfv-0-b1d9d5e6acad84ea5fea3b5c4546391e)
实例10运算符的优先级——复杂表达式的运算结果
实例任务
定义3个变量,然后组合成复杂表达式,要求输出各表达式的值。程序运行结果如图2-10所示。
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/34_03.jpg?sign=1739665130-pP1vNEUmoTmYMT3puOoFo83cnYulODsf-0-d2ea55d446128d7461ca24f08d0a2e4d)
实例10
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/34_04.jpg?sign=1739665130-DScwSR8x8kc89wYJMXsH8pHYEwDFKRoV-0-525d639f2cfbcfc9df39bcaead4ae203)
图2-10 程序运行结果
程序代码
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/35_01.jpg?sign=1739665130-TkCxNKTRwLr8DcBV4xZl1ZNzfQyxePA0-0-10ea9928e41f9f0b3a784b7479ae8c40)
相关知识
1.运算符的优先级与结合性
C语言规定了运算符的优先级和结合性。优先级是指当一个表达式中有多个运算符并存时,并非从左至右依次执行,而是按各运算符的优先级的顺序执行。
所谓结合性是指当一个操作数两侧的运算符具有相同的优先级时,该操作数是先与左边的运算符结合,还是先与右边的运算符结合。自左至右的结合方向,称为左结合性。反之,称为右结合性。结合性是C语言的独有概念。除单目运算符、赋值运算符和条件运算符(在第3章中学习)是右结合性外,其他运算符都是左结合性。
2.常用运行符的分类及结合性
C语言的运算符比较丰富,常用运算符的优先级和结合性如表2-6所示。
表2-6 常用运算符的优先级和结合性
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/35_02.jpg?sign=1739665130-XVQlpoxvfGXI6x73LyExSSey9wM9sUHv-0-fcbe2c24ec275ade5bebf382bc66d1c6)
课堂精练
1)定义变量,要求输出一些表达式的结果。程序运行结果如图2-11所示。
根据程序运行结果,请将下面的程序补充完整并调试。
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/36_01.jpg?sign=1739665130-DtnEpp4NGbgkJrKUPFPLly5LbW6SDYm1-0-45302077b528bf6215a9877a500653ed)
2)定义变量,并进行自加和自减运算。程序运行结果如图2-12所示。
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/36_02.jpg?sign=1739665130-YNJQkCpBf3KMpwSNggizxtHnvyu05BUV-0-32384e0e1bdb0f234bcd82841bc9bba7)
图2-11 程序运行结果(1)
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/36_03.jpg?sign=1739665130-F7NKV7sonXFMkRPDuNiQzi0vROuhDsXv-0-94a35369751c8b0e9c98dbe2079ac422)
图2-12 程序运行结果(2)
根据程序运行结果,请将下面的程序补充完整并调试。
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/36_04.jpg?sign=1739665130-xuifYYvRpW9Q38iDlAZUifOUxSMJSSzo-0-8ba41cd7fc64a7737cf602a9e505a668)