未初始化阵列中的最小值和最大值
任务是取12个月的雨量并将它们存储到数组中。然后根据收集的数据计算总和,平均值,最小值和最大值。我发现总数和平均数很好。我不知道我的最大和最小值出错了。当max
和min
初始化未初始化阵列中的最小值和最大值
#include <iostream>
using namespace std;
int main()
{
//inititalizing variables
double rain[13];
double sum = 0;
double max = rain[0];
double min = rain[0];
int count = 0;
//string highMonth, lowMonth;
//inputing rain values for each month
for (int i = 1; i < 13; i++)
{
cout << "Enter the rainfall (in inches) for month #" << i << ":";
cin >> rain[13];
sum = sum + rain[13];
}
//finding the max
for (count = 1; count < 13; count++)
{
if (rain[count] > max)
{
max = rain[count];
}
}
//finding the min
for (count = 1; count < 13; count++)
{
if (rain[count] < min)
{
min = rain[count];
}
}
//printing results
cout << " The total rainfall for the year is" << sum<<endl;
cout << "The average rainfall is: " << sum/12<<endl;
cout << "The month with the highest rainfall was " << max << endl;
cout << "The month with the lowest rainfall was " << min << endl;
return 0;
}
我建议使用std::array
和基于范围,适用于C++ 11的循环:
你可以这样做。这种方式不太容易出错。
#include <array>
#include <iostream>
int main()
{
//storage variable
std::array<double,12> rain;
//inputing rain values for each month
double sum = 0;
unsigned i = 0;
for (auto &p : rain)
{
std::cout << "Enter the rainfall (in inches) for month #" << ++i << ": ";
std::cin >> p;
sum += p;
}
//finding the max
double max = rain[0];
for (auto &p : rain)
{
if (p > max)
{
max = p;
}
}
//finding the min
double min = rain[0];
for (auto &p : rain)
{
if (p < min)
{
min = p;
}
}
//printing results
std::cout << "The total rainfall for the year is " << sum << "\n";
std::cout << "The average rainfall is: " << sum/12 << "\n";
std::cout << "The month with the highest rainfall was " << max << "\n";
std::cout << "The month with the lowest rainfall was " << min << "\n";
}
甚至更好,只需使用STL。
#include <algorithm>
#include <array>
#include <iostream>
int main()
{
//storage variable
std::array<double,12> rain;
//inputing rain values for each month
unsigned i = 0;
for (auto &p : rain)
{
std::cout << "Enter the rainfall (in inches) for month #" << ++i << ": ";
std::cin >> p;
}
//finding the min, max, average
auto max = *std::max_element(std::begin(rain), std::end(rain));
auto min = *std::min_element(std::begin(rain), std::end(rain));
auto sum = std::accumulate(std::begin(rain), std::end(rain), double{0.0});
//printing results
std::cout << "The total rainfall for the year is " << sum << "\n";
std::cout << "The average rainfall is: " << sum/12 << "\n";
std::cout << "The month with the highest rainfall was " << max << "\n";
std::cout << "The month with the lowest rainfall was " << min << "\n";
}
// ...
double rain[13]; // uninitialized here
double sum = 0;
double max = rain[0]; // garbage
double min = rain[0]; // garbage
// ...
rain[0]
点垃圾。将有意义的数据读入rain
之后,您应该声明并初始化max
和min
。
我在找到max for循环之前初始化了max,就是你所说的。我也在min循环之前初始化min。 – Cantum2
这样做:
double max = rain[0];
double min = rain[0];
在未初始化数组
是一样的把一些垃圾值在 变量最大和分钟,你必须初始化为其它值,同样的阵列雨。
下一个问题是这样的:
for (int i = 1; i < 13; i++)
{
cout << "Enter the rainfall (in inches) for month #" << i << ":";
cin >> rain[13];
sum = sum + rain[13];
}
你是在这绝对是你的界限的数组中的索引13写,要来试图..
cin >> rain[i];
将与正确的事“我“从0到13独家
另一方面,你的循环寻找最大值和最小值是不完整的(你正在循环12次忽略索引0处的元素)
for (count = 1; count < 13; count++)
如果你的阵列有13种元素,你必须做
for (count = 0; count < 13; count++)
我的数组只能有12个值。所以我会说(count = 0; count Cantum2
@ Cantum2:是的,这是正确的。 –
@ Cantum2 - ** for循环的所有**应该从0运行到12. –
首先,你应该检查你的循环是cin >> rain[i]
,而不是rain[13]
。 和min
/max
应使用现有值进行初始化。
您的数组未初始化,因此您指向无用的值。
double max = 0;
double min = std::numeric_limits<double>::max();
我现在能够找到最大值,但现在每次最小值都是0。我不承认为什么?!?!?!为(计数= 0;计数 Cantum2
这个答案也没有任何意义。从输入读取数组,然后*然后*设置'double max = rain [0]; double min = rain [0];'。 –
你应该初始化最大值和最小值要下雨[0]输入你的值后,否则可以有任何数量的在它 –
你出了阵列的界限。您正在将每个读取的值*写入数组的末尾。我也不知道你来自哪个星球,但这里一年有十二个月,而不是十三个月。 –
我想你应该在'rain [i]'中改变'rain [13]'来存储在正确的位置。此外,您还希望将来使用'std :: vector'来简化您的生活。 –