C++降雨量统计程序并行数组实现及月份显示问题咨询
降雨量统计程序修改方案
核心需求:显示最小/最大降雨量对应的月份
当前代码的GetMinRainfall和GetMaxRainfall仅返回降雨量数值,无法关联到对应月份。需要修改这两个函数,返回对应月份的索引,再结合月份数组获取名称。
关键修改步骤:
- 调整函数声明,将返回值从
double改为int(返回月份索引),优化函数名表意:int GetMinRainfallIndex(double []); int GetMaxRainfallIndex(double []); - 重写函数实现,记录最小/最大降雨量对应的索引:
int GetMinRainfallIndex(double array[]) { int min_index = 0; for (int i = 1; i < ARRAY_SIZE; i++) { if (array[min_index] > array[i]) min_index = i; } return min_index; } int GetMaxRainfallIndex(double array[]) { int max_index = 0; for (int i = 1; i < ARRAY_SIZE; i++) { if (array[max_index] < array[i]) max_index = i; } return max_index; } - 更新
main函数,获取索引并传递给display:int min_index = GetMinRainfallIndex(rainfall); int max_index = GetMaxRainfallIndex(rainfall); double minimum_rainfall = rainfall[min_index]; double maximum_rainfall = rainfall[max_index]; display(total_rainfall, average_rainfall, minimum_rainfall, maximum_rainfall, min_index, max_index); - 修改
display函数参数,接收索引并输出对应月份:void display(double total, double average, double minimum_rainfall, double maximum_rainfall, int min_index, int max_index) { const string MONTHS[12] = { "January", "February", "March", "April" , "May" , "June", "July" , "August" , "September", "October", "November", "December" }; cout << "Total Rainfall for the year is " << total << " inches."; cout << "\nAverage Rainfall for the year is " << average << " inches."; cout << "\nThe least rain fell in " << MONTHS[min_index] << " with " << minimum_rainfall << " inches."; cout << "\nThe most rain fell in " << MONTHS[max_index] << " with "<< maximum_rainfall << " inches."; }
次要需求:输入阶段显示月份名称而非数字序号
将月份数组设为全局常量,让getValues函数直接访问,修改输入提示:
- 全局声明月份数组:
const int ARRAY_SIZE = 12; const string MONTHS[12] = { "January", "February", "March", "April" , "May" , "June", "July" , "August" , "September", "October", "November", "December" }; - 修改
getValues函数的提示语句:void getValues(double array[]) { for (int i = 0; i < ARRAY_SIZE; i++) { cout << MONTHS[i] << ": "; array[i] = inputValidate(array[i]); } } - 移除
display函数内的月份数组声明,复用全局数组。
修改后的完整代码
#include <iostream> #include <iomanip> #include <string> #include <limits> using namespace std; const int ARRAY_SIZE = 12; const string MONTHS[12] = { "January", "February", "March", "April" , "May" , "June", "July" , "August" , "September", "October", "November", "December" }; double inputValidate(double user_number); void getValues(double []); double Total(double []); double average(double); int GetMinRainfallIndex(double []); int GetMaxRainfallIndex(double []); void display(double, double, double, double, int, int); int main() { double rainfall[ARRAY_SIZE]; cout << "Enter Average Rainfall for Each Month:" << endl; getValues(rainfall); double total_rainfall = Total(rainfall); double average_rainfall = average(total_rainfall); int min_index = GetMinRainfallIndex(rainfall); int max_index = GetMaxRainfallIndex(rainfall); double minimum_rainfall = rainfall[min_index]; double maximum_rainfall = rainfall[max_index]; display(total_rainfall, average_rainfall, minimum_rainfall, maximum_rainfall, min_index, max_index); return 0; } double inputValidate(double user_number) { while (!(cin >> user_number) || user_number < 0) { cout << "Error: please enter a positive number." << "Try again: "; cin.clear(); cin.ignore(numeric_limits<streamsize>::max(),'\n'); } return user_number; } void getValues(double array[]) { for (int i = 0; i < ARRAY_SIZE; i++) { cout << MONTHS[i] << ": "; array[i] = inputValidate(array[i]); } } double Total(double array[]) { double total = 0; for (int i = 0; i < ARRAY_SIZE; i++) total += array[i]; return total; } double average(double total) { return total / ARRAY_SIZE; } int GetMinRainfallIndex(double array[]) { int min_index = 0; for (int i = 1; i < ARRAY_SIZE; i++) { if (array[min_index] > array[i]) min_index = i; } return min_index; } int GetMaxRainfallIndex(double array[]) { int max_index = 0; for (int i = 1; i < ARRAY_SIZE; i++) { if (array[max_index] < array[i]) max_index = i; } return max_index; } void display(double total, double average, double minimum_rainfall, double maximum_rainfall, int min_index, int max_index) { cout << "Total Rainfall for the year is " << total << " inches."; cout << "\nAverage Rainfall for the year is " << average << " inches."; cout << "\nThe least rain fell in " << MONTHS[min_index] << " with " << minimum_rainfall << " inches."; cout << "\nThe most rain fell in " << MONTHS[max_index] << " with "<< maximum_rainfall << " inches."; }
内容的提问来源于stack exchange,提问作者Michael Hokanson
相关产品推荐
相关产品推荐

