个人所得税问题
一、问题描述:
编写一个计算个人所得税的程序,要求输入收入金额后,能够输出应缴的个人所得税。个人所得税征收办法如下:
不超过1500元的部分,征收3%:
超过 1500~4500元的部分,征收 10%:
超过4500~9000元的部分,征收20%
超过9000~35000元的部分,征收25%:
超过35000~55000元的部分,征收30%:
超过55000~80000元的部分,征收35%;
二、问题分析:
分析题目特点,我们可以考虑使用结构体来描述题目中的条件。下面先讲解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 是一个新的类型名,它和系统提供的标准类型一样都可以用来定义变量的类型。
三、程序流程图
四、代码实现
#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); }