个人所得税的问题

发布时间 2023-04-26 15:06:25作者: 南笙西瓜

1.问题描述:

编写一个计算个人所得税的程序,要求输入收入金额后,能够输出应缴的个人所得税。个人所得税征收办法如下:

不超过1500元的部分,征收3%:

超过 1500~4500元的部分,征收 10%:

超过4500~9000元的部分,征收20%

超过9000~35000元的部分,征收25%:

超过35000~55000元的部分,征收30%:

超过55000~80000元的部分,征收35%;

2.问题分析:

分析题目特点,我们可以考虑使用结构体来描述题目中的条件。下面先讲解C语言中结构体的语法要点。(1)声明结构体C语言中允许用户自己定义结构体,它相当于其他高级语言中的“记录”。声明一个结构体类型的一般形式为:

struct 结构体名
{结构体成员列表}

对结构体中的各个成员都应该进行类型声明,即:

类型名 成员名

例如:

/*定义名为user的结构体*/
struct user
{
    /*结构体中的各个成员*/
   int id;
   char name[20];
   int age;
   char address[50];
};

上面我们定义了一个新的结构体类型 struct user,它包含了id、name、age和address这4个不同类型的数据项。可以说,struct user 是一个新的类型名,它和系统提供的标准类型一样都可以用来定义变量的类型。

3.流程图:

4.源代码:

#include<stdio.h>
#define   TAXBASE 3500
typedef struct
{
    long strat;
    long end;
    double taxrate;
}TAXTABLE;
TAXTABLE TaxTable[]={{0,1500,0.03},{1500,4500,0.10},{4500,9000,0.20},{9000,35000,0.25},{35000,55000,0.30},{55000,80000,0.35},{80000,1e10,0.45}};
double CaculateTax(long profit)
{
    int i;
    double tax=0.0;
    profit-=TAXBASE;
    for(i=0;i<sizeof(TaxTable)/sizeof(TAXBASE);i++)
    {
        if(profit>TaxTable[i].strat)
        {
            if(profit>TaxTable[i].end)
            {
                tax+=(TaxTable[i].end-TaxTable[i].strat)*TaxTable[i].taxrate;
            }
            else
            {
                tax+=(profit-TaxTable[i].strat)*TaxTable[i].taxrate;
            }
            profit-=TaxTable[i].end;
            printf("征税范围:%6ld~%6ld 该范围交税金额:%6.2f 超出该范围的金额:%61d\n",TaxTable[i].strat,TaxTable[i].end,tax,(profit)>0 ? profit:0);
        }
    }
    return tax;
}
int main()
{
    long profit;
    double tax;
    printf("请输入个人收入金额:");
    scanf("%ld",&profit);
    tax=CaculateTax(profit);
    printf("您的个人所得税为:%12.2f\n",tax);
}