某公司从2000年开始,连续三年的销售额如下:
double[][] revenues= {
{56.4, 69.4, 67.2, 65.6, 65.2, 64.4, 66.7, 67.4, 70.2, 70.4, 78.7, 79.4},
{76.2, 88.3, 87.5, 90.2, 85.9, 78.0, 88.4, 89.2, 88.4, 86.9, 86.3,90.4},
{95.3, 94.5, 90.2, 95.0, 97.2, 97.1, 95.1, 90.2, 95.3, 98.2, 92.3, 95.9}
};
请写使用函数按顺序完成以下功能:
1)分别计算三年的平均销售额,并得到一个新的三个元素的平均销售额数组。
2)获取平均销售额最高的哪个年度。
3)合并三个年度的销售额,得到一个一维的销售额数组。
4)统计各个销售额段的月份数。(50-60,60-70,70-80,80-90,90-100)。
5)根据给定的年份和月份,获取销售额。
6)查找最大销售额对应的年份和月份。
#include <iostream>
using namespace std;
const int MonthCount = 12;//每年月份数
double Revenues[][MonthCount] = {
{56.4, 69.4, 67.2, 65.6, 65.2, 64.4, 66.7, 67.4, 70.2, 70.4, 78.7, 79.4},
{76.2, 88.3, 87.5, 90.2, 85.9, 78.0, 88.4, 89.2, 88.4, 86.9, 86.3, 90.4},
{95.3, 94.5, 90.2, 95.0, 97.2, 97.1, 95.1, 90.2, 95.3, 98.2, 92.3, 95.9},
};
const int StartYear = 2000;//起始年份
const int YearCount = sizeof(Revenues) / (MonthCount * sizeof(double));//年份数量
const int TotalMonthCount = YearCount * MonthCount;//总月份数量
//获取每年月平均销售额
void get_month_average(double* avg)
{
for (int i=0; i<YearCount; ++i)
{
double sum = 0;
for (int j=0; j<MonthCount; ++j)
{
sum += Revenues[i][j];
}
avg[i] = sum / MonthCount;
}
}
//获取平均销售额最高的年份
int get_max_month_average_year(void)
{
double avg[YearCount];
get_month_average(avg);
//查找最高的年份
double max = 0.0;
int maxIndex = 0;
for (int i=0; i<YearCount; ++i)
{
if (max < avg[i])
{
max = avg[i];
maxIndex = i;
}
}
return StartYear + maxIndex;
}
//合并三个年度销售额
void get_merge_data(double* merge)
{
for (int i=0; i<YearCount; ++i)
{
for (int j=0; j<MonthCount; ++j)
{
merge[i * MonthCount + j] = Revenues[i][j];
}
}
}
//获取销售额段的月份数
int get_range_month(double minValue, double maxValue)
{
int count = 0;
for (int i=0; i<YearCount; ++i)
{
for (int j=0; j<MonthCount; ++j)
{
if (Revenues[i][j] < maxValue && Revenues[i][j] >= minValue)//使用了左闭又开区间
{
++count;
}
}
}
return count;
}
//根据定的年份和月份获取销售额
double get_data(int year, int month)
{
do
{
if (year >= StartYear + YearCount || year < StartYear)
{
break;
}
if (month < 1 || month > 12)
{
break;
}
return Revenues[year - StartYear][month - 1];
} while (false);
return 0.0f;
}
//查找最大销售额对应的年份和月份
void get_max_month(int& year, int& month)
{
double max_value = 0.0;
int max_year = 0;
int max_month = 0;
for (int i = 0; i < YearCount; ++i)
{
for (int j = 0; j < MonthCount; ++j)
{
if (Revenues[i][j] > max_value)
{
max_year = i;
max_month = j;
max_value = Revenues[i][j];
}
}
}
//
year = StartYear + max_year;
month = max_month + 1;
}
int main()
{
//获取每年月平均销售额
double avg[YearCount];
get_month_average(avg);
for (int i=0; i<YearCount; ++i)
{
cout << "year = " << StartYear + i << " average = " << avg[i] << endl;
}
//获取平均销售额最高的年份
cout << "平均销售额最高的年份 = " << get_max_month_average_year() << endl;
//合并三个年度销售额
double merge[TotalMonthCount];
get_merge_data(merge);
for (int i=0; i<TotalMonthCount; ++i)
{
cout << merge[i] << " ";
}
cout << endl;
//获取销售额段的月份数
double range[][2] = {
{50.0, 60.0},
{60.0, 70.0},
{70.0, 80.0},
{80.0, 90.0},
{90.0, 100.0},
};
for (int i=0; i<sizeof(range) / 2 / sizeof(double); ++i)
{
cout << "[" << range[i][0] << ", " << range[i][1] << ") = " << get_range_month(range[i][0], range[i][1]) << endl;
}
//查找最大销售额对应的年份和月份
int year = 0, month = 0;
get_max_month(year, month);
cout << "最大销售额月份 = " << year << "-" << month;
//根据定的年份和月份获取销售额
do
{
cout << "年份 = ";
cin >> year;
cout << "月份 = ";
cin >> month;
cout << year << "-" << month << " = " << get_data(year, month) << endl;
} while (true);
}