已知某餐馆近三年每月的营业额(单位为万)为:
2019年:12.3,11.5,12.4,13.8,17.5,16.4,12.7,13.2,15.7,13.0,16.9,18.4
2020年:18.6,13.4,13.3,16.2,17.0,17.9,17.2,18.1,19.8,19.3,18.2,18.5
2021年:22.3,21.2,22.3,23.5,22.7,23.7,24.9,24.1,25.3,26.4,26.8,27.3
编写一个完整的程序,实现以下功能:
1)定义一个数组,表达所有月份营业额
2)写一个函数,返回一个数组,表达每年的营业总额
3)写一个函数,返回一个数组,表达每年的营业税
(计算方法:营业总额30万内免税,30万到50万以内1.5%,50万到100万3%,100万到200万5%,200万以上10%)
4)写两个函数,分别计算某年某月的同比和环比比例。
(环比是相邻两个月份增长率,同比是相邻两年同月份增长率)
定义一个月份营业额的数组,长度为12,将三年每个月的营业额相加
#include <iostream>
using namespace std;
float yye[3][12] = {{12.3,11.5,12.4,13.8,17.5,16.4,12.7,13.2,15.7,13.0,16.9,18.4},
{18.6,13.4,13.3,16.2,17.0,17.9,17.2,18.1,19.8,19.3,18.2,18.5},
{22.3,21.2,22.3,23.5,22.7,23.7,24.9,24.1,25.3,26.4,26.8,27.3}};
void calcMonth(float a[])
{
for(int i=0;i<12;i++)
{
for(int j=0;j<3;j++)
a[i] += yye[j][i];
}
}
void calcTotal(float a[])
{
for(int i=0;i<3;i++)
{
for(int j=0;j<12;j++)
a[i] += yye[i][j];
}
}
void calcTotalFax(float a[],float b[])
{
for(int i=0;i<3;i++)
{
if(a[i] <= 30)
b[i] = 0;
else if(a[i] <= 50)
b[i] = a[i]*0.015;
else if(a[i] <= 100)
b[i] = a[i]*0.03;
else if(a[i] <= 200)
b[i] = a[i]*0.05;
else
b[i] = a[i]*0.1;
}
}
int tb(int year,int month,float &t)
{
if(year < 2019 || year > 2021)
return 0;
if(month < 1 || month > 12)
return 0;
if(year == 2019 && month == 1)
return 0;
float now,prev;
now = yye[year-2019][month-1];
if(month == 1)
prev = yye[year-2020][11];
else
prev = yye[year-2019][month-2];
t = (now-prev)/prev*100;
return 1;
}
int hb(int year,int month,float &t)
{
if(year < 2020 || year > 2021)
return 0;
if(month < 1 || month > 12)
return 0;
float now,prev;
now = yye[year-2019][month-1];
prev = yye[year-2020][month-1];
t = (now-prev)/prev*100;
return 1;
}
int main()
{
float total[3] = {0};
float totalFax[3] = {0};
float y[12] = {0};
int res;
calcMonth(y);
cout<<"每月营业额为:"<<endl;
for(int i=0;i<12;i++)
cout<<y[i]<<" ";
cout<<endl;
calcTotal(total);
cout<<"每年营业额为:"<<endl;
for(int i=0;i<3;i++)
cout<<total[i]<<" ";
cout<<endl;
cout<<"每年营业税为:"<<endl;
calcTotalFax(total,totalFax);
for(int i=0;i<3;i++)
cout<<totalFax[i]<<" ";
cout<<endl;
cout<<"请输入同比和环比的年份及月份:";
int year,month;
cin>>year>>month;
float t1,t2;
res = tb(year,month,t1);
cout<<"同比增长率为:";
if(res == 0)
cout<<"输入错误"<<endl;
else
cout<<t1<<"%"<<endl;
cout<<"环比增长率为:";
res = hb(year,month,t2);
if(res == 0)
cout<<"输入错误"<<endl;
else
cout<<t2<<"%"<<endl;
return 0;
}
#include <iostream>
#include <array>
constexpr int NUM_MONTHS = 36; // 三年每月个数
constexpr int NUM_YEARS = 3; // 年数
constexpr int NUM_MONTHS_PER_YEAR = NUM_MONTHS / NUM_YEARS; // 每年的月份数
// 营业额数组
const std::array<double, NUM_MONTHS> revenues = {
12.3, 11.5, 12.4, 13.8, 17.5, 16.4, 12.7, 13.2, 15.7, 13.0, 16.9, 18.4,
18.6, 13.4, 13.3, 16.2, 17.0, 17.9, 17.2, 18.1, 19.8, 19.3, 18.2, 18.5,
22.3, 21.2, 22.3, 23.5, 22.7, 23.7, 24.9, 24.1, 25.3, 26.4, 26.8, 27.3};
// 返回一个数组,表达每年的营业总额
std::array<double, NUM_YEARS> getAnnualRevenues()
{
std::array<double, NUM_YEARS> annualRevenues = {0.0, 0.0, 0.0};
for (int i = 0; i < NUM_MONTHS; i++)
{
annualRevenues[i / NUM_MONTHS_PER_YEAR] += revenues[i];
}
return annualRevenues;
}
// 返回一个数组,表达每年的营业税
std::array<double, NUM_YEARS> getAnnualTaxes()
{
std::array<double, NUM_YEARS> annualRevenues = getAnnualRevenues();
std::array<double, NUM_YEARS> annualTaxes = {0.0, 0.0, 0.0};
for (int i = 0; i < NUM_YEARS; i++)
{
double annualRevenue = annualRevenues[i];
if (annualRevenue > 200000)
{
annualTaxes[i] = annualRevenue * 0.1;
}
else if (annualRevenue > 100000)
{
annualTaxes[i] = annualRevenue * 0.05;
}
else if (annualRevenue > 50000)
{
annualTaxes[i] = annualRevenue * 0.03;
}
else if (annualRevenue > 30000)
{
annualTaxes[i] = annualRevenue * 0.015;
}
// 返回某年某月的同比增长率
double getYoYGrowth(int year, int month)
{
if (year == 0)
{
return 0.0; // 第一年没有同比增长率
}
double previousYearRevenue = revenues[(year - 1) * NUM_MONTHS_PER_YEAR + month];
double currentYearRevenue = revenues[year * NUM_MONTHS_PER_YEAR + month];
return (currentYearRevenue - previousYearRevenue) / previousYearRevenue;
}
// 返回某年某月的环比增长率
double getMoMGrowth(int year, int month)
{
if (month == 0)
{
return 0.0; // 第一个月没有环比增长率
}
double previousMonthRevenue = revenues[year * NUM_MONTHS_PER_YEAR + month - 1];
double currentMonthRevenue = revenues[year * NUM_MONTHS_PER_YEAR + month];
return (currentMonthRevenue - previousMonthRevenue) / previousMonthRevenue;
}
int main()
{
std::array<double, NUM_YEARS> annualRevenues = getAnnualRevenues();
std::array<double, NUM_YEARS> annualTaxes = getAnnualTaxes();
std::cout << "Annual revenues: ";
for (int i = 0; i < NUM_YEARS; i++)
{
std::cout << annualRevenues[i] << " ";
}
std::cout << std::endl;
std::cout << "Annual taxes: ";
for (int i = 0; i < NUM_YEARS; i++)
{
std::cout << annualTaxes[i] << " ";
}
std::cout << std::endl;
int year = 1, month = 3;
std::cout << "YoY growth for year " << year + 1 << ", month " << month + 1 << ": " << getYoYGrowth(year, month) << std::endl;
std::cout << "MoM growth for year " << year + 1 << ", month " << month + 1 << ": " << getMoMGrowth(year, month) << std::endl;
return 0;
}
运行结果及代码如下:
代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
#include <iomanip>
using namespace std;
//返回每年的营业总额
float* sumOfEveryYear(float all[])
{
float* sum = new float[3];
for (int i = 0; i < 3; i++)
{
sum[i] = 0;
for (int j = 0; j < 12; j++)
sum[i] += all[i * 12 + j];
}
return sum; //返回每年的营业总额
}
//返回每年的营业税
float* sumOfRate(float *sum)
{
float* r = new float[3];
for (int i = 0; i < 3; i++)
{
if (sum[i] <= 30)
r[i] = 0;
else if (sum[i] <= 50)
r[i] = (sum[i] - 30) * 0.015;
else if (sum[i] <= 100)
r[i] = 20 * 0.015 + (sum[i] - 50) * 0.03;
else if (sum[i] <= 200)
r[i] = 20 * 0.015 + 50 * 0.03 + (sum[i] - 100) * 0.05;
else
r[i] = 20 * 0.015 + 50 * 0.03 + 100 * 0.05 + (sum[i] - 200) * 0.1;
}
return r;
}
//计算环比
void huanBi(float all[], int year, int mon)
{
int index = (year - 2019) * 12 + mon - 1; //得到该日期对应的下标
float r;
if (index == 0)
cout <<"没有2019年1月之前的数据"<<endl;
else
{
r = (all[index] - all[index - 1]) / all[index - 1];
cout << "环比增长:" << fixed << setprecision(2) << r << endl;
}
}
//计算同比
void tongBi(float all[], int year, int mon)
{
int index1,index2;
float r;
if (year == 2019)
{
cout << "没有2019年之前的数据"<<endl;
}
else
{
index1 = (year - 2019) * 12 + mon - 1;
index2 = (year - 2019 - 1) * 12 + mon - 1; //前一年的数据
r = (all[index1] - all[index2]) / all[index2];
cout << "同比增长:" << fixed << setprecision(2) << r << endl;
}
}
int main()
{
float all[] = { 12.3,11.5,12.4,13.8,17.5,16.4,12.7,13.2,15.7,13.0,16.9,18.4,
18.6,13.4,13.3,16.2,17.0,17.9,17.2,18.1,19.8,19.3,18.2,18.5,
22.3,21.2,22.3,23.5,22.7,23.7,24.9,24.1,25.3,26.4,26.8,27.3 }; //保存所有销售额
int i, year, mon;
float* sum = sumOfEveryYear(all); //获得每年的营业总额
float* rate = sumOfRate(sum); //获得每年的营业税
for (i = 0; i < 3; i++)
cout << i + 2019 << "年的营业总额:" << fixed << setprecision(2) << sum[i] << endl;
for (i = 0; i < 3; i++)
cout << i + 2019 << "年的营业税:" << fixed << setprecision(2) << rate[i] << endl;
cout << "请输入年(2019-2021)和月份(1-12): ";
cin >> year >> mon;
//计算同比
tongBi(all, year, mon);
//计算环比
huanBi(all, year, mon);
return 0;
}