最大和最小的算法? (目标C)

时间:2012-07-29 16:03:58

标签: objective-c max min

这是我正在阅读以学习Objective-C的书的一部分。

  

以下定义了一个名为MAX的宏,它最多给出两个   值:#define MAX(a,b) ( ((a) > (b)) ? (a) : (b) )

然后书中有一些练习要求读者定义一个宏(MIN)以找到最少两个值,另一个要求定义一个名为MAX3的宏最多3个值。我认为这两个定义看起来与MAX类似,但我不明白MAX公式如何找到最大值。我的意思是,如果我这样做了

int limits = MAX (4,8)

它只会赋予limits 8的值。与查找变量的最大值有什么关系?

4 个答案:

答案 0 :(得分:12)

我认为你混淆了价值和变数。您列出的宏示例扩展为两个值之间的比较,并返回两个值中较大的一个(即哪个更大,ab)。所以你是对的,int limits = MAX(4,8)只是将8分配给limits,与查找limits中可以存储的最大值无关。

标题limits.h定义了许多值,例如INT_MAX,它们将告诉您有关系统中变量类型的最小值/最大值的信息。

答案 1 :(得分:12)

将它拆开:

宣言:

#define MAX(a,b)

如果a大于b,请使用a否则使用b

( ((a) > (b)) ? (a) : (b) )

然后要创建MIN表达式,请使用类似的表单:

#define MIN(a,b) ( ((a) < (b)) ? (a) : (b) )
                        ^

然后要创建MAX3表达式,您可以将它们组合在一起:

#define MAX3(a,b,c) ( MAX(a, MAX(b,c)) )

具体来说,此宏旨在与标量(C builtins)一起使用,可以使用<>进行比较。如果你传递一个objc变量,它会导致地址的比较,而MAX会返回一个地址较高的地址(如果你真的想要比较objc实例的地址,那将非常罕见)。

另请注意,这是宏如何咬你的典型例子。使用宏,预处理器只需扩展(文本复制/粘贴)参数,因此:int limits = MAX (4,8)字面上扩展为int limits = (4 > 8 ? 4 : 8)。如果您撰写MAX(x,++y),那么y如果y大于或等于x,则{}会增加两倍,因为它会扩展为:int limits = (x > ++y ? x : ++y)

答案 2 :(得分:0)

通常,您将使用MAX()或MIN()宏来获取一对变量中的较高/较低者,或变量和常量,甚至一对宏常量或其他非变量中的较高者/较低者。文字常量表达式。你通常不会像你在问题中那样提供2个字面常量。

答案 3 :(得分:-1)

max(Objective-C)算法

 // get max value
- (float)maxValue:(NSArray *)arrValue
{
    float maxValue = 0.0;
    for (NSString *value in arrValue) {
        float compareValue = [value floatValue];

        if (compareValue > maxValue) {
            maxValue = compareValue;
        }

    }

    return maxValue;
}


NSArray *number=[NSArray arrayWithObjects:[NSNumber numberWithFloat:57.02], [NSNumber numberWithFloat:55.02], [NSNumber numberWithFloat:45.02], nil];

NSLog(@"%f", [self maxValue:number]);

result 57.020000