重庆邮电大学论坛

标题: 求三个数中最大者的几种方法! [打印本页]

作者: 小凤尾    时间: 2006-9-7 15:39
标题: 求三个数中最大者的几种方法!


方法1:根据基本算法编制函数

下面直接给出程序。
int my_max(int x,int y,int z)
{
 int max;
 max=x;
 if(y>max)max=y;
 if(z>max)max=z;
 return max;
}


方法2: 用条件运算符

假设三个数存放在三个变量x,y,z中,可用下面的条件运算符求得最大数。
(1) 不用中间变量
   x>y ? (x>z?x:z)y>z?y:z)
算法说明:先将x和y比较,若x>y,则最大数必定在x和z中间,因此再取x和z中的最大者;否则,最大数必定在y和z中间,因此就取y和z中的最大者。

(2) 用一个中间变量m
  (m=x>y?x:y)>z?m:z
算法说明:先取x和y的最大者并赋值给m,然后求m和z中的最大者

(3) 不用中间变量
  (x>y&&x>z)?xy>z?y:z)
算法说明:先看x是否比y和z都大,若是,x即为最大者,否则,最大者必定在y和z中间,因此就取y和z的最大者。


方法3:用宏

(1)定义带三个参数的宏
先定义如下带参数的宏
#define MAX(x,y,z) (((x)>(y)&&(x)>(y))?(x)(y)>(z)?(y):(z)))
然后在程序中使用上述宏替换即可。
注意:(1)上述宏定义中的每个形参及整个宏体都要加上小括号,原因请参阅“定义带参数的宏时,宏体中的形参为什么一定要加小括号?”专题。(2)该宏定义中使用了方法2中(3)的算法。也可以使用其中的(1)或(2)的算法来定义宏体。
(2)定义带二个参数的宏
#define MAX(x,y) ((x)>(y)?(x):(y))
使用时,应该这样:MAX(MAX(a,b),c),其中的a、b、c为实参,它的算法与方法2中的(2)是一样的。

转贴自:http://www.hljcre.com/dispbbs.asp?boardID=15&ID=1866





欢迎光临 重庆邮电大学论坛 (http://www.icyou.cn/) Powered by Discuz! X3.3