当前位置:嗨网首页>书籍在线阅读

15-条件运算符

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

7.5 条件运算符: ?:

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 语句也可以完成。但是,使用条件运算符的代码更简洁,而且编译器可以生成更紧凑的程序代码。

我们来看程序清单7.8中的油漆程序,该程序计算刷给定平方英尺的面积需要多少罐油漆。基本算法很简单:用平方英尺数除以每罐油漆能刷的面积。但是,商店只卖整罐油漆,不会拆分来卖,所以如果计算结果是1.7罐,就需要两罐。因此,该程序计算得到带小数的结果时应该进 1 。条件运算符常用于处理这种情况,而且还要根据单复数分别打印 cancans

程序清单7.8  paint.c 程序

/* paint.c -- 使用条件运算符 */
#include <stdio.h>
#define COVERAGE 350       // 每罐油漆可刷的面积(单位:平方英尺)
int main(void)
{
     int sq_feet;
     int cans;
     printf("Enter number of square feet to be painted:\n");
     while (scanf("%d", &sq_feet) == 1)
     {
          cans = sq_feet / COVERAGE;
          cans += ((sq_feet % COVERAGE == 0)) ? 0 : 1;
          printf("You need %d %s of paint.\n", cans,
                   cans == 1 ? "can" : "cans");
          printf("Enter next value (q to quit):\n");
     }
     return 0;
}

下面是该程序的运行示例:

Enter number of square feet to be painted:
349
You need 1 can of paint.
Enter next value (q to quit):
351
You need 2 cans of paint.
Enter next value (q to quit):
q

该程序使用的变量都是 int 类型,除法的计算结果( sq_feet / COVERAGE )会被截断。也就是说, 351/3501 。所以, cans 被截断成整数部分。如果 sq_feet % COVERAGE0 ,说明 sq_feetCOVERAGE 整除, cans 的值不变;否则,肯定有余数,就要给 cans1 。这由下面的语句完成:

cans += ((sq_feet % COVERAGE == 0)) ? 0 : 1;

该语句把 += 右侧表达式的值加上 cans ,再赋给 cans 。右侧表达式是一个条件表达式,根据 sq_feet 是否能被 COVERAGE 整除,其值为 01

printf() 函数中的参数也是一个条件表达式:

cans == 1 ? "can" : "cans");

如果 cans 的值是 1 ,则打印 can ;否则,打印 cans 。这也说明了条件运算符的第2个和第3个运算对象可以是字符串。

小结:条件运算符

条件运算符: ?:

一般注解:

条件运算符需要3个运算对象,每个运算对象都是一个表达式。其通用形式如下:

expression1 ? expression2 : expression3

如果 expression 1为真,整个条件表达式的值是 expression 2的值;否则,是 expression 3的值。

示例:

(5 > 3) ? 1 : 2   值为 1

(3 > 5) ? 1 : 2   值为 2

(a > b) ? a : b   如果 a >b ,则取较大的值