返回:贺老师课程教学链接
【项目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至1500 | 3% | 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;
}