返回:贺老师课程教学链接
在学习分支结构时,我们做过一个个人所得税计算器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超过1500元至4500元的部分1053超过4500元至9000元的部分20U54超过9,000元至35,000元的部分25055超过35,000元至55,000元的部分30'556超过55,000元至80,000元的部分35U057超过80,000以上45505例如:王某月收入总额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; } 相关资源:个税程序设计