鱼C论坛

 找回密码
 立即注册
查看: 3605|回复: 7

c语言:a>b?a:b用法的问题 请教解决

[复制链接]
发表于 2014-2-3 15:54:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include "stdio.h"
void main()
{
        int a,b,c,max ;
        printf("请输入3个数:");
        scanf("%d %d %d",&a,&b,&c);
        printf("最大的数为:max=%d\n",a>b?a:(b>c?b:(a>c?a:c) ));

}
这个要怎么解决  我输入 8 9 0 ,9 8 0,9 0 8都正常判断最大输出数可当我输入8 0 9就不行了 输出的是8  请教甲鱼哥  这个要怎么解决???
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-2-4 00:37:55 | 显示全部楼层
虽然我不是甲鱼哥,但是我愿意和你探讨一下
printf("最大的数为:max=%d\n",a>b?a>c?a:c:b>c?b:c);
这么写就没问题了,编译一下通过,也都正常,但是这语句很难让人看懂,所以这么写基本上把自己都弄蒙圈了,这么写不会提高效率,编译后的机器码还是要像if else那么条件选择的,但是非要这么写就要理解一下语句的顺序
printf("最大的数为:max=%d\n",  a>b?(a>c?a:c):(b>c?b:c));
这样加上些括号你就比较容易理解一些了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-2-4 12:15:51 | 显示全部楼层

printf("最大的数为:max=%d\n",  a>b?(a>c?a:c):(b>c?b:c));  可以了 !!!可以在问问:这么写不会提高效率,编译后的机器码还是要像if else那么条件选择的???可我觉得这样写好简单啊   就是有时候思路会混淆而已    说说话   我还有点看不明白你写的  加我qq:1549307983  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-2-4 12:29:21 | 显示全部楼层
三目运算符{:7_176:}
你看不累么?
你改成if...else...看看就清楚了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-2-4 15:26:40 | 显示全部楼层
a>b?a:(b>c?b:(a>c?a:c)),先看分析你的运算式构成及其逻辑关系:a>b时结果为a(不一定是最大值);a<=b时,结果为b>c?b:(a>c?a:c),若b>c则值为b(最大值),若b<=c则值为a>c?a:c(此时显然a<=b<=c,即c肯定为最大值,a>c?a:c虽然没问题但是累赘)。
三目运算符有时候比if条件语句简洁,对于简单的判断推荐使用三目运算。对于复杂的运算,使用三目运算反而会使其看着更复杂,不利于阅读,所以不建议三目运算语句中嵌套过多运算。
还有,对于printf,似乎有些人很喜欢把一些运算直接丢进去作为参数,本人不推荐这样做。首先会使语句过长,其次可能会影响阅读,甚至使逻辑混乱(函数参数入栈方式的不同,++/--的处理方式不同等可能会影响结果)。
多写几行代码费不了多少事,但是有时会减少很多麻烦,也利于别人阅读你的代码。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-2-4 21:01:28 | 显示全部楼层
牡丹花下死做鬼 发表于 2014-2-4 12:29
三目运算符
你看不累么?
你改成if...else...看看就清楚了

嗯  灰常的感谢 我会切记的{:3_47:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-2-4 21:02:45 | 显示全部楼层
故乡的风 发表于 2014-2-4 15:26
a>b?a:(b>c?b:(a>c?a:c)),先看分析你的运算式构成及其逻辑关系:a>b时结果为a(不一定是最大值);ac?b:(a ...

嗯  灰常的感谢 我会切记的{:3_42:}  多谢您的指教
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-2-4 23:39:22 | 显示全部楼层
.net此生不换 发表于 2014-2-4 12:15
printf("最大的数为:max=%d\n",  a>b?(a>c?a:c):(b>c?b:c));  可以了 !!!可以在问问:这么写不会提高效 ...

printf("最大的数为:max=%d\n",  a>b?(a>c?a:c):(b>c?b:c));
我用vs6编译器,时候他从右往左算
那么a>b?(a>c?a:c):(b>c?b:c));
等价于a>b?(ac比较的最大值):(bc比较的最大值));
这样应该明白了吧,另外你在这条语句下断,然后转到汇编看看,他的执行流程和if else没区别的,所以这样不会提高程序效率,只是你写代码的字符能少几个而已,没有实际意义,并且我解释了这么多,你也许要好久才能理解,试想这么写别人看的明白还是if else看的明白。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-24 02:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表