数组返回索引的最大值

时间:2014-01-01 04:08:14

标签: c++

我试图通过使用函数maxin从数组及其索引号中获取最大值,但我的逻辑不知何故不起作用?

#include <iostream>
#include <conio.h>
#include <proceass.h>

void maxin(double[], int);

void main()
{
    const int k = 10;
    int l = 0;
    double num[k];
    for (int j = 0; j < k; j++)
    {
        cout << "Enter the number " << j + 1 << " = ";
        cin >> num[j];
        if (cin.fail())
        {
            cout << "Wrong data entered " << "\nTry       again";
            getch();
            exit(0);
        }
    }
    maxin(num, l);
    cout << "The Greatest number is = " << num;
    cout << "\nIt is " << l << "th   number";
    getch();
}

void maxin(double k[], int p)
{
    int l, s;
    l = 10;
    s = 0;
    double m;
    for (int n = 0; n < l; n++)
    {
        if (k[s] > k[n++])
        {

            m = k[n];
        }
        else
        {
            m = k[n++];
            s = ++;
        }
    }
    p = s;
    k[s] = m;
}

2 个答案:

答案 0 :(得分:2)

您的maxin函数正在您的程序上调用Undefined Behavior,以便访问超出数组k范围的区域。发生这种情况是因为n循环语句中不仅for递增,而且在每次迭代时评估的if语句中也是如此。这也发生在else语句中,这是问题的另一种情况。

n小于l时,n++将为>= l,随后取消引用该地址k[n++]将导致未定义的行为。之后,您的程序可能会发生任何事情,包括有效或无效的副作用。

当在数组中找到最大值/最小值时,通常将变量设置为数组中的任意值(通常是第一个索引),然后执行迭代以检查数组中的任何其他值是否更小/大于那个变量。当该条件通过时,变量将设置为数组中的新值。

此外,由于您说您需要将变量设置为找到最大值的索引,因此您必须通过引用传递p

答案 1 :(得分:2)

STL方法:

vector< double > v = {1,2,3,4,5};

auto maxElemIter = std::max_element(begin(v), end(v));

cout << "Max is: " << *maxElemIter;

cout << ", at index: " << distance(begin(v), maxElemIter) << endl;

(我知道,这是一个残酷的建议,考虑到上面提到的代码......)