《C语言及程序设计》实践参考——个税计算器之码数分离

返回:贺老师课程教学链接

【项目5-个税计算器之码数分离】

在学习分支结构时,我们做过一个个人所得税计算器if语句版,在其中,税率等数据直接写进了程序。这并不是一个好的方案。
下面定义了一个结构体数组,保存各个收入范围个税计算的基础数据,这样,一定程度上,将代码与数据分离,这是工程中常见的做法。
请先对照附后的个人所得税计算方法,理解下面的结构体数组:

struct TaxNode
{
    int payTax;
    double rate;
    int deducted;
} taxNode[10]=
{
    {0,0.03,0},
    {1500,0.10,105},
    {4500,0.20,555},
    {9000,0.25,1005},
    {35000,0.30,2755},
    {55000,0.35,5505},
    {80000,0.45,13505}
};

编写程序,利用这个结构体数组,输入个人月收入总额,计算并输出他本月应缴税款和税后收入。

附:关于个人所得税的有关背景知识

计算方法:个人所得税=(收入总额-3500)*税率-速算扣除数
从2011年9月1日起,我国个人所得税起征点基数为3500元,超出部分按以下7级计算。

序号收入范围税率速算扣除数
1超过0至15003%0
2超过1500元至4500元的部分10%105
3超过4500元至9000元的部分20%555
4超过9,000元至35,000元的部分25%1005
5超过35,000元至55,000元的部分30%2755
6超过55,000元至80,000元的部分35%5505
7超过80,000以上45%13505

例如:王某月收入总额3600元,个人所得税=(3600-3500)*3%=3元;
再例:李某月收入13500元,个人所得税=(13500-3500)*25%-1005=2500-1005=1495元。
更多了解速算扣除数,请找百度百科。

[参考解答]

#include <stdio.h>
#define BaseSalary 3500
struct TaxNode
{
    int payTax;
    double rate;
    int deducted;
} taxNode[10]=
{
    {0,0.03,0},
    {1500,0.10,105},
    {4500,0.20,555},
    {9000,0.25,1005},
    {35000,0.30,2755},
    {55000,0.35,5505},
    {80000,0.45,13505}
};
int main()
{
    double dSalary,dTax=0,dNetIncome=0;
    double dValue;   //表示超出起征点的收入
    printf("请输入您本月的收入总额(元):");
    scanf("%lf", &dSalary);
    dValue=dSalary-BaseSalary;
    int i;
    if(dValue<=0.0)
    {
        dTax=0.0;
    }
    else
    {
        for(i = 6; i >= 0; i--)
        {
            printf("%d\n",i);
            if(dValue > taxNode[i].payTax)
            {
                dTax = dValue * taxNode[i].rate - taxNode[i].deducted;
                break;
            }
        }
    }
    dNetIncome=dSalary-dTax;   //计算得到
    printf("您本月应缴个人所和税 %.2lf 元,税后收入是 %.2lf 元。\n", dTax, dNetIncome);
    printf("依法纳税,共享繁荣。谢谢使用!\n");
    return 0;
}
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页