C语言学习栏目目录
源码
C提供条件表达式(conditional expression)作为表达if else语句的一种便捷方式,该表达式使用?:条件运算符。该运算符分为两部分,需要 3 个运算对象。回忆一下,带一个运算对象的运算符称为一元运算符,带两个运算对象的运算符称为二元运算符。以此类推,带 3 个运算对象的运算符称为三元运算符。条件运算是C语言中唯一的三元运算符。下面的代码得到一个数的绝对值:
x = (y < 0) ? -y : y;
在=和;之间的内容就是条件表达式,该语句的意思是“如果y小于0,那么x = -y;否则,x = y”。用if else可以这样表达:
if (y < 0)
x = -y;
else
x = y;
条件表达式的通用形式如下:
expression1 ? expression2 : expression3
如果 expression1 为真(非 0),那么整个条件表达式的值与 expression2的值相同;如果expression1为假(0),那么整个条件表达式的值与expression3的值相同。
需要把两个值中的一个赋给变量时,就可以用条件表达式。典型的例子是,把两个值中的最大值赋给变量:
max = (a > b) ? a : b;
如果a大于b,那么将max设置为a;否则,设置为b。
通常,条件运算符完成的任务用 if else 语句也可以完成。但是,使用条件运算符的代码更简洁,而且编译器可以生成更紧凑的程序代码。
下程序清单中的油漆程序,该程序计算刷给定平方英尺的面积需要多少罐油漆。基本算法很简单:用平方英尺数除以每罐油漆能刷的面积。但是,商店只卖整罐油漆,不会拆分来卖,所以如果计算结果是1.7罐,就需要两罐。因此,该程序计算得到带小数的结果时应该进1。条件运算符常用于处理这种情况,而且还要根据单复数分别打印can和cans。
/************************************************************************
功能: 使用条件运算符
/************************************************************************/
#include <stdio.h>
int main(void)
{
int COVERAGE = 350; // 每罐油漆可刷的面积(单位:平方英尺);
int sq_feet;
int cans;
printf("输入要绘制的平方英尺数:\n");
while (scanf("%d", &sq_feet) == 1)
{
cans = sq_feet / COVERAGE;
cans += ((sq_feet % COVERAGE == 0)) ? 0 : 1;
printf("你需要 %d %s 的油漆.\n", cans,cans == 1 ? "can" : "cans"); //英文单数和复数,can是单位(罐)
printf("输入下一个值(q表示退出):\n");
}
return 0;
}
下面是该程序的运行示例:
输入要绘制的平方英尺数:
451
你需要 2 cans 的油漆.
输入下一个值(q表示退出):
2465
你需要 8 cans 的油漆.
输入下一个值(q表示退出):
1
你需要 1 can 的油漆.
输入下一个值(q表示退出):
q
该程序使用的变量都是int类型,除法的计算结果(sq_feet /COVERAGE)会被截断。也就是说, 351/350得1。所以,cans被截断成整数部分。如果sq_feet % COVERAGE得0,说明sq_feet被COVERAGE整除,cans的值不变;否则,肯定有余数,就要给cans加1。这由下面的语句完成:
cans += ((sq_feet % COVERAGE == 0)) ? 0 : 1;
该语句把+=右侧表达式的值加上cans,再赋给cans。右侧表达式是一个条件表达式,根据sq_feet是否能被COVERAGE整除,其值为0或1。
printf()函数中的参数也是一个条件表达式:
cans == 1 ? "can" : "cans");
如果cans的值是1,则打印can;否则,打印cans。这也说明了条件运算符的第2个和第3个运算对象可以是字符串。
小结:条件运算符
条件运算符:?:
一般注解:
条件运算符需要3个运算对象,每个运算对象都是一个表达式。其通用
形式如下:
expression1 ? expression2 : expression3
如果expression1为真,整个条件表达式的值是expression2的值;否则,
是expression3的值。
示例:
(5 > 3) ? 1 : 2 值为1
(3 > 5) ? 1 : 2 值为2
(a > b) ? a : b 如果a >b,则取较大的值