【问题标题】:Why doesn't my getMin function return the smallest value?为什么我的 getMin 函数不返回最小值?
【发布时间】:2022-01-05 00:48:58
【问题描述】:

看来我的小数数组getMin 函数没有返回实际的最小值。我将它设计为也忽略-1。有任何想法吗?这是我如何在一个更大的项目中实现getMin 的示例函数。返回最好的是0.01

#include <stdio.h>

float getMin(float arr[10]) {
    int i = 0;
    float min;
    //find first non-negative value
    for (i; i < 10; i++) {
        if (arr[i] != -1) {
            min = arr[i];
            goto done;
        }
    }
  done:
    for (i; i < 10 - i - 1; i++) {
        if (arr[i] < min && arr[i] != -1) {
            min = arr[i];
        }
    }
    return min;
}

int main() {
    float array[10] = { -1, -1, .03, .02, .01, -1, .05, .001, 5, 0.0125 };
    printf("Hello World");
    float min = getMin(array);
    printf("min: %f\n", min);

    return 0;
}

【问题讨论】:

  • for(i; i&lt;10-i; i++) - 你为什么不去数组的末尾?
  • 哦,我写错了代码。项目中的一个使用 for(i; i
  • 数组中的最后一个元素是`i == 9`。它是一个常数。从哪里开始并不重要。
  • 但它不应该仍将 .001 显示为最小值吗?
  • 如果没有正数会怎样?不需要2个循环。 goto 语句,即使可能,也不应该使用。

标签: arrays c function min minimum


【解决方案1】:

循环测试i &lt; 10 - i - 1 不正确。索引号和要测试的元素数量之间存在混淆。你应该只测试i &lt; 10

这是修改后的版本:

#include <stdio.h>

float getMin(const float arr[10], size_t len) {
    size_t i;
    float min;

    //find first non-negative value
    for (i = 0; i < len; i++) {
        if (arr[i] >= 0)
            break;
    }
    if (i == len) {
        // all values are negative
        return 0;
    }
    min = arr[i];
    for (i++; i < len; i++) {
        if (arr[i] >= 0 && arr[i] < min) {
            min = arr[i];
        }
    }
    return min;
}

int main() {
    float array[10] = { -1, -1, .03, .02, .01, -1, .05, .001, 5, 0.0125 };
    printf("Hello World\n");
    float min = getMin(array, sizeof(array) / sizeof(array[0]));
    printf("min: %f\n", min);

    return 0;
}

输出:

Hello World
min: 0.001000

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-24
    • 1970-01-01
    • 2014-09-09
    • 2019-12-15
    • 1970-01-01
    • 2017-11-25
    • 2019-01-08
    • 1970-01-01
    相关资源
    最近更新 更多