条件运算符的嵌套问题

//第一个程序段
 #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;

总结:条件运算符中的嵌套是一个条件运算在另一个条件运算中,
是一个条件运算符在其中的一个表达式中,一般不带括号。
一般就是这俩种情形,遇到复杂的就要想到结合性是从右到左,
就是先算右边的再算左边的,有括号先算括号里的,
这时就不用管条件运算符了,因为,括号的优先级最高。
//
条件运算符的优先级高于赋值语句。
max=(a>b)?a:b;可改为max=a>b?a:b;
 // 
  x=a<b?a:b;等价于下面的:
   if(a<b)
     x=a;
   else
     x=b;

猜你喜欢

转载自blog.csdn.net/weixin_46828943/article/details/113785798
今日推荐