条件运算符的嵌套问题

//第一个程序段
 #include<stdio.h>
 int main()
 {
 	int a,b,c,k;
 	a=2;b=3;c=4;
k=(a<b)?((a<c)?a:c):((b<c)?b:c);
 	printf("%d,%d,%d,%d\n",a,b,c,k);
   }//输出结果2342
对于k=(a<b)?((a<c)?a:c):((b<c)?b:c);这个是嵌套。从右向左看条件运算符,
一个一个看。
对于(a<b)?((a<c)?a:c):((b<c)?b:c)
可以转换为if-else语句
if(a<b)
   if(a<c) k=a;
     else k=c;
else if(b<c)
      k=b;
      else 
        k=c;
//第二个程序段
 #include<stdio.h>
 int main()
 {
 	int a,b,c,k;
 	a=2;b=3;c=4,d=5;
k=a<b?c:d>b?a:b;//等价于k=a<b?c:(d>b?a:b);
 	printf("%d,%d,%d,%d\n",a,b,c,k);
   }
//先算括号里的,输出为k=4,a=2,b=3,c=4;
*************************************************
k=a>b?(b>c?1:0):0
if((a>b)&&(b>c)) k=1;
//就是a>b执行()内的,之后(b>c)才可为1,否则为0也就是不满足a>b,b>c就为0;
else k=0;
**********************************************************************
k=a>b?(b>c?1:2):0
if(a>b)
  if(b>c)
     k=1;
     else k=2;
 else k=0;    
********************************************************************************
总结:条件运算符中的嵌套是一个条件运算在另一个条件运算中,
是一个条件运算符在其中的一个表达式中,一般不带括号。
一般就是这三种情形,遇到复杂的就要想到结合性是从右到左,
就是先算右边的再算左边的,有括号先算括号里的,
这时就不用管条件运算符了,因为,括号的优先级最高。
//
条件运算符的优先级高于赋值语句。
max=(a>b)?a:b;可改为max=a>b?a:b;
 // 
  x=a<b?a:b;等价于下面的:
   if(a<b)
     x=a;
   else
     x=b;

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值