查找数组中的最大数字返回max int value

时间:2017-01-04 14:14:24

标签: c++

我想使用函数找到数组中的最大和最小数字。这是我的代码:

#include <stdio.h>

void findLowHigh(int* numbers, int size, int* min, int* max) {
    for(int i = 0; i < size; i++) {
        if (*min > numbers[i]) *min = numbers[i];
        else if (*max < numbers[i]) *max = numbers[i];
    }
}

int main() {
    printf("##### Find lowest and highest number in collection #####");
    printf("\n Array checked: [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]");
    int min, max;
    int numbers1[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    findLowHigh(numbers1, 10, &min, &max);
    printf("\nMin: %d\nMax: %d", min, max);

    printf("\n Array checked: [ 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 ]");
    int numbers2[10] = { 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 };
    findLowHigh(numbers2, 10, &min, &max);
    printf("\nMin: %d\nMax: %d", min, max);

    return 0;
}

还有输出:

##### Find lowest and highest number in collection #####
Array checked: [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]
Min: 1
Max: 32767
Array checked: [ 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 ]
Min: 1
Max: 32767
Process finished with exit code 0

我猜测指针有问题,但它是什么?

5 个答案:

答案 0 :(得分:2)

你应该初始化你的最小/最大:

int min, max;

像:

int min=INT_MAX, max=INT_MIN;

更多的c ++风格,你会使用#include <limits>和:

int min = std::numeric_limits<int>::max();
int max = std::numeric_limits<int>::min();

[编辑]

您还应该(在评论中)删除逻辑中的else

if (*min > numbers[i]) *min = numbers[i];
    else if (*max < numbers[i]) *max = numbers[i];

否则您可能永远不会在结果中找到最大值。

答案 1 :(得分:1)

if (*min > numbers[i])假设*min已包含合法值。

但是你没有初始化你传递地址的整数。一个可能的修复(包括limits.h之后(或climits,如果真的正在编译C ++)):

int min=INT_MAX;
int max=INT_MIN;

正如 Nathan Oliver 在评论中所建议的那样。更强大的解决方案是将minmax设置为数组的第一个元素。

if (min && max && numbers && size > 0) {
  *min = numbers[0];
  *max = numbers[0];
}

答案 2 :(得分:1)

当您与min和max的值进行比较时,在将值传递给function之前,您应该初始化值min = INT_MAX和max = INT_MIN。

答案 3 :(得分:1)

int min, max;未初始化,可以包含任何值。您应该在findLowHigh的开头初始化。在调用findLowHigh之前重置它们很重要,否则过去的结果会对将来的结果产生影响。

您可以简单地将它们设置为numbers的第一个元素,并在循环中跳过该元素。请务必先检查size是否为非零。

void findLowHigh(int* numbers, int size, int* min, int* max) 
{
    if(size > 0)
    {
        *min = numbers[0];
        *max = numbers[0];

        for(int i = 1; i < size; i++) {
            if (*min > numbers[i]) *min = numbers[i];
            if (*max < numbers[i]) *max = numbers[i]; // Also, remove this else
        }
    }
}

编辑:您必须决定size为零时应该发生什么。空列表的最小值和最大值是多少?

答案 4 :(得分:0)

初始化int min, max;之类的变量时,将它们留空而不是数字,这意味着min和max会自动设置为未定义的数字。