c语言:a>b?a:b用法的问题 请教解决
#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请教甲鱼哥这个要怎么解决???
虽然我不是甲鱼哥,但是我愿意和你探讨一下
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));
这样加上些括号你就比较容易理解一些了 machimilk 发表于 2014-2-4 00:37 static/image/common/back.gif
虽然我不是甲鱼哥,但是我愿意和你探讨一下
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));可以了 !!!可以在问问:这么写不会提高效率,编译后的机器码还是要像if else那么条件选择的???可我觉得这样写好简单啊 就是有时候思路会混淆而已 说说话 我还有点看不明白你写的加我qq:1549307983 三目运算符{:7_176:}
你看不累么?
你改成if...else...看看就清楚了 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,似乎有些人很喜欢把一些运算直接丢进去作为参数,本人不推荐这样做。首先会使语句过长,其次可能会影响阅读,甚至使逻辑混乱(函数参数入栈方式的不同,++/--的处理方式不同等可能会影响结果)。
多写几行代码费不了多少事,但是有时会减少很多麻烦,也利于别人阅读你的代码。 牡丹花下死做鬼 发表于 2014-2-4 12:29 static/image/common/back.gif
三目运算符
你看不累么?
你改成if...else...看看就清楚了
嗯灰常的感谢 我会切记的{:3_47:} 故乡的风 发表于 2014-2-4 15:26 static/image/common/back.gif
a>b?a:(b>c?b:(a>c?a:c)),先看分析你的运算式构成及其逻辑关系:a>b时结果为a(不一定是最大值);ac?b:(a ...
嗯灰常的感谢 我会切记的{:3_42:}多谢您的指教 .net此生不换 发表于 2014-2-4 12:15 static/image/common/back.gif
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看的明白。
页:
[1]