C++ if语句如何在for循环中工作
此代码查找动态数组的最大元素C++ if语句如何在for循环中工作,c++,arrays,if-statement,for-loop,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]; }
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;
所以输出是22
我不明白如果选择22作为最大值
这是我对其工作原理的理解:
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;
}
在这一步中
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]与新的最大值So进行比较,而不是
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_元素实际上也是如此。你可以这样称呼它
#include <algorithm>
//...
int *max = std::max_element( x, x + n );
std::cout << "max = " << *max << std::endl;
你确实在某个地方初始化了数组,不是吗?请创建一个并向我们展示。如果x[i]>x[0],它应该是如果x[i]>max。此外,您的数组从未初始化。易卜拉希姆哈迪,您拥有的代码,将为max选择17,前提是您也使用cin为数组输入,您确定您使用了如果x[i]>x[0],而不是如果x[i]>max,正如@zahirdhada所建议的那样?@易卜拉希姆哈迪,您的程序的行为未定义,因为您的数组从未初始化,但假设您使用{3,22,15,17}初始化它,则输出将是17,而不是22。@ebrahimhadi,现在输出将是17,因为if x[i]>x[0]。如果x[i]>max,则输出为22。
#include <algorithm>
//...
int *max = std::max_element( x, x + n );
std::cout << "max = " << *max << std::endl;