预计阅读本页时间:-
C提供一种简写方式来表示if else语句的一种形式。这被称为条件表达式,并使用条件运算符(?:)。这是个有三个操作数的分两部分的运算符。回忆一下,有一个操作数的运算符称为一元运算符,有两个操作数的运算符称为二元运算符。按照该惯例,有三个操作数的运算符就称为三元运算符,条件运算符就是C的该类型的惟一的一个例子。下面是一个得到一个数的绝对值的例子:
广告:个人专属 VPN,独立 IP,无限流量,多机房切换,还可以屏蔽广告和恶意软件,每月最低仅 5 美元
在=和分号之间就是条件表达式。这个语句的意思是:“如果y小于0,那么x=-y;否则,x=y”。以if else的说法,可以这样表达:
下面是条件表达式的一般形式:
如果expressionl为真(非零),整个条件表达式的值和expression2的值相同。如果expressionl为假(零),整个条件表达式的值等于expression3的值。
当希望将两个可能的值中的一个赋给变量时,可以使用条件表达式。典型的例子是将两个值中的最大值赋给变量:
如果a大于b,那么max等于a,否则等于b。
通常,if else语句能完成与条件运算符同样的功能。但是,条件运算符语句更简洁;并且,依赖编译器,可以产生更精简的程序代码。
我们来看看程序清单7.8所示的一个喷漆程序的例子。这个程序计算向给定的平方英尺的面积涂油漆,全部涂完需要多少罐油漆。基本的数学法则很简单:用平方英尺数除以每罐漆能涂抹的平方英尺数。但是,假设结果是1.7罐会怎样呢?商店整罐卖漆,而不拆开卖,所以必须买两罐。因此,程序在得到非整数罐的结果时应该进1。条件运算符常用于处理这种情况,而且在适当的时候也用来打印can或cans。
程序清单7.8 paint.c程序
下面是一个运行示例:
因为程序使用int类型,所以除法被截断了;也就是说,215/200的结果是1。因此,cans被四舍五入为整数部分。如果sq_feet%COVERAGE等于0,那么sq_feet被COVERAGE整除,cans值不变,否则,有余数,所以加上1。这由下列语句完成:
它将cans加上+=右边表达式的值。右边的表达式是个条件表达式,值为0或1,依赖于sq_feet是否被COVERAGE整除。
printf()函数最终的参数也是一个条件表达式:
如果cans的值是1,使用字符串can,否则使用字符串cans。这表明条件运算符也可以使用字符串作为它的第二和第三个操作数。