编程要求:
请按题中的功能要求,编写程序并能得到正确的结果。
程序功能:输入一次性的年终奖金额,以及每月工资和薪金、“三险一金“等专项扣除费用(不超过8000元/月),享受子女教育、赡养老人两项专项附加扣除费用(不超过2000元/月),计算并输出个人应缴所得税对应的最少税额。
个人薪金所得税税率表如下表,工资和薪金所得,适用七级超额累进税率,税率为百分之三(3%)至百分之四十五(45%)。
每月工资预扣预缴,采用全年累计预扣预缴方式。个税起征点5000元/月、“三险一金“等专项扣除费用,享受子女教育、赡养老人两项专项附加扣除费用都可以在每月收入里面减免。预缴税款的计费公式:
本期应预扣预缴税额=(累计预扣预缴应纳税所得额×预扣率-速算扣除数)-累计已预扣预缴税额
累计预扣预缴应纳税所得额=累计收入-累计基本减除费用-累计专项扣除-累计专项附加扣除
全年一次性奖金计税方式有两种。
1)综合计税:年终奖并入当年综合所得,和工资薪金所得一起计税。将年终奖金额除以12个月,并入每个月的工资薪金,根据预交税款的计费公式进行计算。
2)单独计税:即不与当年综合所得合并算税,而是通过“分拆”收入降低税率。年终奖个人所得税税率表如下表(注意:年终奖所得税率表与工资、薪金所得的税率表相同,只是计算方式不同)。将年终奖金额除以12个月,以每月平均收入金额来确定税率和速算扣除数,年终奖税款其计费公式:应纳税额=全年一次性奖金收入×适用税率-速算扣除数。
运行示例1:
某创业公司主管A先生,其一次性年终奖为120000元,每月应发工资均为30000元,每月减除费用5000元,“三险一金“等专项扣除4500元,享受子女教育、赡养老人两项专项附加扣除共计2000元,每月减免收入及减免税额等情况,以前三个月为例,应当按照以下方法计算每个月的预扣预缴税额:
1月份:(30000-5000-4500-2000)*3%=555元
2月份:(30000*2-5000*2-4500*2-2000*2)*10%-2520-555=625元,2月份累计预扣预缴应纳税所得额为37000元,已适用10%的税率,
3月份:(30000*3-5000*3-4500*3-2000*3)*10%-2520-555-625=1850元
4月份:(30000*4-5000*4-4500*4-2000*4)*10%-2520-555-625-1850=1850元
5月份:18500*5*10%-2520-555-625-1850*2=1850元
6月份:18500*6*10%-2520-555-625-1850*3=1850元
7月份:18500*7*10%-2520-555-625-1850*4=1850元
8月份:18500*8*20%-16920-555-625-1850*5=2250元,8月份累计预扣预缴应纳税所得额为148000元,已适用20%的税率
9月份:18500*9*20%-16920-555-625-1850*5-2250=3700元
10月份:18500*10*0.2-16920-555-625-1850*5-2250-3700=3700元
11月份:18500*11*0.2-16920-555-625-1850*5-2250-3700*2=3700元
12月份:18500*12*0.2-16920-555-625-1850*5-2250-3700*3=3700元
若年终奖单独计税:120000*10%-210=11790元
A先生需缴纳的所得税:11790+(555+625+1850*5+2250+3700*4)=39270元。
2)若年终奖进行综合计税:
1月份:(30000-5000-4500-2000+120000/12)*3%=855元
2月份:28500*2*10%-2520-855=2325元,2月份累计预扣预缴应纳税所得额为37000元,已适用10%的税率,
3月份:28500*3*0.1-2520-855-2325=2850元
4月份:28500*4*0.1-2520-855-2325-2850=2850元
5月份:28500*5*0.1-2520-855-2325-2850*2=2850元
6月份:28500*6*0.2-16920-855-2325-2850*3=5550元,6月份累计预扣预缴应纳税所得额为148000元,已适用20%的税率
7月份:28500*7*0.2-16920-855-2325-2850*3-5550=5700元
8月份:28500*8*0.2-16920-855-2325-2850*3-5550-5700=5700元
9月份:28500*9*0.2-16920-855-2325-2850*3-5550-5700*2=5700元
10月份:28500*10*0.2-16920-855-2325-2850*3-5550-5700*3=5700元
11月份:28500*11*0.25-31920-855-2325-2850*3-5550-5700*4=6375元,11月份累计预扣预缴应纳税所得额为313500元,已适用25%的税率
12月份:28500*12*0.25-31920-855-2325-2850*3-5550-5700*4-6375=7125元
A先生需缴纳的所得税:855+2325+2850*3+5550+5700*4+6375+7125=53580元。
综合计税-单独计税=53580-39270=14310元,所以A先生采取一次性奖金单独计税法。
运行示例2:
假设B先生年薪为5万元(减除“三险一金”后,没有专项附加扣除项目),他的年终奖为1万元。
单独计税法:年终奖个税的算法是:10000÷12≈833元,适用现行税率表中3%的税率,由此A先生的年终奖应缴税10000×3%-0=300元。
综合计税法:年终奖并入当年综合所得,那么A先生全年收入为6万元,按照年综合所得税率适用表,他的全年收入达到但未超过6万元的起征点,因此无需缴纳个税。
综合计税-单独计税=0-300=-300元,所以B先生采用综合计税法。
主要利用普通数组、函数解决
#include <stdio.h>
int main()
{
char name[50]={0};
int nian,mosal,momin,insurance,conven;
int susuan=1,month,temp,sum1=0,sum2=0;
float rate1=1.0;
int rate2;
int moget[15]={0},ratem[15]={0},temp2[15]={0};
int zonghe,dandu,ratem2,susuan1=1,susuan2=0;
int moget2[15]={0},ratem3[15]={0};
float ratef(int x,float y);
int rates(int x,int y);
int raten(int x,int y);
ratem[0]=0;
printf("请输入您的姓氏:");
scanf("%s",&name);printf("您是 %s 先生\n\n",name);
printf("请输入一次性年终奖金额:");
scanf("%d",&nian);
printf("请输入每月工资和薪金:");
scanf("%d",&mosal);
printf("%请输入每月减除费用:");
scanf("%d",&momin);
printf("请输入“三险一金“等专项扣除费用(不超过8000元/月):");
scanf("%d",&insurance);
printf("请输入享受子女教育、赡养老人两项专项附加扣除费用(不超过2000元/月):");
scanf("%d",&conven);
//个人应缴所得税对应的最少税额
printf("\n//以下是个人应缴所得税对应的最少税额\n\n");
for(month=1;month<=12;month++){
moget[month]=(mosal-momin-insurance-conven)*month;
temp=moget[month]/1000;
rate1=ratef(temp,rate1);
rate2=(rate1*100)/5;
susuan=rates(rate2,susuan);
sum1=ratem[month-1]+sum1;
ratem[month]=moget[month]*rate1-susuan-sum1;
printf("%d 月份 %s 先生应缴所得税对应的最少税额为 %d 元,[%d = %d * %f - %d - %d]\n",month,name,ratem[month],ratem,moget[month],rate1,susuan,sum1);
printf("\n");
if(month==12) sum1+=ratem[month];
}
printf("\n");
//年终奖单独计税
printf("\n//以下是年终奖单独计税\n\n");
rate1=ratef(nian/1000,rate1);
rate2=rate1*100/5;
susuan1=raten(rate2,susuan1);
dandu=nian*rate1-susuan1;
ratem2=dandu+sum1;
printf("使用年终奖单独计税,产生的税额为 %d 元\n\n",dandu);
printf("年终奖单独计税,%s 先生需缴纳所得税 %d 元\n\n\n",name,ratem2);
//年终奖综合计税
printf("\n//以下是年终奖综合计税\n\n");
for(month=1;month<=12;month++)
{
moget2[month]=(mosal-momin-insurance-conven+(nian/12))*month;
temp=moget2[month]/1000;
rate1=ratef(temp,rate1);
rate2=(rate1*100)/5;
susuan2=rates(rate2,susuan2);
sum2=ratem3[month-1]+sum2;
ratem3[month]=moget2[month]*rate1-susuan2-sum2;
printf("%d 月份 %s 先生应纳税额为 %d 元,[%d = %d * %f - %d - %d]\n",month,name,ratem3[month],ratem3[month],moget2[month],rate1,susuan2,sum2);
printf("\n");
if(month==12) sum2+=ratem3[month];
}
zonghe=sum2;
printf("使用年终奖综合计税,产生的税额为 %d 元\n",zonghe);
printf("\n");
//计税方法判定
printf("\n//以下是计税方法判定\n\n");
if(zonghe>dandu) printf("%s 先生由于 综合计税 大于 单独计税,因此采取一次性奖金单独计税法\n\n",name);
else if(zonghe<dandu) printf("%s 先生由于 综合计税 小于 单独计税,因此采用综合计税法\n\n",name);
}
float ratef(int x,float y)
{
if(x<=36) y=3.0/100;
else if(x>36&&x<=144) y=10.0/100;
else if(x>144&&x<=300) y=20.0/100;
else if(x>300&&x<=420) y=25.0/100;
else if(x>420&&x<=660) y=30.0/100;
else if(x>660&&x<=960) y=35.0/100;
else if(x>960) y=45/100;
return(y);
}
int rates(int x,int y)
{
switch(x)
{
case 0:y=0;break;
case 2:y=2520;break;
case 4:y=16920;break;
case 5:y=31920;break;
case 6:y=52920;break;
case 7:y=85920;break;
case 9:y=181920;break;
}
return(y);
}
int raten(int x,int y)
{
switch(x)
{
case 0:y=0;break;
case 2:y=210;break;
case 4:y=1410;break;
case 5:y=2660;break;
case 6:y=4410;break;
case 7:y=7160;break;
case 9:y=15160;break;
}
return(y);
}