c++教程上求三个数最大值是不是有错?

2024年11月16日 13:39
有4个网友回答
网友(1):

if(b>a)
a=b; //如果b>a,b赋值给a
if(c>a)
a=c; //如果c>a,c赋值给a
return a;

是你错了;
我们先来看第一个if,它的作用是选出a,b中大的那个数,并把它赋值给a;
如,输入i1,i2,i3分别是1,2,3,此时max(1,2,3)
a=1,b=2,c=3,执行这个if以后,选出a,b中大的那个数,就是2,并把它赋值给a,所以此时a=2;
我们再来看第二个if,它的作用是选出a,c中大的那个数,并把它赋值给a;
所以运行到这里,a=2,b=2,c=3,选出a,c中大的那个数,就是3,并把它赋值给a;所以此时a=3;
所以这个函数的功能就是选出a,b,c三种最大值。

这个函数可以用另一种方式实现:
int max(int a,int b,int c)
{
return (a>b?a:b)>(a>c?a:c)? (a>b?a:b):(a>c?a:c);
}

网友(2):

你好,你的代码是正确的,但你的理解有误,请听我解释。
首先,程序是顺序执行的,就按你的意思,依次输入1、3、2
然后你看这一段语句
if(b>a)a=b; //如果b>a,b赋值给a
if(c>a)a=c; //如果c>a,c赋值给a
return a; //将a返回调用处

首先b=3>a=1的,所以b的值赋给a,现在a=3,然后顺序执行第2个if,千万注意现在a=3!!!
c=2显然比3小,所以第2个if不满足,a=c也不执行,直接return a,a就是3

所以这段程度的思想其实是利用第1个if求出前2个数中较大的一个,再把这个较大的与后一个数比较出最大的,应该明白了吧~

网友(3):

呵呵,这个问题是你粗心了
你看代码
int max(int a,int b,int c)
{if(b>a)a=b; //如果b>a,b赋值给a
if(c>a)a=c; //如果c>a,c赋值给a
return a; //将a返回调用处
}
假如你输入1 3 2
首先判断 if(b>a)a=b if((b=3)>(a=1)) a=b 条件成立,a=3;
if(3>1)1=3;
注意此时将a=b,a=3了
那么第二次比较时a=3了,
if(c>a)a=c; c=2,a=3;
条件不成立,a还是为3.返回值当然就是3啦!

网友(4):

因为当b>a时,a已经成为b(if(b>a)a=b;//如果b>a,b赋值给a),第二个式子(
if(c>a)a=c;//如果c>a,c赋值给a)中的a已经是b了,所以不再覆盖了