打印
[牛人杂谈]

C 条件运算符(三目运算符)

[复制链接]
1174|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
其实高手并不是总用 if else
而是用三目。
在某些情况下,可以用条件运算符“ ? : ”来简化if语句。基本格式“ ? : ”是一个三元运算符,其构成的表达式格式为:
      <表达式1> ? <表达式2> : <表达式3>执行流程
条件运算符的执行流程示意图如上图所示,描述如下:
(1) 计算表达式1的值;
(2) 若表达式的值为真(或非0),则只计算表达式2,并将其结果作为整个表达式的值;反之,即表达式1的值为假(或为0),则只计算表达式3,并将其结果作为整个表达式的值。应用举例例如:
    if (a>b) max=a;
    else     max=b;
可写成:
    max=a>b?a:b;

又如:设有定义:int a=6,b=7, 则:
    min = a<b?a:b; min="6
    min = a<b?++a:++b; min="7" a="7" b="7
    min = a<b?a++:b++; min="6" a="7" b="7嵌套使用条件运算符还可以嵌套使用,如求三个数中的最大值:
    if (a>=b) t=a; else t=b;
    if (t>=c) max=t; else max=c;
可改写成:
    max =(t=a>=b?a:b)>= c ? t : c;

又如:
    if (a>b)    cout<<″greater than″;
    else if (a==b) cout<<″equal to″;
        else      cout<<″less than″;
  可改写成:
    cout<<(a>b? "greater than":a==b?"equal to":"less than");

最后提醒:
  • 条件运算符“?:”只能在某些情况下简化if结构。
  • 条件运算符嵌套使用时,要注意其结合性,即运算顺序,建议谨慎使用!



沙发
mintspring|  楼主 | 2016-8-11 20:30 | 只看该作者
如果在条件语句中,只执行单个的赋值语句时, 常可使用条件表达式来实现。不但使程序简洁,也提高了运行效率。
条件运算符为?和:,它是一个三目运算符,即有三个参与运算的量。由条件运算符组成条件表达式的一般形式为:
表达式1? 表达式2: 表达式3
其求值规则为:如果表达式1的值为真,则以表达式2 的值作为条件表达式的值,否则以表达式2的值作为整个条件表达式的值。 条件表达式通常用于赋值语句之中。
例如条件语句:
if(a>b) max=a;
else max=b;
可用条件表达式写为 max=(a>b)?a:b; 执行该语句的语义是:如a>b为真,则把a赋予max,否则把b 赋予max。
使用条件表达式时,还应注意以下几点:
1. 条件运算符的运算优先级低于关系运算符和算术运算符,但高于赋值符。因此 max=(a>b)?a:b可以去掉括号而写为 max=a>b?a:b
2. 条件运算符?和:是一对运算符,不能分开单独使用。
3. 条件运算符的结合方向是自右至左。
例如:
a>b?a:c>d?c:d应理解为
a>b?a:(c>d?c:d) 这也就是条件表达式嵌套的情形,即其中的表达式3又是一个条
件表达式。
void main(){
int a,b,max;
printf("/n input two numbers: ");
scanf("%d%d",&a,&b);
printf("max=%d",a>b?a:b);
}

用条件表达式对上例重新编程,输出两个数中的大数。

使用特权

评论回复
板凳
mintspring|  楼主 | 2016-8-11 20:35 | 只看该作者
其实几目运算符就是说这个算式至少几个变量参:
单目,一个运算数 i++, i--, !a, ~a
双目,两个运算数 a+b a-b a*b
三目,三个运算数 bc=a?b:c; (if(a) bc =b;else bc =c;)
看一下运算符优先级表就知道了,会列出所有运算符,并标明单目,双目,三目

使用特权

评论回复
地板
dentsgot| | 2016-8-11 21:13 | 只看该作者
如果程序的表达式很长还能这么用吗

使用特权

评论回复
5
598330983| | 2016-8-12 09:16 | 只看该作者
高手一般是喜欢用三目的,特别是两个判断做出决策的时候。

使用特权

评论回复
6
ideafor| | 2016-8-12 16:17 | 只看该作者
语句表达该怎样替换掉if else呢?

使用特权

评论回复
7
wahahaheihei| | 2016-8-13 16:27 | 只看该作者
判断最大值
void main(){
int a,b,max;
printf("/n input two numbers: ");
scanf("%d%d",&a,&b);
printf("max=%d",a>b?a:b);
}

使用特权

评论回复
8
mintspring|  楼主 | 2016-8-15 09:06 | 只看该作者
条件运算符?和:是一对运算符,不能分开单独使用。

使用特权

评论回复
9
yiyigirl2014| | 2016-8-15 19:38 | 只看该作者
max=(a>b)?a:b可以去掉括号而写为 max=a>b?a:b

使用特权

评论回复
10
yansheng988| | 2016-8-18 17:57 | 只看该作者
呵呵呵1

使用特权

评论回复
11
gejigeji521| | 2016-8-18 21:12 | 只看该作者
高手喜欢用三目的,这个写出来简单,编译后的代码质量更高。

使用特权

评论回复
12
643757107| | 2016-8-19 21:46 | 只看该作者
min = a<b?a++:b++; min="6" a="7" b="7嵌套使用条件运算符还可以嵌套使用

使用特权

评论回复
13
稳稳の幸福| | 2016-8-20 07:38 | 只看该作者
f (a>=b) t=a; else t=b;
    if (t>=c) max=t; else max=c;
可改写成:
    max =(t=a>=b?a:b)>= c ? t : c;

使用特权

评论回复
14
yiyigirl2014| | 2016-8-20 16:55 | 只看该作者
简单用三目,稍微复杂的用if else if
再复杂的用分支语言,switch case

使用特权

评论回复
15
598330983| | 2016-8-21 00:09 | 只看该作者
条件运算符“?:”只能在某些情况下简化if结构。
条件运算符嵌套使用时,要注意其结合性,即运算顺序,建议谨慎使用!

使用特权

评论回复
16
mintspring|  楼主 | 2016-8-21 19:47 | 只看该作者
条件运算符?和:是一对运算符,不能分开单独使用

使用特权

评论回复
17
捉虫天师| | 2016-8-22 11:13 | 只看该作者
if (a>b) max=a;
    else     max=b;
可写成:
    max=a>b?a:b;

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

296

主题

4894

帖子

24

粉丝