0

我正在尝试编写一个返回数组最小值的函数。到目前为止,我有这个,但它返回的只是 0。

我看不到它会如何返回 0,因为我正在使用 for 循环循环遍历数组。也许它没有像我想的那样循环遍历数组值。谁能详细说明这段代码中的逻辑和谬误?

#include <iostream>

using namespace std;

int newArray[9] = {4,5,9,3,6,2,1,7,8};


int minArray()
{
    int index = 1;
    int minimum;

    for (int i = 0; i < 9; i++)
    {
        if (newArray[i] > newArray[index])
        {
            minimum = newArray[index];
        }
        index++;

    }

    return minimum;
}


int main()    
{   
    cout << "original array:\n ";
    for (int i = 0; i < 9; i++)
    {
        cout << newArray[i] << ", ";
    }

    cout << "minimum value of array: ";
    cout << minArray();

    return 0;
}
4

4 回答 4

1

一个好主意可能是使用数组中的元素初始化最小值。所以:

minimum = newArray[0]

在您的循环中(伪代码假设您不想要答案):

if: newArray[pos] < minimum

        minimum = newArray[pos];
于 2013-02-17T18:31:30.620 回答
0

minimum变量最初应分配给数组中的一个值,然后将数组中的每个元素与minimum. 如果小于,则分配minimum该值:

int minArray()
{
    int minimum = newArray[0];
    int index = 0;

    for (int i = 0; i < 9; i++)
    {
        if (newArray[i] < minimum)
        {
            minimum = newArray[i];
        }
        index++;

    }
  return minimum;
}
于 2013-02-17T18:31:46.667 回答
0

我会做这样的事情:

#include <iostream>

int minArray(int a[], int size) {
    if (size <= 0) return 0; //
    int m = a[0];
    for (int i = 1; i < size; ++i) {
       if (a[i] < m) m = a[i];
    }
    return m;
}

int main() {
    int a[] = { 4, 3, 6, 2 };
    std::cout << minArray(a, 4);
    return 0;
}
于 2013-02-17T18:40:03.373 回答
0

minimum您应该使用某个已知值或最大整数值进行初始化。

int minArray()
{
    int minimum = newArray[0];

    for (int i = 1; i < 9; i++)
    {
        if (minimum > newArray[i])
        {
            minimum = newArray[i];
        }
    }

    return minimum;
}

而且你处理错了index(实际上你根本不需要它)。如何index代替minimum

int minArray()
{
    int index = 0;

    for (int i = 1; i < 9; i++)
    {
        if (newArray[index] > newArray[i])
        {
            index = i;
        }
    }

    return newArray[index];
}

这两个示例都应该可以正常工作,但我建议先使用。

于 2013-02-17T18:46:49.170 回答