- C语言入门很轻松(微课超值版)
- 云尚科技编著
- 2569字
- 2025-02-24 15:55:33
4.2 使用表达式
在C语言中,表达式由运算符和操作数构成,表达式的运算符指出了对操作数的操作,操作数可以是常量、变量或者函数的调用,并且表达式是用来构成语句的基本单位。本节就来介绍表达式的使用。
4.2.1 算术表达式
由算术运算符和操作数组成的表达式称为算术表达式,算术表达式的结合性为自左向右。常用的算术表达式使用说明,如表4-10所示。
表4-10 算术表达式的描述

【例4.9】编写程序,定义int型变量a、b、c,初始化a的值为10,初始化b的值为20,使用算术表达式对a和b进行运算,将计算结果分别赋予c再输出(源代码\ch04\4.9.txt)。


图4-9 例4.9的程序运行结果
程序运行结果如图4-9所示。
在使用算术表达式的过程中,应该注意以下几点:
(1)在算术表达式中,如果操作数的类型不一致,系统会自动进行隐式转换,如果转换成功,表达式的结果类型以操作数中表示范围大的类型为最终类型。
(2)减法运算符的使用同数学中的使用方法类似,但需要注意的是,减法运算符不但可以应用于整型、浮点型数据间的运算,还可以应用于字符型的运算。在字符型运算时,首先将字符转换为其ASCII码值,然后进行减法运算。
(3)在使用除法运算符时,如果除数与被除数均为整数,则结果也为整数,它会把小数舍去(并非四舍五入),如3/2=1。
4.2.2 赋值表达式
由赋值运算符和操作数组成的表达式称为赋值表达式,赋值表达式的功能是计算表达式的值再赋予左侧的变量。赋值表达式的一般形式如下:
变量 赋值运算符 表达式
赋值表达式的计算过程是:首先计算表达式的值,然后将该值赋给左侧的变量。C语言中常见赋值表达式以及使用说明,如表4-11所示。
表4-11 常见赋值表达式以及使用说明

【例4.10】编写程序,定义整型变量x、y,使用赋值表达式对x进行相应的运算操作,然后将结果赋予y输出(源代码\ch04\4.10.txt)。


图4-10 例4.10的程序运行结果
程序运行后的结果如图4-10所示。
在使用赋值表达式的过程中,应该注意以下几点:
(1)赋值的左操作数必须是一个变量,C语言中可以对变量进行连续赋值,这时赋值运算符是右关联的,这意味着从右向左运算符被分组。例如,形如a=b=c的表达式等价于a=(b=c)。
(2)如果赋值运算符两边的操作数类型不一致,如果存在隐式转换,系统会自动将赋值运算符右边的类型转换为左边的类型再赋值;如果不存在隐式转换,那就先要进行显式类型转换,否则程序会报错。
4.2.3 关系表达式
由关系运算符和操作数构成的表达式称为关系表达式。关系表达式中的操作数可以是整型数、实型数、字符型等。对于整数类型、实数类型和字符类型,六种关系运算符都适用;对于字符串的关系运算符实际上只能使用==和!=运算符。关系表达式的格式如下:
表达式 关系运算符 表达式
例如:
3>2 z>x-y 'a'+2<d a>(b>c) a!=(c==d) "abc"!="asf"
☆大牛提醒☆
两个字符串值都为null或两个非空字符串长度相同、对应的字符序列也相同的情况下比较的结果才能为“真”。
关系表达式的返回值只有“真”与“假”两种,分别用“1”和“0”来表示,例如:
2>1 的返回值为“真”,也就是“1” (a+b)==(c=5)的返回值为“假”,也就是“0”
【例4.11】编写程序,通过输入端输入一个字符,使用关系表达式判断该字符是字母还是数字(源代码\ch04\4.11.txt)。

保存并运行程序,如果输入数值,则返回如图4-11所示的结果;如果输入一个字符,则返回如图4-12所示的结果。

图4-11 输入数字的反馈信息

图4-12 输入字母的反馈信息
4.2.4 逻辑表达式
由逻辑运算符和操作数组成的表达式称为逻辑表达式。逻辑表达式的结果只能是真与假,要么是“1”要么是“0”。逻辑表达式的书写形式一般为:
表达式 逻辑运算符 表达式
例如,表达式a&&b,其中a和b均为布尔值,系统在计算该逻辑表达式时,首先判断a的值,如果a为true,再判断b的值,如果a为false,系统不需要继续判断b的值,直接确定表达式的结果为false。
虽然在C语言中,以“1”表示“真”,以“0”表示“假”,但是反过来在判断一个量是“真”或是“假”时,是以“0”代表“假”,以非“0”的数字代表“真”。
例如:
2&&3
由于“2”和“3”均非“0”,所以表达式的返回值为“真”,即为“1”。
【例4.12】编写程序,分别定义字符型变量s并初始化为“z”,整型变量a、b、c并初始化为1、2、3,浮点型变量x、y并初始化为2e+5、3.14。输出由它们所组合的相应逻辑表达式的返回值(源代码\ch04\4.12.txt)。

程序运行结果如图4-13所示。

图4-13 例4.12的程序运行结果
4.2.5 位运算表达式
由位运算符和操作数构成的表达式为位运算表达式。在位运算表达式中,系统首先将操作数转换为二进制数,然后再进行位运算,计算完毕后,再将其转换为十进制整数。各种位运算方法,如表4-12所示。这里假设操作数1为8,操作数2为3。
表4-12 位运算符表达式

【例4.13】编写程序,定义整型变量a、b,并初始化为20、15;定义int型变量c并初始化为0。对a、b进行相关位运算操作,将结果赋予变量c并输出(源代码\ch04\4.13.txt)。

程序运行结果如图4-14所示。

图4-14 例4.13的程序运行结果
4.2.6 条件表达式
由条件运算符和操作数组成的表达式称为条件表达式。条件表达式的一般形式如下:
条件表达式?表达式1:表达式2
条件表达式的计算过程是先计算条件,然后进行判断。如果条件表达式的结果为“真”,计算表达式1的值,表达式1为整个条件表达式的值;否则,计算表达式2的值,表达式2为整个条件表达式的值。例如,求出a和b中最大数的表达式。
a>b?a:b //取a和b的最大值
条件运算符的优先级高于赋值运算符,低于关系运算符和算术运算符。所以有:
(a>b)?a:b 等价于a>b?a:b
条件运算符的结合性规则是自右向左,例如:
a>b?a:c<d?c:d 等价于a>b?a:(c<d?c:d)
注意:在条件运算符中?与:是一对运算符,不可拆开使用。
【例4.14】编写程序,定义两个整型变量,通过输入端输入两数的值,再使用条件表达式比较它们的大小,将较大数输出(源代码\ch04\4.14.txt)。

程序运行结果如图4-15所示。

图4-15 例4.14的程序运行结果
4.2.7 逗号表达式
逗号运算符的功能是将两个表达式连接起来成为一个表达式,这就是逗号表达式。逗号表达式的一般形式为:
表达式1,表达式2
逗号表达式的运算方式为分别对两个表达式进行求解,然后以表达式2的计算结果作为整个逗号表达式的值。在逗号表达式中可以使用嵌套的形式,例如:
表达式1,(表达式2,表达式3…表达式n)
将上述逗号表达式展开可以得到:
表达式1,表达式2,表达式3…表达式n
那么表达式n便为整个逗号表达式的值。
【例4.15】编写程序,定义整型变量a,b,c,x,y。对a,b,c进行初始化,它们的值分别为1,2,3,然后计算逗号表达式y=(x=a+b, a+c),最后输出x,y的值(源代码\ch04\4.15.txt)。

程序运行结果如图4-16所示。

图4-16 例4.15的程序运行结果