我最近完成了一项计算一年内总降雨量,平均降雨量,最高降雨量和最低降雨量的计划。该程序要求用户每月输入降雨量,然后进行计算。当我得到最低和最高的数字时,程序应显示月对应的那些数字,而不是数字本身。
我的程序运行良好,我根本没有任何错误。但是,我注意到,有时,根据输出,我得到以下三种情况之一:
代码如下:
#include<iostream>
#include<string>
using namespace std;
int main()
{
//array containing the months
string months[12] = { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" };
//variables
double data[12];
double sum = 0;
double avg, max1, min1;
string max2, min2;
for (int i = 0; i < 12; i++)//asks the user for input for each month
{
cout << "Enter rainfall for " << months[i] << ": ";
cin >> data[i];
while (data[i] < 0) //input validation
{
cout << "invalid data (negative rainfall) -- retry";
cin >> data[i];
}
}
for (int j = 0; j < 12; j++) //the sum of all of the numbers
{
sum += data[j];
}
max1 = data[0];
for (int k = 0; k < 12; k++) //calculates the biggest number and its month
{
if (data[k] > max1)
{
max1 = data[k];
max2 = months[k];
}
}
min1 = data[0];
for (int l = 0; l < 12; l++) //calculates the least number and its month
{
if (data[l] < min1)
{
min1 = data[l];
min2 = months[l];
}
}
avg = sum / 12;
//output
cout << "Total rainfall: " << sum << endl;
cout << "Average rainfall: " << avg << endl;
cout << "Least rainfall in " << min2 << endl;
cout << "Most rainfall in " << max2 << endl;
return 0;
}
输出示例:
我不知道为什么会这样。我想如果有人能帮助我回答这个问题以及如何解决这个错误。
如果您需要原始问题文本,我也会留在这里。谢谢!
降雨量统计
编写一个程序,让用户将12个月(从1月开始)的总降雨量输入到一系列双打中。程序应该计算并显示(按此顺序):
全年的总降雨量, 月平均降雨量 以及最高和最低金额的月份。
在公历中,月份应表示为月份的英文名称,即:1月,2月,3月,4月,5月,6月,7月,8月,9月,10月,11月,12月。
输入验证:不接受月降雨量数字的负数。输入负值时,程序输出&#34;无效数据(负降雨量) - 重试&#34;并试图重读价值。
提示和输出标签:应使用默认精度显示十进制值,即不指定精度。读取的每个项目都应该通过一个表格的字符串提示&#34;输入MONTH的降雨量:&#34; MONTH是&#34; 1月&#34;或&#34;二月&#34;或......或&#34; 12月和#34;输出应采用以下形式:
Total rainfall: 12.36
Total rainfall: 1.03
Least rainfall in August
Most rainfall in April
具体的降雨量或确定的特定月份取决于实际输入。
答案 0 :(得分:0)
您需要分别设置min2
和max2
分别设置min1
和max1
。
答案 1 :(得分:0)
问题是,如果从未满足以下条件,则永远不要将字符串设置为最大或最小月份:
if (data[k] > max1)
//...
if (data[l] < min1)
您可以在进入循环之前将max2
和min2
设置为第一项,或者只是找到最大的索引和最小值,并使用索引告诉您在月份数组中选择的月份。
int maxIndex = 0;
max1 = data[0];
for (int k = 0; k < 12; k++)
{
if (data[k] > max1)
maxIndex = k;
}
int minIndex = 0;
min1 = data[0];
for (int l = 0; l < 12; l++)
{
if (data[l] < min1)
minIndex = l;
}
max2 = months[maxIndex];
min2 = months[minIndex];