·一、实验目的

  实验目的:练习数组和函数的综合应用

 

·二、实验原理

   依法纳税是每个公民应尽的义务,2011年9月1日起调整后,个人所得税起征点调至3500元。 个人所得税计算器的需求相对比较简单:输入一个员工的工资,根据个人所得税税率表(下图所示),计算出该员工应缴的个人所得税。

图1  2011年个人所得税率表

 


  方法提示:
 (1)第一种方法:按照定义直接计算

   比如在微软工作的软件工程师张爱虎的工资是每月20000元,20000-3500=16500,属于第4个级别;他需要交的税款(16500-9000)*0.25+(9000-4500)*0.2 +(4500-1500)*0.1+(1500-0)*0.03=3120元。
    若工资低于3500,则所交税款为0元。可预定义好个人所得税的税率级别及级数中的金额值与税率:
     #define N 7
       float rank[N][2]={{0,0.03},{1500,0.1},{4500,0.2},{9000,0.25},{35000,0.3},{55000,0.35},{80000,0.45}};

(2)第二种方法:采用速算扣除法

  速算扣除数是指为解决超额累进税率分级计算税额的复杂技术问题,而预先计算出的一个数据。超额累进税率的计税特点,是把全部应税金额分成若干等级部分,每个等级部分分别按相应的税率计征,税额计算比较复杂。简便的计算方法是先将全部应税金额按其适用  的最高税率计税,然后再减去速算扣除数,其余额就为按超额累进税率计算的税额。速算扣除数是按全额累进税率计算的税额和按超额累进税率计算的税额相减后的一个差数。 个人所得税是采用速算扣除数法计算超额累进税率的所得税时的计税公式是:

  应纳税额=应纳税所得额×适用税率-速算扣除数

  速算扣除数的计算公式是:2在

  本级速算扣除额=上一级最高应纳税所得额×(本级税率-上一级税率)+上一级速算扣除数

图2 速算扣除法表

① 用上述公式计算:

1500×(10%-3%)+0=105

② 用直接计算法计算

全额累进税率的应纳税额=2000×10%=200

超额累进税率的应纳税额=(1500×3%)+(500×10%)=95

速算扣除数=200-95=105

 

·三、主要数据结构和算法

1、算法分析

 

·四、实验结果及分析

1、测试结果截图 

(1)第一组测试数据及结果截图

(2)第二组测试数据及结果截图

(3)第三组测试数据及结果截图

 

·五、心得体会

  不用if    ,else解决问题,利用数组存储数据,算出每个阶段的税金,弄清每个数组所对应的税金.

通过循环计算前几阶段的总税金及本阶段的税金并输出,

 

 六、源文件

#include <stdio.h>
#define N 7
float qiushui(float a);
int main()
{
    float salary,x,y;
    printf("输入工资:") ; 
    scanf("%f",&salary);         //输入工资        
    x=salary-3500;              //需要交税的钱数为x 
    if(salary<=3500)            //若钱数不超过3500,则不需要交税 
     printf("工资:%.0f    纳税工资:0    税金:0",salary) ;     //输出工资,纳税工资,税金
    else
     {
         y=qiushui(x);    
         printf("工资:%.0f    纳税工资:%.0f    税金:%.0f",salary,x,y) ;     //输出工资,纳税工资,税金 
     }
    return 0;
}
/***********************************************
float qiushui(float a)
功能:用于计算个人所得税
变量:i,j用于循环变量 
返回值 float类型          意义:个人所得税的值 
***********************************************/ 
float qiushui(float a)
{
    int i,j,k;
    float m,sum=0;
    float rank[N][2]={{0,0.03},{1500,0.1},{4500,0.2},{9000,0.25},{35000,0.3},{55000,0.35},{80000,0.45}};//预定义好个人所得税的税率级别及级数中的金额值与税率 
    float r[N];                              //用于存放每个级别应交税的值 
    for(i=0;i<6;i++)                             //为rank1[N]赋值 
     {
         r[i]=(rank[i+1][0]-rank[i][0])*rank[i][1];         
     }
    r[6]=(a-80000)*0.45;
    for(i=0;i<7;i++)                            //计算个人所得税应该在哪一阶级 
    {
        if(a>rank[i][0])
           continue;
        else
           k=(i-1);break;   
     } 
    for(j=0;j<k;j++)                           //a所占有税率阶级应交的总数 
    {
        sum=sum+r[j];
     } 
    m=sum+(a-rank[k][0]) *rank[k][1];          //应交个人所得税总数 
    return m; 
}