c++打卡第十五天

一、问题描述

 二、设计思路。

①、我们在此使用结构体定义结构体数组,结构体数组中包括每个阶段的征税始末,以及相对应的税率。当我们将工资传入时,会出现相应阶段的部分,以及总共应需缴纳金额。

②、我们设计计算函数,通过for循环进行计算各个阶段的计算,同时使用选择语句,判断工资是否完全在此阶段,如8999在4500~9000阶段,但并不完全包括,那么此时就需要使用当前的工资减去起始工资,乘以税率,得到当前阶段所需要缴纳的税费。

三、流程图

  

四、代码实现

#include<iostream>
using namespace std;
#define Q 3500
typedef struct Wage
{
    long begin;
    long  end;
    double rate;
}Wage;
Wage wages[7]={{0,3500,0.03},{1500,4500,0.1},{4500,9000,0.2},{9000,35000,0.25},{35000,55000,0.3},{55000,80000,0.35},{80000,1e10,0.45}};
double calu(long profit)
{
    int i=0;
    double tax=0;
    profit-=Q;
    for(i=0;i<7;i++)
    {
        if(profit>wages[i].begin)
        {
            if(profit>wages[i].end)
            {
                tax+=(wages[i].end-wages[i].begin)*wages[i].rate;
            }
            else 
            {
                tax+=(profit-wages[i].begin)*wages[i].rate;
            }
        }
        else
        {
            break;
        }
        cout<<"本阶段征收范围为:"<<wages[i].begin<<"~"<<wages[i].end<<",该范围所缴纳金额为"<<tax<<"超出该范围金额为:"<<((profit-wages[i].end)>0?(profit-wages[i].end):0)<<endl;
     } 
     return tax;
}
int main()
{
    long profit;
    double tax=0;
    int flag=1;
    while(flag)
    {
        cin>>profit;
        tax=calu(profit);
        cout<<"此人最终所交的税费为:"<<tax<<endl;
        cout<<"如果想要继续测试工资所交的税费,请输入1,否则输入0"<<endl; 
        cin>>flag; 
    }
    return 0;
}

五、结果显示

 

posted @ 2023-04-25 20:13  七安。  阅读(13)  评论(0编辑  收藏  举报