C语言实现 计算个人所得税务2种方法

[cpp] view plaincopy
 
  1. #include <stdio.h>  
  2. #include <stdlib.h>  
  3. /* 
  4. 基于C语言的个人所得税计税系统 
  5.   
  6. 问题描述: 
  7.        我国现行的个人所得税计算方法如下: 
  8.     级数 全月应纳税所得额     税率(%) 
  9.    1 不超过500元的           5 
  10.    2 超过500元至2000元的部分     10 
  11.    3 超过2000元至5000元的部分     15 
  12.    4 超过5000元至20000元的部分    20 
  13.    5 超过20000元至40000元的部分    25 
  14.    6 超过40000元至60000元的部分    30 
  15.    7 超过60000元至80000元的部分    35 
  16.    8 超过80000元至100000元的部分   40 
  17.    9 超过100000元的部分         45 
  18.    本实验要求提示用户输入个人的收入后,给出纳税额度和税后工资。 
  19. */  
  20. void main()  
  21. {  
  22.     float before_tax;  
  23.     float after_tax;  
  24.   
  25.     printf("Pleaafter_taxe input you after_taxalary:");//提示用户输入工资总额  
  26.     scanf("%f",&before_tax);//接收工资  
  27.     printf("你的工资总额是: %7.2f",before_tax);  
  28.       
  29.     after_tax = 0;  
  30.     if (before_tax > 100000)  
  31.     {  
  32.         after_tax += (before_tax - 100000) * 0.45f;  
  33.         before_tax = 100000;  
  34.     }  
  35.     if (before_tax > 80000)  
  36.     {  
  37.         after_tax += (before_tax - 80000) * 0.40f;  
  38.         before_tax = 80000;  
  39.     }  
  40.     if (before_tax > 60000)  
  41.     {  
  42.         after_tax += (before_tax - 60000) * 0.35f;  
  43.         before_tax = 60000;  
  44.     }  
  45.     if (before_tax > 40000)  
  46.     {  
  47.         after_tax += (before_tax - 40000) * 0.30f;  
  48.         before_tax = 40000;  
  49.     }  
  50.     if (before_tax > 20000)  
  51.     {  
  52.         after_tax += (before_tax - 20000) * 0.25f;  
  53.         before_tax = 20000;  
  54.     }  
  55.     if (before_tax > 5000)  
  56.     {  
  57.         after_tax += (before_tax - 5000) * 0.20f;  
  58.         before_tax = 5000;  
  59.     }  
  60.     if (before_tax > 2000)  
  61.     {  
  62.         after_tax += (before_tax - 2000) * 0.15f;  
  63.         before_tax = 2000;  
  64.     }  
  65.     if (before_tax > 500)  
  66.     {  
  67.         after_tax += (before_tax - 500) * 0.10f;  
  68.         before_tax = 500;  
  69.     }  
  70.     if (before_tax > 0)  
  71.     {  
  72.         after_tax += (before_tax - 0) * 0.05f;  
  73.     }  
  74.       
  75.     printf("你的税额是: %7.2f",after_tax);  
  76. }  


 

 

1)采用if 方法实现

自己写的:

#include <stdio.h>
#include <string.h>
#include <math.h>
static int single_tax(double income);
/*设置一个全局的变量*/
float tax;
 int  main(){
                double   income; 
                printf("Inpunt your income: \n");
                scanf("%lf",&income);
                single_tax(income);
                return 0;
     }
 static int single_tax(double  const    income){

         if(income > 0 && income <=23350){
                tax = ((income) * 0.15);


        }
        if(income >23350  && income <=56550)
        {
         tax = ((income - 23350)*0.28 )+ 3502.5;

        }

        if(income >56660  && income <=117950)
        {
         tax = (income - 56660)*0.31 + 12798.50;
         
        }

        if(income >117950  && income <=256500)
        {
         tax = (income - 117950)*0.36 + 31832;

        }

     if(income >256500)
        {
         tax = (income - 256500)*0.396 + 81710;
         }
        printf("Your  Tax is %7.2f \n",tax);
          return 0;
}

2)借鉴Kenneth A.Reek 剧作<<C和指针>>

自己加入了一个main函数完成测试 。

代码如下:

/*打印个人所得税计算结果*/
#include <stdio.h>
#include <float.h>
static double income_limits[]={0,23350,56550,117950,256500,DBL_MAX};
static float base_tax[]={0,3502.5,12798.5,31832.5,81710.5};
static float percentage[]={.15,.28,.31,.36,.396};
double  single_tax(double income);
int main()
{     double tax ;
      double income;
      printf("Input of Your Income :\n");
      scanf("%lf",&income);
          tax = single_tax(income);
          printf("Your  Tax is %7.2f :\n",tax);
         
}

/*以下代码从书答案抄写过来*/
double 
        single_tax(double income)
{
    /*定义一个标记、十分的简单与简洁。算法值得学习*/           

    int category;

                for(category = 1;income >= income_limits[ category ];category +=1);
        /*  指针提前了一个相对位置 */
                category -= 1;
                      return base_tax[category] + percentage[category] * (income - income_limits[category]);

}

posted @ 2013-11-05 10:47  天天向上...  阅读(4788)  评论(0编辑  收藏  举报