c++ 如何用函数返回二维数组中一行的索引?

k3bvogb1  于 2023-01-15  发布在  其他
关注(0)|答案(2)|浏览(81)

我想设计一个模块化程序来分析一年的降雨量数据,除了main函数之外,这个程序还应该有一个getData函数,用于从用户那里接收12个月的总降雨量,并将其存储在一个double类型的二维数组中,它还应该有四个值返回函数,用于计算totalRainfallaverageRainfalldriestMonthwettestMonth。这最后两个函数返回具有最低和最高降雨量的月份数,而不是那几个月的降雨量。注意这个月的数字可以用来获得那几个月的降雨量。此信息应由main或由main调用的displayReport函数使用,以打印类似于以下内容的汇总降雨量报告:
这是我写的代码,我继续得到0返回,我不知道我做错了什么。

const int months = 12;
const int rain = 1;

void getData(double[months][rain], int, int);
double totalRainfall(double[months][rain], int, int);
double averageRain(double, int);
double driestMonth(double[months][rain], int, int);

int main()
{   
    double totalRain;
    double averageRainfall;
    int leastMonth;
    double rainfall[months][rain];
    
    getData(rainfall, months, rain);
    totalRain = totalRainfall(rainfall, months, rain);
    averageRainfall = averageRain(totalRain, months);
    leastMonth = driestMonth(rainfall, months, rain);
    
    cout << averageRainfall << endl;
    cout << leastMonth;
}

void getData(double rainfall[months][rain], int months, int rain)
{   
    double rainAmount;
    
    for(int row = 0; row < months; row++)
    {   
        for(int column = 0; column < rain; column++)
        {
            cout << "enter rain for month " << (row+1) << "--->";
            cin >> rainAmount;

            while(rainAmount <= 0)
            {
                cout << "rainfall must be greater then 0" << endl;
                cout << "enter rainfall ---> ";
                cin >> rainAmount;
            }

            rainfall[row][column] = rainAmount;
        }
    }
}

double totalRainfall(double rainfall[months][rain], int months, int rain)
{   
    double totalRain = 0;

    for (int column = 0; column < months; column++)
    {
        for(int row = 0; row < rain; row++)
        {
            totalRain += rainfall[column][row];
        }
    }
    return totalRain;
}

double averageRain(double totalRain, int months)
{   
    double averageRainfall;
    averageRainfall = totalRain / months;
    return averageRainfall;
}

double driestMonth(double rainfall[months][rain], int months, int rain)
{
    double leastRainMonth = rainfall[0][0];
    int leastMonth;
    
    for(int row = 0; row < months; row++)
    {
        for(int column = 0; column < rain; rain++)
        {
            if(rainfall[row][column] < leastMonth)
            {
                leastRainMonth = rainfall[row][column];
                leastMonth = row;
            }   
        }   
    }
    
    return leastMonth;
}
kxe2p93d

kxe2p93d1#

看起来这是一个赋值语句,你需要自己去找,所以我不打算给予你代码。你可以声明一个dbl_array[sizex][sizey];,但是有两件事:
结构double dbl_array[sizex][sizey]是一个sizex指针数组,指向sizey双精度数组,所以你的数据结构可能不是你需要生成的二维数组,我的猜测是类似this
另一个区别是通过值 * 和通过引用 * 将变量传递给函数。您是通过值传递函数的,所以当函数结束时,对输入数组所做的更改会丢失。
这是一个非常重要的概念,你可能想先了解一下,看这里。

0dxa2lsx

0dxa2lsx2#

在函数driestMonth中:

  • 您应该初始化leastMonth,否则可能返回不确定的未初始化值。
  • 您应该在内部循环中递增column,而不是rain
  • 您应该比较rainfall[row][column]leastRainMonth,而不是leastMonth

固定代码:

double driestMonth(double rainfall[months][rain], int months, int rain)
{
    double leastRainMonth = rainfall[0][0];
    int leastMonth = 0; // initialize this
    
    for(int row = 0; row < months; row++)
    {
        for(int column = 0; column < rain; column++) // increment proper thing
        {
            if(rainfall[row][column] < leastRainMonth) // compare with proper thing
            {
                leastRainMonth = rainfall[row][column];
                leastMonth = row;
            }   
        }   
    }
    
    return leastMonth;
}

相关问题