我想设计一个模块化程序来分析一年的降雨量数据。除了main之外,程序还应该有一个getData
函数,该函数接受用户提供的12个月的总降雨量,并将其存储在double类型的二维数组中。它还应该有四个返回值函数,用于计算totalRainfall
、averageRainfall
、driestMonth
和wettestMonth
并返回到主机。最后两个函数返回降雨量最低和最高的月份的数字,而不是那些月份的降雨量。注意,这个月的数字可以用来获得那些月份的降雨量。该信息应由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;
}
看起来这是一个你需要自己找到的赋值,所以我不打算给你代码。你可以声明一个dbl_array[sizex][sizey];
,但是有两件事:
结构体double dbl_array[sizex][sizey]
是一个指向sizey
双精度数组的sizex
指针数组。所以你的数据结构可能不是你需要生成的二维数组。我猜大概是这样的。
另一件事是通过和传递变量给函数的区别。的引用。你是按值传递你的函数,所以当你的函数结束时,对输入数组所做的更改将丢失。
这是一个非常重要的概念,你可能想首先理解它,见这里。
函数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;
}