//第一个程序段
#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;
条件运算符的嵌套问题
最新推荐文章于 2024-07-25 14:57:29 发布