初级系列11.个人所得税问题
个人所得税问题
问题描述
编写一个计算个人所得税的程序,
要求输入收入金额后,能够输出应缴的个人所得税,
个人所得税征收方法如下:
起征点为3500元
不超过1500元的部分,征收3%
超过1500-4500元的部分,征收10%
超过4500-9000元的部分,征收20%
超过9000-35000元的部分,征收25%
超过35000-55000元的部分,征收30%
超过55000-80000元的部分,征收35%
超过80000元以上的,征收45%
问题分析
分析题目特点,考虑使用结构体来描述题目中的条件
c语言中允许用户自己定义结构体,它相当于其它高级语言中的记录
声明一个结构体类型的一般形式为
struct 结构体名
{结构体成员列表}
算法设计
使用结构体存放不同的税率范围,接着使用for循环遍历每一个征税范围
将个人收入中超出起征点的金额在每个征税范围内应缴纳的税款累加起来
就得到最后应缴纳的个人所得税
#include <stdio.h>
#define TAXBASE 3500
/* !<定义结构体 */
typedef struct {
long start;
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}
};
/* !<Caculate function */
double CaculateTax(long profit)
{
int i;
double tax = 0.0;
profit -= TAXBASE; /* !< 超过个税起征点的收入 */
for (i = 0; i < sizeof(TaxTable)/sizeof(TAXTABLE); i++) {
/* !<判断profit是否在当前的缴税范围内 */
if (profit > TaxTable[i].start) {
if (profit > TaxTable[i].end) {
tax += (TaxTable[i].end - TaxTable[i].start)*TaxTable[i].taxrate;
}
else { /* !< profit 未超过当前的缴税范围 */
tax += (profit - TaxTable[i].start)*TaxTable[i].taxrate;
}
profit -= TaxTable[i].end;
printf("征税范围: %6ld-%6ld 该范围内缴税金额: %6.2f 超出该范围的金额:%6ld\n",
TaxTable[i].start,TaxTable[i].end,tax,(profit)>0 ? profit : 0);
}
}
return tax;
}
int main(void)
{
long profit;
double tax;
printf("请输入个人收入金额:");
scanf("%ld", &profit);
tax = CaculateTax(profit);
printf("您的个人所得税为: %12.2f\n",tax);
}
/* !< output */
请输入个人收入金额:9876
征税范围: 0- 1500 该范围内缴税金额: 45.00 超出该范围的金额: 4876
征税范围: 1500- 4500 该范围内缴税金额: 345.00 超出该范围的金额: 376
您的个人所得税为: 345.00
Process returned 0 (0x0) execution time : 2.772 s
Press any key to continue.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!