You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言阶梯税率税款计算程序输出结果异常排查

阶梯个税计算C程序错误排查

对应计税规则

  • 收入低于2.5 Lakhs(250000卢比):无需缴纳税款
  • 2.5-5 Lakhs(250000-500000卢比)区间:超出2.5Lakhs部分按5%税率计征
  • 5-10 Lakhs(500000-1000000卢比)区间:超出5Lakhs部分按20%税率计征
  • 10 Lakhs(1000000卢比)以上区间:超出10Lakhs部分按30%税率计征

代码核心错误

代码从高税档往低税档迭代核算的整体思路是可行的,但存在2个致命逻辑错误,导致结果不符合预期:

  1. 税档判断条件写反,区间匹配失效
    第二个分支的判断条件写为salary > 500000 && salary >= 1000000,该条件实际等价于salary >= 1000000,完全无法匹配5-10Lakhs的税档。当收入处于500000-1000000区间时,既不满足第一个if分支(收入≤500000),也不满足这个else if分支(收入≥1000000),会直接进入else分支。
  2. 税档逻辑错位,计算结果错误
    else分支原本设计为100万以上30%税率的计算逻辑,5-10Lakhs区间的收入进入该分支后,会执行(salary - 1000000) * 0.30计算,因收入不足100万,这部分会算出负数税额,最终结果完全失准。本质是把20%税率档和30%税率档的判断边界写反了。

修正后的代码

只需要把第二个分支条件里的>=1000000改为<=1000000即可修复全部逻辑问题,修正后完整代码如下:

#include<stdio.h>
int main()
{
    float salary, tax_amount = 0;
    printf("Enter the Salary:-");
    scanf("%f", &salary);
    while (salary > 250000)
    {
        if (salary > 250000 && salary <= 500000)
        {
            tax_amount += (salary - 250000) * 0.05;
            break;
        }
        else if (salary > 500000 && salary <= 1000000) // 修正此处判断条件
        {
            tax_amount += (salary - 500000) * 0.20;
            salary = 500000;
        }
        else
        {
            tax_amount += (salary - 1000000) * 0.30;
            salary = 1000000;
        }
    }
    printf("Net Tax Amount:-%.3f", tax_amount);
    return 0;
}

结果验证

用典型值验证修正后代码的计算准确性:

  • 输入200000(低于2.5Lakhs起征点):输出税额0,符合规则
  • 输入300000(2.5-5Lakhs区间):应缴税额(300000-250000)*0.05=2500,程序输出2500.000,结果正确
  • 输入700000(5-10Lakhs区间):应缴税额250000*0.05 + (700000-500000)*0.2 = 52500,程序输出52500.000,结果正确
  • 输入1200000(10Lakhs以上区间):应缴税额2500000.05 + 5000000.2 + (1200000-1000000)*0.3 = 172500,程序输出172500.000,结果正确

内容的提问来源于stack exchange,提问作者RACHIT MITTAL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 05:57:13