找到数组最大值的位置

时间:2015-03-02 05:25:08

标签: c++ arrays

#include <iostream>

using namespace std;

int main()
{
    const int MAXNUM = 10; // this code creates 10 variables in fmax
    int fmax[MAXNUM], maximum, i, l; // initialize fmax that contains 10 variables , maximum, i for the loop, and l for storing the location

    cout << "enter 10 numbers: ";

    maximum = fmax[0]; // this sets the maximum to 0

    for(i = 0; i < MAXNUM; i++) // this is the code for finding the maximum numbers
    {
        cin >> fmax[i];
        if(fmax[i] > maximum){
            maximum = fmax[i];
            l = i;
        }
        else{
            maximum = maximum;
            l = l;
        }
    }

    cout << "the maximum number: " << maximum << endl; // outputs the results
    cout << "the location of the number: " << l << endl;

    return 0;
}

我的练习有问题 问题是程序的输出。  它没有显示 最大数量和位置 它总是这样显示

最大数量是:1987579782

号码的位置是:26355764

我需要显示输入的最大数量及其下标我不知道如何 我的代码有问题

这是运动问题

a.write,编译并运行一个c ++程序,将10个整数输入到一个名为fmax的数组中,并确定程序中输入的最大值应该只包含一个循环,最大值应确定为数组元素值正在输入(提示设置最大值等于第一个数组元素,应该在用于输入剩余数组值的循环之前输入。)并跟踪数组中的最大元素和最大值的索引号。

4 个答案:

答案 0 :(得分:4)

您需要在使用之前初始化fmax[MAXNUM]数组。简单地声明一个变量并不能保证它是0.目前fmax[0]的值可以是int范围内的任何值,因为你没有将它初始化为一个值。

您还需要将l变量初始化为0(这就是您获取错误位置的原因)

试试这个:

#include <iostream>

using namespace std;

int main()
{
 const int MAXNUM = 10; // this code creates 10 variables in fmax
int fmax[MAXNUM], maxinum, i, l = 0; // initialize fmax that contains 10 variables , maxinum, i for the loop, and l for storing the location

for(i = 0; i < MAXNUM; ++i)
{
    fmax[i] = 0;
}

cout << "enter 10 numbers: ";

maxinum = fmax[0]; // this sets the maxinum to 0

for(i = 0; i < MAXNUM; i++) // this is the code for finding the maxinum numbers
{
    cin >> fmax[i];
    if(fmax[i] > maxinum){
        maxinum = fmax[i];
        l = i;
    }
    else{
        maxinum = maxinum;
        l = l;
    }
}

cout << "the maxinum number: " << maxinum << endl; // outputs the results
cout << "the location of the number: " << l << endl;

return 0;

}

编辑:由于要求代码只包含一个循环,因此您可能希望更改执行此操作的方式。我上面提供的例子也不是一个非常优雅的方法。我就是这样做的(不使用任何可能令人困惑的C ++标准库函数)

#include <iostream>

int main()
{
    std::cout << "Enter 10 numbers: ";
    const int MAXNUM = 10;
    int fmax[MAXNUM] = {0}; // this is an easy way to initialize the array elements to zero
    int maxNum = 0, location;

    for(int i = 0; i < MAXNUM; i++) {
        std::cin >> fmax[i];
        if(fmax[i] > maxNum) {
            maxNum = fmax[i];
            location = i;
        }
    }

    std::cout << "The maximum number is " << maxNum << std::endl;
    std::cout << "The location of the number is " << location << std::endl;

    return 0;
}

确保您了解其工作原理 - 如果您有任何疑问,请与我联系。

答案 1 :(得分:1)

您正在使用垃圾值初始化maximum

maxinum = fmax[0]; // this sets the maxinum to 0

由于您尚未输入任何元素。

我建议您使用std::max_element库中的内置函数algorithm:它将返回指向max元素的指针,因此,您可以输出max元素的位置及其值:

#include <algorithm>

// Your code
// You should enter the whole array

auto max_element = std::max_element(std::begin(fmax), std::end(fmax));
std::cout << "Position: " << (max_element - std::begin(fmax)) << std::end;
std::cout << "Value: " << *max_element << std::endl;

答案 2 :(得分:1)

默认情况下,C ++中的局部变量(非类)未初始化为零。您的问题是,您使用maxinum的值初始化fmax[0],其开头是垃圾。如果你从不输入任何更大的数字,I的值永远不会改变,也是垃圾。您需要将这些变量显式初始化为零:

int fmax[MAXNUM] = { 0 };
into maxinum = 0, I = 0

答案 3 :(得分:0)

  

maxinum = fmax[0]; // this sets the maxinum to 0

由于您未将maxinum设置为fmax[0],因此未将0设置为0。

你可以这样做:

#include <iostream>

using namespace std;

int main()
{
    const int MAXNUM = 10; // this code creates 10 variables in fmax
    int fmax[MAXNUM], maxinum, i, l; // initialize fmax that contains 10 variables , maxinum, i for the loop, and l for storing the location
    cout << "enter 10 numbers: ";
    for(i = 0; i < MAXNUM; i++) // this is the code for finding the maxinum numbers
    {
        cin >> fmax[i];
        if(i==0)
            maxinum = fmax[i];  //....... this will do what you are trying to achieve
        if(fmax[i] > maxinum){
            maxinum = fmax[i];
            l = i;
        }                      // the else block you wrote is not necessary :)
    }
    cout << "the maxinum number: " << maxinum << endl; // outputs the results
    cout << "the location of the number: " << l << endl;
    return 0;
}