/*
题目:个人所得税问题(结构体数组)
内容: 编写一个计算个人所得税的程序,要求输入收入金额后,能够输出应缴的个人所得税。
作答者:小白杨
收获: 优化算法:运用结构体数组TaxTable[]存储税收金额和相应税率。
*/
/*
#include <stdio.h>
int main()
{
long x,tax,t;
printf("请输入个人的收入:\n");
scanf("%ld",&x);
t = x-3500;
if(t<=0)
printf("个人收入达不到税收起征点:\n");
else if(t>0&&t<=1500)
{
tax = (x-3500)*0.03;
}
else if(t>1500&&t<=4500)
{
tax = 1500*0.03+(x-5000)*0.1;
}
else if(t>4500&&t<=9000)
tax = 1500*0.03+3000*0.1+(x-8000)*0.2;
else if(t>9000&&t<=35000)
tax = 1500*0.03+3000*0.1+4500*0.2+(x-12500)*0.25;
else if(t>35000&&t<=55000)
tax = 1500*0.03+3000*0.1+4500*0.2+26000*0.25+(x-38500)*0.3;
else if(t>55000&&t<=80000)
tax = 1500*0.03+3000*0.1+4500*0.2+26000*0.25+20000*0.3+(x-58500)*0.35;
else if(t>80000)
tax = 1500*0.03+3000*0.1+4500*0.2+26000*0.25+20000*0.3+25000*0.35+(x-83500)*0.45;
printf("应缴的个人所得税为:%ld\n",tax);
return 0;
}
*/
#include <stdio.h>
typedef struct{
long start;
long end;
double taxrate;
}TAXTABLE; //定义一个结构体数组来存储税收金额和相应税率
volatile long profit; //应用volatile关键字,使profit每一次改变都会被发现
volatile long Tax = 0;
TAXTABLE TaxTable[] = {{3500,5000,0.03},{5000,8000,0.1},{8000,12500,0.2},
{12500,38500,0.25},{38500,58500,0.3},{58500,83500,0.35},{83500,1e10,0.45}};
long calc_Tax(TAXTABLE TaxTable[],int i)
{
if(profit <= 3500||i>6)
{
}
else if(profit>=TaxTable[i].start&&profit<=TaxTable[i].end)
{
Tax += (profit-TaxTable[i].start)* TaxTable[i].taxrate;
//profit -= (profit-TaxTable[i].start);
}
else
{
Tax += (TaxTable[i].end-TaxTable[i].start)* TaxTable[i].taxrate;
calc_Tax(TaxTable,i+1); //应用递归思想
/*在调用一个函数的过程中又出现直接或间接地调用该函数本身,称为函数的递归调用*/
}
return Tax;
}
int main()
{
scanf("%ld",&profit);
printf("%ld\n",calc_Tax(TaxTable,0));
return 0;
}