firewater 发表于 2014-8-11 18:56:39

用if语句比较三个数中最大值

代码如下#include "stdio.h"
void main ()
{
        int a,b,c,max;
        printf("请输入三个数:");
        scanf("%d%d%d",&a,&b,&c);
        if (a>=b>=c||a>=c>=b) max=a;
        else if (b>=a>=c||b>=c>=a) max=b;
        else max=c;
        printf("the max is %d\n",max);
}为什么输出的总是最后一个数c,用这个代码根本无法比较大小

yvqiang 发表于 2014-8-11 19:10:12

这样比不是乱套了,给你个样儿:#include "stdio.h"

void main ()
{
      int a,b,c,max;
      
      printf("请输入三个数:");
      
      scanf("%d%d%d",&a,&b,&c);
      
      if(a < b)//假设a与b有个是最大值
      {
              max = b;
      }
      else
      {
              max = a;
      }
      
      if(max < c)//max和c比
      {
              max = c;
      }
      printf("the max is %d\n",max);
      
      system("pause");
      
}

Angel丶L 发表于 2014-8-11 19:29:06

if (a>=b>=c||a>=c>=b) max=a;比较 如果 a>=b并且 谁大的值 和C比较|| 比较 如果 a>=c并且 谁大的值 和b比较
      else if (b>=a>=c||b>=c>=a) max=b;比较 如果 b>=z并且 谁大的值 和C比较|| 比较 如果 b>=c并且 谁大的值 和z比较
      else max=c;
你认为可以么。

machimilk 发表于 2014-8-11 19:55:07

逻辑混乱,先a和b比,然后用a和b的最大值和c比,这时候最大的才是3个数里面最大的

Justdoit 发表于 2014-8-11 20:04:22

本帖最后由 Justdoit 于 2014-8-11 20:07 编辑

为什么不用条件运算符呢? max1 = a>b ? a : b;   max = max1>c ? max1 : c;

firewater 发表于 2014-8-12 21:02:56

Angel丶L 发表于 2014-8-11 19:29
if (a>=b>=c||a>=c>=b) max=a;比较 如果 a>=b并且 谁大的值 和C比较|| 比较 如果 a>=c并且 谁大的值 和 ...

还是不太懂,因为刚看的逻辑表达式,还不太明白。.............

Angel丶L 发表于 2014-8-12 21:05:46

firewater 发表于 2014-8-12 21:02
还是不太懂,因为刚看的逻辑表达式,还不太明白。.............

是的你这样 写的话逻辑确实比较混乱 如果 你非要搞懂这个 if的话 我可以建议你 对照自己的代码
写出伪代码 优先级 是 算术运算符 比 逻辑运算符大你可以这样自己 检查下错了没有。 肯定是错了的。、

firewater 发表于 2014-8-12 21:54:20

Angel丶L 发表于 2014-8-12 21:05
是的你这样 写的话逻辑确实比较混乱 如果 你非要搞懂这个 if的话 我可以建议你 对照自己的代码
写出伪 ...

哦,我再看看

桃花飞舞 发表于 2014-8-12 23:35:26

为什么我看懂了别人写 的代码后自己却还是不会,或者看懂后过不久就忘记了呢?

firewater 发表于 2014-8-13 07:03:58

桃花飞舞 发表于 2014-8-12 23:35
为什么我看懂了别人写 的代码后自己却还是不会,或者看懂后过不久就忘记了呢?

要亲自动手写吧

firewater 发表于 2014-8-14 17:03:00

Angel丶L 发表于 2014-8-12 21:05
是的你这样 写的话逻辑确实比较混乱 如果 你非要搞懂这个 if的话 我可以建议你 对照自己的代码
写出伪 ...

如果我要用逻辑运算符应该怎么改??

Angel丶L 发表于 2014-8-14 17:04:57

firewater 发表于 2014-8-14 17:03
如果我要用逻辑运算符应该怎么改??

两个两个 判断 别三个一起判断容易混乱。

firewater 发表于 2014-8-14 17:26:57

Angel丶L 发表于 2014-8-12 21:05
是的你这样 写的话逻辑确实比较混乱 如果 你非要搞懂这个 if的话 我可以建议你 对照自己的代码
写出伪 ...

但是关系运算符优先级是大于逻辑或运算符的啊。我是这样理解的:a>=b>=c或a>=c>=b只要有一个为真,b和a c的比较也是这样的。如果都不符合,那么c肯定最大。我这样理解在哪个地方错了。请讲一下??谢谢         

Angel丶L 发表于 2014-8-14 17:50:01

firewater 发表于 2014-8-14 17:26
但是关系运算符优先级是大于逻辑或运算符的啊。我是这样理解的:a>=b>=c或a>=c>=b只要有一个为真,b和a c ...
是的 关系运算符优先级是大于逻辑或运算符的
a>=b>=c或a>=c>=b
a>=b>=c=
{如果 a>=b那么 a 和C比较
不然 a<b   那么 b 和C比较}
a>=c>=b
{如果 a>=c那么 a 和b比较
不然 a<c   那么 c 和b比较}
发生可能性很多的 我上面不是说过的么。


if (a>=b>=c||a>=c>=b) max=a;比较 如果 a>=b并且 谁大的值 和C比较|| 比较 如果 a>=c并且 谁大的值 和b比较
      else if (b>=a>=c||b>=c>=a) max=b;比较 如果 b>=z并且 谁大的值 和C比较|| 比较 如果 b>=c并且 谁大的值 和z比较
      else max=c;
你认为可以么。

firewater 发表于 2014-8-14 20:17:51

本帖最后由 firewater 于 2014-8-14 20:21 编辑

Angel丶L 发表于 2014-8-14 17:50
是的 关系运算符优先级是大于逻辑或运算符的
a>=b>=c或a>=c>=b
a>=b>=c=

嗯,是我错了。没仔细看书,书上写了:关系表达式的值是一个逻辑值,0或1.而且它是左结合性。因此a>=b>=c,假设a,b,c为987,9>=8因此它的逻辑值为1而1<9因此逻辑值为0,同样其他的也可以这样分析。因为输入的这几个数都大于1因此逻辑值为0.所以一直执行esle后面的语句。   我以为电脑也可判断大小,忘记了它返回的是逻辑值。而且我发现只要中间的数输入为0,那么它输出的一定是最大值

Angel丶L 发表于 2014-8-14 20:59:55

firewater 发表于 2014-8-14 20:17
嗯,是我错了。没仔细看书,书上写了:关系表达式的值是一个逻辑值,0或1.而且它是左结合性。因此a>=b>=c ...

这样写也是可以的 但是思路必须要理清楚这样写就没问题。

firewater 发表于 2014-8-14 21:23:19

Angel丶L 发表于 2014-8-14 20:59
这样写也是可以的 但是思路必须要理清楚这样写就没问题。

嗯,如果有多个数(>3)比较应该怎样写

calton007 发表于 2014-8-21 22:39:05

a>=b>=c这个有问题的
会先算a>=b 结果是0或1
然后在算0>=c或者1>=c
应该写成a>=b&&b>=c

firewater 发表于 2014-8-22 08:09:11

calton007 发表于 2014-8-21 22:39
a>=b>=c这个有问题的
会先算a>=b 结果是0或1
然后在算0>=c或者1>=c


嗯,懂了,以前对着还不熟悉,经常忘记这些规则
页: [1]
查看完整版本: 用if语句比较三个数中最大值