You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++降雨量统计程序并行数组实现及月份显示问题咨询

降雨量统计程序修改方案

核心需求:显示最小/最大降雨量对应的月份

当前代码的GetMinRainfall和GetMaxRainfall仅返回降雨量数值,无法关联到对应月份。需要修改这两个函数,返回对应月份的索引,再结合月份数组获取名称。

关键修改步骤:

  1. 调整函数声明,将返回值从double改为int(返回月份索引),优化函数名表意:
    int GetMinRainfallIndex(double []);
    int GetMaxRainfallIndex(double []);
    
  2. 重写函数实现,记录最小/最大降雨量对应的索引:
    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;
    }
    
  3. 更新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);
    
  4. 修改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函数直接访问,修改输入提示:

  1. 全局声明月份数组:
    const int ARRAY_SIZE = 12;
    const string MONTHS[12] = {
        "January", "February", "March", 
        "April" , "May" , "June",
        "July" , "August" , "September",
        "October", "November", "December"
    };
    
  2. 修改getValues函数的提示语句:
    void getValues(double array[])
    {
        for (int i = 0; i < ARRAY_SIZE; i++)
        {
            cout << MONTHS[i] << ": ";
            array[i] = inputValidate(array[i]);
        }
    }
    
  3. 移除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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 18:32:28