c语言编写程序,输入月薪数a,计算并输出税率、应缴税款和实得奖金数。工薪所得扣除标

采用超额累进税率计税时,简化计算应纳税额的一个数据。速算扣除数实际上是在级距和税率不变条件下,全额累进税率的应纳税额比超额累进税率的应纳税额多纳的一个常数。因此,在超额累进税率条件下,用全额累进的计税方法,只要减掉这个常数,就等于用超额累进方法计算的应纳税额,故称速算扣除数。采用速算扣除数法计算超额累进税率的所得税时的计税公式是:

应纳税额=应纳税所得额×适用税率-速算扣除数

速算扣除数的计算公式是:

本级速算扣除额=上一级最高所得额×(本级税率-上一级税率)+上一级速算扣除数 超额累进税率全额累进税率

用上述公式求得的速算扣除数,可用直接计算法验证其准确性,以个人所得税工资、薪金所得适用的9级超额累进税率第2级验证如下:

① 用上述公式计算:

500×(10%-5%)+0=25

② 用直接计算法计算

全额累进税率的应纳税额=2000×10%=200

超额累进税率的应纳税额=(500×5%)+(1500×10%)=175

速算扣除数=200-175=25
附计算依据:
应纳个人所得税税额=(应纳税所得-扣除标准)*适用税率-速算扣除数
扣除标准1600元/月。
不超过500元的,税率5%,速算扣除数为0;
超过500元至2000元的部分,税率10%,速算扣除数为25
超过2000元至5000元的部分,税率15 %,速算扣除数为125
超过5000元至20000元的部分,税率20 %,速算扣除数为375
超过20000元至40000元的部分,税率25%,速算扣除数为1375
超过40000元至60000元的部分,税率30%,速算扣除数为3375
超过60000元至80000元的部分,税率35%,速算扣除数为6375
超过80000元至100000元的部分,税率40%,速算扣除数为10375
超过100000元的部分,税率45%,速算扣除数为15375
#include<stdio.h>
void main()
{
int a;
float sl,jszhi,gongzi;
printf("请输入工资: ");
scanf("%f,%f,%f,%f",&a,&sl,&jszhi,&gongzi);
if(a<=3500)
{ sl=0;jszhi=0;gongzi=a;
}
if(a>3500&&a<4500)
{
sl=0.03;jszhi=(a-1455)*0.03;gongzi=a-(a-1455)*0.03;
}
if(a>4500&&a<9000)
{
sl=0.1;jszhi=1455*0.03+(a-4155)*0.1;gongzi=a-(1455*0.03+(a-4155)*0.1)
}
if(a>9000&&a<18000)
{
sl=0.2;jszhi=1455*0.03+2700*0.1+(a-)*0.2;gongzi=a-(1455*0.03+2700*0.1+(a-7755)*0.2);
}
if(a>18000&&a<53000)
{
sl=0.25;jszhi=1455*0.03+2700*0.1+3600*0.2+(a-27255);gongzi=a-(1455*0.03+2700*0.1+3600*0.2+(a-27255));
}
if(a>35000&&a<90000)
{
sl=0.3;jszhi=1455*0.03+2700*0.1+3600*0.2+19500*0.25+(a-41255)*0.3;
gongzi=a-(1455*0.03+2700*0.1+3600*0.2+19500*0.25+(a-41255)*0.3);
}
if(a>90000&&a<170000)
{
sl=0.35;jszhhi=1455*0.03+2700*0.1+3600*0.2+19500*0.25+25000*0.3+(a-80000)*0.35;
gongzhi=(a-1455*0.03+2700*0.1+3600*0.2+19500*0.25+25000*0.3+(a-80000)*0.35);
}
else
{
sl=0.4;jszhi=1455*0.03+2700*0.1+3600*0.2+19500*0.25+25000*0.3+25000*0.35+(a-57505)*0.4;
gongzi=a-(1455*0.03+2700*0.1+3600*0.2+19500*0.25+25000*0.3+25000*0.35+(a-57505)*0.4);
}
printf("税率=%f",sl);
printf("应缴税款=%.4f",jszhi);
printf("实得奖金数=%.5",gongzi);
return 0;
}
错哪了,求高手相助!!!!!

第1个回答  2012-11-25
#include <stdio.h>
main()
{
int grade;
float salary,real_salary,ratal,tax;
printf("请输入个人工资薪金所得:\n ");
scanf("%f", &salary);
if(salary<0)
{
printf("输入的数据错误\n");
ratal=0;
tax=0;
}
else if(salary<=2000)
{
ratal=0;
tax=0;
}
else
ratal=salary-2000;
if(ratal<=500)
grade=1;
if(ratal>500 && ratal<=2000)
grade=2;
if(ratal>2000 && ratal<=5000)
grade=3;
if(ratal>5000 && ratal<=20000)
grade=4;
if(ratal>20000 && ratal<=40000)
grade=5;
if(ratal>40000 && ratal<=60000)
grade=6;
if(ratal>60000 && ratal<=80000)
grade=7;
if(ratal>80000 && ratal<=100000)
grade=8;
switch (grade)
{
case 1:tax=ratal*0.05-0;break;
case 2:tax=ratal*0.1-25;break;
case 3:tax=ratal*0.15-125;break;
case 4:tax=ratal*0.2-375;break;
case 5:tax=ratal*0.25-1375;break;
case 6:tax=ratal*0.3-3375;break;
case 7:tax=ratal*0.35-6375;break;
case 8:tax=ratal*0.4-10375;break;
default: tax=ratal*0.45-15375;
}
real_salary=salary-tax;
printf("应纳税额: %.2f元\n",tax);
printf("税后月收入: %.2f元\n",real_salary);
}
第2个回答  推荐于2017-11-24
if(a>4500&&a<9000)下面的代码行缺少分号;
if(a>9000&&a<18000)下面的代码段中(a-)减号后面缺少一个数值;
if(a>90000&&a<170000)下面的代码段中jszhhi这个变量名不存在,应该是jszhi,多写了个h;再下一行的gongzhi变量也不存在,应该是gongzi,多了个h。
除了这几个错误外,其他的都是类型自动转换的警告。因为太多地方,我只举一个例子。
if(a<=3500) 下面的代码段中,sl被赋予了int整型数据,但是根据前面的定义,sl是一个float浮点型变量,编译器会自动进行类型转换,并给出警告;后面的警告信息都类型这种错误。本回答被提问者采纳
相似回答