问题描述
目前适用的个人所得税为超额累进税,假设税率如下(a表示个人收入,r表示税率):
r = 0 (a<2000元)
r = 5% (2000元<=a<3000元)
r = 10% (3000元<=a<4000元)
r = 15% (4000元<=a<5000元)
r = 20% (a>=5000元)
编写程序,要求从键盘上输入个人收入,根据以上税率计算出相应的税金并输出。
分析
这也是一个多分支结构,可以使用if-else if-…(if-elif-elif-…)进行处理,对于C语言也可以使用switch更方便快捷地处理。
源程序
C语言
//if-else if-else if-...结构
#include<stdio.h>
int main()
{
int a;
float r;
printf("请输入你的个人收入(元):");
scanf("%d",&a);
if(a<2000 && a>0)
{
r = 0;
}
else if(a>=2000 && a<3000)
{
r = 0 + (a-2000)*0.05;
}
else if(a>=3000 && a<4000)
{
r = 1000*0.05+(a-3000)*0.10;
}
else if(a>=4000 && a<5000)
{
r = 1000*(0.05+0.10) + (a-4000)*0.15;
}
else if(a>=5000)
{
r = 1000*(0.05+0.10+0.15)+(a-5000)*0.20;
}
else
{
r = -1000000000;
printf("你的输入有误");
}
printf("你需要交税%.2f元",r);
return 0;
}
//使用switch语句
#include<stdio.h>
int main()
{
int a;
float r;
int switcher;
printf("请输入你的个人收入(元):");
scanf("%d",&a);
if(a>=5000)
{
switcher = 5;
}
else
switcher = a/1000;
switch(switcher)
{
case 0:
case 1:r=0;break;
case 2:r = 0 + (a-2000)*0.05;break;
case 3: r = 1000*0.05+(a-3000)*0.10;break;
case 4: r = 1000*(0.05+0.10) + (a-4000)*0.15;break;
case 5:r = 1000*(0.05+0.10+0.15)+(a-5000)*0.20;break;
}
printf("你应交税额为%.2f",r);
return 0;
}
可以看出,使用switch语句结构更加清晰。
python
python 没有switch case语句,使用if-elif-elif-…即可完成,结构类似于C语言的第一段代码。python中可通过构造函数的方法实现switch功能,代码如下:
#coding:gbk
def case0(a):
r = 0
return r
def case1(a):
r = 0
return r
def case2(a):
r = 0 + (a-2000)*0.05
return r
def case3(a):
r = 1000*0.05+(a-3000)*0.10
return r
def case4(a):
r = 1000*(0.05+0.10) + (a-4000)*0.15
return r
def case5(a):
r = 1000*(0.05+0.10+0.15)+(a-5000)*0.20
return r
def default(a):
r = -100000000
return r
switch = {0:case1,
1:case1,
2:case2,
3:case3,
4:case4,
5:case5
} #这里的case没有括号
while True:
a = int(input("请输入你的个人收入(元):"))
realrate = switch.get(a/1000,default)(a) #选择对应函数
print("你应交的税额为%.2f"%realrate) #控制输出两位小数
第32行中,switch.get(choice, default)()
表示先去字典中查找 key 之后执行以 key 对应的 value 为函数名的函数,如果没有找到相应的 key 就执行默认函数。
关于python输出小数位数
https://www.csdn.net/gather_2a/MtzaAgysNTkyLWJsb2cO0O0O.html