【问题标题】:How if statement work in for loop [closed]if语句如何在for循环中工作[关闭]
【发布时间】:2015-05-29 06:33:01
【问题描述】:

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

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;


}

【问题讨论】:

  • 你在某处初始化数组,不是吗?请创建一个Minimal, Complete, and Verifiable Example 并向我们展示。
  • 而不是if (x[i] &gt; x[0]),应该是if (x[i] &gt; max)。此外,您的数组永远不会被初始化。
  • ebrahimhadi ,您拥有的代码将为max 选择17,前提是您也使用cin 为数组输入,您确定您使用过if (x[i] &gt; x[0]) 而不是@zahirdhada 建议的if (x[i] &gt; max)
  • @ebrahimhadi,您的程序行为未定义,因为您的数组从未初始化,但假设您使用{3, 22, 15, 17} 对其进行初始化,输出将是17,而不是22
  • @ebrahimhadi,由于if (x[i] &gt; x[0]),现在输出将是 17。如果是 if (x[i] &gt; max),则输出为 22。

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


【解决方案1】:

在这一步

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

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

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

并且最大值设置为 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

考虑到在标头&lt;algorithm&gt; 中声明的标准算法std::max_element 实际上是相同的。你可以这样称呼它

#include <algorithm>

//...

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-13
    • 1970-01-01
    相关资源
    最近更新 更多