(x)<(y)?(x):(y)在C语言中的意思?
(x)<(y)?(x):(y)在C语言中的意思是指如果表达式(x)<(y)成立即x小于y,则执行表达式(x),否则执行表达式(y)。(x)<(y)?(x):(y)叫做问号表达式。
举例及结果:
int a=5,b=3;
printf("%d",a>b?a:b);
如果a大于b成立则执行:前面的即输出a。否则执行:后面的即输出b。本例中输出结果为5。
扩展资料:
问号表达式用法:求最大值和数值排序
1、求x、y、z的最大值
#include "stdio.h"
main()
{
int x,y,z,max;
scanf("%d%d%d",&x,&y,&z);
max=x>y?(x>z?x:z):(y>z?y:z);
printf("max=%d",max);
}
2、键盘输入三个整数,按由小到大的顺序输出。
#include "stdio.h"
main()
{
int i,j,k,max;
scanf("%d%d%d",&i,&j,&k);
max=i>j?i:j;
max=max>k?max:k;
printf("max=%d",max);
}
条件 ? 语句1 : 语句2 运算符
(x)<(y)?(x):(y)
如果 ? 前面的条件为 真, 则执行 语句1, 否则 执行 语句2
#define MIN(x,y) (x)<(y)?(x):(y)
main()
{
int i=10,j=15,k;
k=10*MIN(i,j);
printf(“%d\n”,k);
}
这个题的答案怎么是15呢?
哈哈, 这个我知道
把宏展开后是这样了
k = 10 * (i) < (j) ? (i) : (j);
此时, 是用 10 * i = 100 和j = 15 比较, 当然是15了
太感谢你了,终于明白了呢。
其实按asci规范来说,下面这个表达式
exp0 ? exp1 : exp2
如果exp0为真,那么整个表达式就相当于exp1,否则就相当于exp2
即使是一个赋值语句也会有其结果,结果为最左边的值或变量
这个语句一般用于条件赋值
比如说
c=a>b?1:2
意思就是:
a>b如果是真的,c赋值为1
a>b如果是假的,c赋值为2
等价于
if (a>b)
c=1;
else
c=2;
end
#define MIN(x,y) (x)<(y)?(x):(y)
main()
{int i=10,j=15,k;
k=10*MIN(i,j);
printf(“%d\n”,k);
}这个题的答案怎么是15呢?
好像是运算符优先的问题。。。
k=10*MIN(i,j);
相当于(10*i)<j?i:j
运算符优先顺序我忘了,不过define代换的时候的确是没有自带括号的。。。
比如说#define a x-10
那10*a就变成了10*x-10而不是10*(x-10)