if语句如何在for循环中工作

时间:2015-05-29 06:33:01

标签: c++ arrays if-statement for-loop

此代码查找动态数组的最大元素

int i, n, *x, max;
    cout << "eneter a number: ";
    cin  >> n;
    x = new int[n];
    max = x[0];
    for (i = 0; i < n; i++)
    {
        if (x[i] > max)
            {
            max  = x[i];
            }
    }
    cout << max << endl;

    delete []x;

让我们假设我的输入是:

    n=4
   {3, 22, 15, 17}

因此输出为22

我不明白如何选择22max

这是我对其工作原理的理解:

n=4
{3, 22, 15, 17}

x[0] = 3 
first loop i=0 -> x[0]>x[0] false

x[1] = 22
second  loop i=1 -> x[1]>x[0] true

x[2] = 15
third loop i=2 -> x[2]>x[0] true

x[3] = 17
forth loop i=3 -> x[3]>x[0] true

我知道我错了但作为我的假设,17必须是最大值。 我在这里缺少什么?

这是我的全部代码:

#include <iostream>

using namespace std;

int main(){


    int i, n, *x, sum=0, location, max;
    cout << "eneter a number: ";
    cin  >> n;
    x = new int[n];
    for(i=0; i<n; i++){

        cin >> x[i];

}
    cout << endl<< x[0];
    max = x[0];
    for (i = 0; i < n; i++)
    {
        if (x[i] > max)
            {
            max  = x[i];
            location = i+1;
            }
    }
    cout << endl<< max;

    delete []x;


}

1 个答案:

答案 0 :(得分:3)

在此步骤中

x[1] = 22
second  loop i=1 -> x[1]>x[0] true

由于if语句的条件值为true,因此执行if语句的子语句

if (x[i] > max)
{
    max  = x[i];
}

和max设置为22。

    max  = x[i];

在以下步骤中,将x [i]与新的最大值进行比较。而不是

x[2] = 15
third loop i=2 -> x[2]>x[0] true

x[3] = 17
forth loop i=3 -> x[3]>x[0] true

正确编写

x[2] = 15
third loop i=2 -> x[2]>max false

x[3] = 17
forth loop i=3 -> x[3]>max false

考虑到标题std::max_element中声明的标准算法<algorithm>实际上是相同的。你可以用以下方式调用它

#include <algorithm>

//...

int *max = std::max_element( x, x + n );

std::cout << "max = " << *max << std::endl;