方法1:根據(jù)基本算法編制函數(shù)
下面直接給出程序。
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: 用條件運算符
假設(shè)三個數(shù)存放在三個變量x,y,z中,可用下面的條件運算符求得最大數(shù)。
(1) 不用中間變量
x>y ? (x>z?x:z) y>z?y:z)
算法說明:先將x和y比較,若x>y,則最大數(shù)必定在x和z中間,因此再取x和z中的最大者;否則,最大數(shù)必定在y和z中間,因此就取y和z中的最大者。
(2) 用一個中間變量m
(m=x>y?x:y)>z?m:z
算法說明:先取x和y的最大者并賦值給m,然后求m和z中的最大者
(3) 不用中間變量
(x>y&&x>z)?x y>z?y:z)
算法說明:先看x是否比y和z都大,若是,x即為最大者,否則,最大者必定在y和z中間,因此就取y和z的最大者。
方法3:用宏
(1)定義帶三個參數(shù)的宏
先定義如下帶參數(shù)的宏
#define MAX(x,y,z) (((x)>(y)&&(x)>(y))?(x) (y)>(z)?(y):(z)))
然后在程序中使用上述宏替換即可。
注意:(1)上述宏定義中的每個形參及整個宏體都要加上小括號,原因請參閱“定義帶參數(shù)的宏時,宏體中的形參為什么一定要加小括號?”專題。(2)該宏定義中使用了方法2中(3)的算法。也可以使用其中的(1)或(2)的算法來定義宏體。
(2)定義帶二個參數(shù)的宏
#define MAX(x,y) ((x)>(y)?(x):(y))
使用時,應(yīng)該這樣:MAX(MAX(a,b),c),其中的a、b、c為實參,它的算法與方法2中的(2)是一樣的。
轉(zhuǎn)貼自:http://www.hljcre.com/dispbbs.asp?boardID=15&ID=1866
|