请解释一下下面的一段C语言程序

来源:百度知道 编辑:UC知道 时间:2024/05/09 20:02:20
#include <stdio.h>
main()
{
int a,b,c;
scanf("%d,%d,%d",&a,&b,&c);
printf("%d",a>(b>c? b:c)? a:(b>c? b:c));
}
不知道这是什么鸟语,程序效果是比较3个数的大小

这道题很简单
比较3个数大小是在printf("%d",a>(b>c? b:c)?a:(b>c? b:c));里比较的。首先看 (b>c? b:c)运算符 ? :他是比较 b 和c的大小如果b大于c那么选b 小于c的话取c 然后再和前面的a比较。后面的 a:(b>c? b:c));就是比较的取值, 比较是如果a大就选a , 如果a 小的话就取里面的结果了。 里面的就是在运算一遍比较一下b和c的大小了。

首先要清楚三目运算符: "?:"
条件?语句一:语句二;
若条件为真,返回语句一,否则返回语句二.

printf("%d",a>(b>c? b:c)? a:(b>c? b:c));
首先-
b>c?b:c ==> b>c吗?大于,返回b,没这回事,返回c,也就是返回b,c间的大值,假设为K
那么就成了:
a>K ? a : K ==>同上,a>K吗?大于,返回a,没这回事,返回K,这样就返回了a,b,c中最大的值!

a>(b>c? b:c)? a:(b>c? b:c)

x?y:z是3目运算符

意思是x为真,则执行y,x为假,则执行z。

那么这里就好理解了

b>c? b:c,是求出bc之间较大的数,
a>(b>c? b:c)则是求出bc之间较大的数和a谁大,
打印出%d就是abc中间最大的数

这是输入三个数,在输出的时候使用三目运算法比较大小