8.5 条件运算符:?:

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,则取较大的值

 

 

 

 

 

 

 


    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值