查找数组

时间:2016-04-27 08:21:47

标签: c++

我坚持练习编程课程。我实际上不希望代码我想要更多的提示。

我有一个分数数组,我需要找到数组中最大的分数。此外,我有一个函数decimal(),它将分数转换为十进制。我的想法是这样的:

struct fraction &greatestFraction(struct fraction fractionArray[], int arrayLength){
    double greatestValue = 0.0;

    for (int i = 0; i < arrayLength; i++) {
        if (decimal(fractionArray[i]) > greastestValue) {
            greatestValue = i;
        }
    }
    return fractionArray[];
}

将分数转换为十进制但我必须返回一个结构。我不知所措。

2 个答案:

答案 0 :(得分:2)

你应该选择第一个元素作为最大值,因为如果数组中的所有元素都是负数,那么你的灵魂就是错误的。

struct fraction &greatestFraction(struct fraction fractionArray[], int arrayLength){
    double greatestValue = fractionArray[0].numer / (double) fractionArray[0].denumer;
    size_t maxIndex = 0;

    for (size_t i = 1; i < arrayLength; ++i) {
        double tmpVal = fractionArray[i].numer / (double) fractionArray[i].denumer;
        if (tmpVal > greatestValue) {
            maxIndex = i;
        }
    }
    return fractionArray[maxIndex];
}

如果您需要更准确的比较,您可以这样做:

bool greater(struct fraction& a, struct fraction& b) {
    return a.numer * b.denumer > a.denumer * b.numer;
}

struct fraction &greatestFraction(struct fraction fractionArray[], int arrayLength){
    double greatestValue = fractionArray[0];
    size_t maxIndex = 0;

    for (size_t i = 1; i < arrayLength; ++i) {
        if (greater(fractionArray[i], greatestValue)) {
            maxIndex = i;
        }
    }
    return fractionArray[maxIndex];
}

答案 1 :(得分:0)

试试这个:

struct fraction& greatestFraction(struct fraction fractionArray[], int arrayLength)
{
    double greatestValue = decimal(fractionArray[0]);
    int    greatestValueIndex = 0;

    for (int i=1; i<arrayLength; i++)
    {
        double value = decimal(fractionArray[i]);
        if (greastestValue < value)
        {
            greastestValue = value;
            greatestValueIndex = i;
        }
    }

    return fractionArray[greatestValueIndex];
}