
上QQ阅读APP看书,第一时间看更新
4.3.3 条件运算符及其表达式
条件运算符是C语言中唯一的一个三目运算符,即它有三个参与运算的操作数。先看下面的例4.6。
【例4.6】用条件表达式输出两个数中的最大值。
程序代码如下:

程序的运行结果为:
Please input a,b:58 <回车>
max=8
相关知识4
由条件运算符组成条件表达式的一般形式如下:
表达式1?表达式2:表达式3
其求值规则为:条件表达式的运算是先计算表达式1(通常为关系或逻辑表达式)的值,如果表达式1的值为非0,则整个条件表达式取表达式2的值,否则取表达式3的值。条件表达式通常用于赋值语句之中,例如:
if(a>b)max=a;
else max=b;
就可以用max=(a>b)?a:b;替换,二者的运行情况及结果完全一致。
条件运算符的优先级:条件运算符的运算优先级低于关系运算符和算术运算符,但高于赋值运算符。因此,max=(a>b)?a:b可以去掉括号而写为max=a>b?a:b。
注意:条件运算符的结合性为自右至左。
例如,a>b?a:c>d?c:d应理解为a>b?a:(c>d?c:d),这也就是条件表达式嵌套的情形,即其中的表达式3又是一个条件表达式。
注意:条件运算符“?”和“:”是一对运算符,不能分开单独使用。
课后讨论
条件表达式在有些情况下可以替换if语句为某一个变量赋值,请问是否所有的选择结构语句均可以用条件表达式替换?如果能,试举例说明怎样替换。