未初始化数组中的最小值和最大值
Min and Max in Uninitialized Array
任务是将 12 个月的降雨量存储到一个数组中。然后根据收集的数据计算总和、平均值、最小值和最大值。我发现总和和平均值很好。我不知道我的最大值和最小值在哪里出错了。
#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;
}
我建议在 C++11 中使用std::array
和基于范围的 for 循环。 这不太容易出错。
#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";
}
首先,您应该检查循环是否cin >> rain[i]
而不是rain[13]
。并且min
/max
应使用现有值进行初始化。
您的数组未初始化,因此您指向无用的值。
您可以执行以下操作:
double max = 0;
double min = std::numeric_limits<double>::max();
// ...
double rain[13]; // uninitialized here
double sum = 0;
double max = rain[0]; // garbage
double min = rain[0]; // garbage
// ...
初始化max
和min
时,rain[0]
指向垃圾。您应该在将有意义的数据读入 rain
后声明和初始化max
和min
。
这样做:
double max = rain[0];
double min = rain[0];
在未初始化的数组中,与将一些垃圾值放在变量 max 和 min,您必须初始化为其他值,数组 rain 也是如此。
下一个问题是这样的:
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 的"i"是正确的事情
另一方面,用于查找最大值和最小值的循环不完整(您循环了 12 次,忽略了索引 0 处的元素(
for ( count = 1; count < 13; count++)
如果你的数组有 13 个元素,你必须这样做
for ( count = 0; count < 13; count++)
相关文章:
- 查找矩阵C++中每一列和每一行的最小和最大元素
- 如何在数组中交换最小和最大的位置?
- 需要使用模板查找数组的第二个最小和最小值
- 使用 std::min_element、std::max_element 查找矢量中的最小和最大元素
- 为什么我不能使用最小和最大这两个词作为变量名称?
- 在运行时为随机分布类成员设置最小和最大边界?
- 如何使用气泡排序从最小到最大对 4 个数组进行排序? C++
- 如何拒绝 cin 中的字符输入并定义最小和最大整数值
- 类型 *阵列的最小或最大值的类功能 *
- C++ 100 万个变量名称的最小和最大变量名称长度是多少
- 想要以正弦曲线的形式在循环中连续将值从最小变为最大
- 数组内存地址总是按最小到最大的顺序排列吗
- 使用向量而不是数组从最小到最大对数字进行排序C++
- 在 c++ 中给出两个整数向量(大小和类型相同),我想从最小到最大元素对一个进行排序,并更改第二个向量的顺序
- 在用户定义结构的向量中查找最小和最大元素的索引
- 二进制搜索,用于查找排序数组中比给定值最小和最大的元素
- c++中的函数如何以最小的复制返回值或引用?
- 我如何确定我可以传递给编译器选项的最小和最大值
- 如何为每个光栅带设置最小和最大颜色值(使用GDAL)
- 在c++中最小化分支-如果值是非零则递增