问题描述

目前适用的个人所得税为超额累进税,假设税率如下(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语言

  1. //if-else if-else if-...结构
  2. #include<stdio.h>
  3. int main()
  4. {
  5. int a;
  6. float r;
  7. printf("请输入你的个人收入(元):");
  8. scanf("%d",&a);
  9. if(a<2000 && a>0)
  10. {
  11. r = 0;
  12. }
  13. else if(a>=2000 && a<3000)
  14. {
  15. r = 0 + (a-2000)*0.05;
  16. }
  17. else if(a>=3000 && a<4000)
  18. {
  19. r = 1000*0.05+(a-3000)*0.10;
  20. }
  21. else if(a>=4000 && a<5000)
  22. {
  23. r = 1000*(0.05+0.10) + (a-4000)*0.15;
  24. }
  25. else if(a>=5000)
  26. {
  27. r = 1000*(0.05+0.10+0.15)+(a-5000)*0.20;
  28. }
  29. else
  30. {
  31. r = -1000000000;
  32. printf("你的输入有误");
  33. }
  34. printf("你需要交税%.2f元",r);
  35. return 0;
  36. }
//使用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功能,代码如下:

https://www.cnblogs.com/dbf-/p/10601216.html

#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