The C Programming Language(第 2 版) 笔记 / 2 类型、运算符与表达式 / 2.11 条件表达式

目录、参考文献


2.11 条件表达式

下面的代码:

if (a > b) 
    z = a; 
else
    z = b;

用于求 ab 中的最大值,并将结果保存到 z
条件表达式(使用三元运算符 “ ? : ”)提供了另外一种方法编写这段程序及类似的代码段
在表达式 expr1 ? expr2 : expr3 中,首先计算 expr1
如果其值不等于 0(为真),则计算 expr2 的值,并以该值作为条件表达式的值,否则计算 expr3 的值,并以该值作为条件表达式的值
expr2expr3 中只能有一个表达式被计算,因此,上边的语句可以改写为:

z = (a > b) ? a : b; /* z = max(a, b) */

应该注意,条件表达式实际上就是一种表达式,它可以用在其它表达式可以使用的任何地方
如果 expr2expr3 的类型不同,结果的类型将由本章前面讨论的转换规则决定
例如,如果 ffloat 类型,nint 类型
那么表达式 (n > 0) ? f : nfloat 类型,与 n 是否为正值无关

条件表达式中第一个表达式两边的圆括号并不是必须的,这是因为条件运算符 ? : 的优先级非常低,仅高于赋值运算符
但我们还是建议使用圆括号,因为这可以使表达式的条件部分更易于阅读

采用条件表达式可以编写出很简洁的代码
例如,下面的这个循环语句打印一个数组的 n 个元素
每行打印 10 个元素,每列之间用一个空格隔开,每行用一个换行符结束(包括最后 一行)

for (i = 0; i < n; i++)
    printf("%6d%c", a[i], (i % 10 == 9 || i == n - 1) ? '\n' : ' ');

在每 10 个元素之后以及在第 n 个元素之后都要打印一个换行符,所有其它元素后都要打印一个空格
编写这样的代码可能需要一些技巧,但比用等价的 if-else 结构编写的代码要紧凑一些
下面是另一个例子:

printf("You have %d item%s.\n", n, n == 1 ? "" : "s");

目录、参考文献

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值