【发布时间】: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
我不明白如果选择22 为max。
这是我对其工作原理的理解:
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] > x[0]),应该是if (x[i] > max)。此外,您的数组永远不会被初始化。 -
ebrahimhadi ,您拥有的代码将为
max选择17,前提是您也使用cin为数组输入,您确定您使用过if (x[i] > x[0])而不是@zahirdhada 建议的if (x[i] > max)? -
@ebrahimhadi,您的程序行为未定义,因为您的数组从未初始化,但假设您使用
{3, 22, 15, 17}对其进行初始化,输出将是17,而不是22。 -
@ebrahimhadi,由于
if (x[i] > x[0]),现在输出将是 17。如果是if (x[i] > max),则输出为 22。
标签: c++ arrays if-statement for-loop