1. 程式人生 > >C語言計算個人所得稅問題程式碼及解析

C語言計算個人所得稅問題程式碼及解析

問題描述

編寫一個計算個人所得稅的程式,要求輸入收入金額後,能夠輸出應繳的個人所得稅。 個人所得稅徵收辦法如下:

  • ◎ 起徵點為3500元;
  • ◎ 不超過1500元的部分,徵收3%;
  • ◎ 超過1500〜4500元的部分,徵收10%;
  • ◎ 超過4500〜9000元的部分,徵收20%;
  • ◎ 超過9000〜35000元的部分,徵收25%;
  • ◎ 超過35000〜55000元的部分,徵收30%;
  • ◎ 超過55000〜80000元的部分,徵收35%;
  • ◎ 超過80000元以上的,徵收45%。

問題分析

個人所得稅是根據收入金額劃分為不同階段徵收的,分析題目特點,可以使用結構體來描述題目中的條件。

演算法設計

可以使用結構體陣列存放不同的稅率範圍。接著使用 for 迴圈遍歷每一個徵稅範圍,將個人收入中超出起徵點的金額在每個徵稅範圍內應繳納的稅款累加起來,就得到最後應繳納的個人所得稅。

納稅金額流程圖:

下面是完整的程式碼:

#include <stdio.h>
#include <limits.h>
#define TAXBASE  2000
/*定義結構體*/
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, LONG_MAX, 0.45}
};

double CaculateTax(long profit)
{
    int i;
    double tax = 0.0;
    profit -= TAXBASE;
    for(i=0; i<sizeof(TaxTable)/sizeof(TAXTABLE); i++)
    {
        if(profit>TaxTable[i].start)
        {
            if(profit>TaxTable[i].end)
            {
                tax += (TaxTable[i].end-TaxTable[i].start) * TaxTable[i].taxrate;
            }
            else
            {
                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()
{
    long profit;
    double tax;
    printf("請輸入個人收入金額: ");
    scanf("%ld", &profit);
    tax = CaculateTax(profit);
    printf("您的個人所得稅為: %.2f\n", tax);
 
    return 0;
}

執行結果:

C語言計算個人所得稅問題程式碼及解析