条件运算符(?:)是C语言中唯一的一个三目运算符,它是对第一个表达式作真/假检测,然后根据结果返回另外两个表达式中的一个。
表达式1 ? 表达式2 : 表达式3
若表达式1的结果为真,则此时表达式2的值就是整个条件表达式的值;反之,若表达式1的结果为假,那么表达式3的值就是整个表达式的值。
例如,假定产品的单价是 3.5,提供 3 个级别的折扣:数量超过 50,折扣为 15%;数量超过 20,折扣为 10%;数量超过 10,折扣为 5%。下面是代码。
#include<stdio.h>
int main(){
double unit_price = 3.5;
double discount1 = 0.05;
double discount2 = 0.1;
double discount3 = 0.15;
double total_price = 0.0;
int quantity = 0;
printf("Enter the number that you want to buy:");
scanf("%d",&quantity);
total_price=quantity*unit_price*(1.0-
(quantity>50?discount3:(
quantity>20?discount2:(
quantity>10?discount1:0.0))));
printf("The price for %d is %7.2f\n",quantity,total_price);
return 0;
}
运行结果:
程序分析
比较有趣的是根据输入的数量计算产品的总价的语句。该语句包含额三个条件运算符,所以有点难以理解:
total_price = quantity*unit_price*(1.0-
(quantity>50?discount3:(
quantity>20?discount2:(
quantity>10?discount1:0.0))));
把它分解为各个部分,就容易理解它是如何得出正确结果的。
总价是用表达式 quantity*unit_price
计算出来的,它只是将单价乘以订购数量。其数量必须乘以由数量决定的折扣因子
- 如果数量超过 50,总价必须乘以 (1.0-discount3),这用下面的表达式
(1.0-quantity>50?discount3:something_else)
- 如果
quantity>50
表达式就乘以 (1.0-discount3),完成赋值运算符右边的运算 - 否则,表达式乘以 (1.0-something_else),其中 something_else 是另一个条件运算符的结果。