阅读下列程序说明和C程序,将应填入(n)处的字句写在对应栏内。 【说明】 程序8用于计算某公司每个职工应缴纳的个人所得税额和全体职工缴纳的个人所得税总额,职工的当月收入(工资或薪金)通过键盘输入,每次输入一个职工的工号和工资(或薪金)。由于该公司的

admin2009-02-15  17

问题 阅读下列程序说明和C程序,将应填入(n)处的字句写在对应栏内。
【说明】
    程序8用于计算某公司每个职工应缴纳的个人所得税额和全体职工缴纳的个人所得税总额,职工的当月收入(工资或薪金)通过键盘输入,每次输入一个职工的工号和工资(或薪金)。由于该公司的工资或薪金是不定时发放的,所以输入过程中每个职工的收入会出现多次输入,整个输入以工号小于等于0结束。
   假设个人所得税法规定:个人收入所得,按月计税,以每月收入总额减除免税金额800元后的余额作为该月的月应纳税所得额。适用税率如表2所示。

上表表明,个人收入所得税是按照超额累进的税率来征收的。
   设一个人的月应纳税所得额为K(元),用下面的公式计算其应缴纳的个人所得税额S (元);
   若0<K≤500,则S=K×5%;
   若500<K≤2000,则S=500×5%+(K-500)×10%;
   若2000<K≤5000,则S=500×5%+1500×10%+(K-2000)×15%;
   若5000<K≤20000,则S=500×5%+1500×10%+3000×15%+(K-5000)×20%;
   ...
   例如,某人某月收入总额为4100元,减去800元后,应纳税所得额为3300元,其应缴纳的个人所得税额为500*5%+1500*10%+1300*15%=370元。
  【程序】
   #include<stdio.h>
   #define MaxNum 50
   #define BASE 800    /*免税金额基数*/
   int paylevel[]={0,500,2000,5000,20000,40000,60000,80000,100000,1000001};
   int taxPrate[]={5,10,15,20,25,30,35,40,45};    /*税率表*/
   typedef struct{
       int ld;     /*职工的工号*/
       long Salary; /*职工的工资*/
   } Info;
   /*查找工号为ld的职工在数组employee中的下标,返回值为0表示没有*/
   int find (int ld ,Info employee[], int m) {
       int j;
       employee[0]. Id=Id;
       for(j=m;(1);j--);
        return j;
   }
   void main(void)
   {    Info employee[MaxNum+1];
        long Wage;
        double sum=0, K,S;
        int i,j,N=0,Code;
        scanf("%d %Id",&Code,&Wage);
        while(Code>0){
            i=find (Code, empolyee, N );
            if(i>0)employee . Salary+=Wage;
            else{(2);
                employee[N]. Id=Code;employee[N]. Salary =Wage;
            }
            scanf("%d %Id", &Code, &Wage);
   }
   for(i=1;i<=N;i++) {
       K=(3);    /*计算月应纳税所得额*/
       S=0;         /*月应纳税额赋初值*/
       if(K>0) {
       for(j=1;j<=9;j++)
           if  (4)           /*月应纳税所得额超过第j级*/
               S=S+(paylevel[j]-paylevel[j-1])*taxPrate[j-1]/100;
           else{S =S+(5)* taxPrate[j-1]/100; break; }
       }
       printf("职工%d应缴纳的个人所得税额:%10.21f\n",employee.Id,S);
       sum+=S;
       }
   printf("全体职工个人所得税总额:%10.21f\n",sum);
   }

选项

答案(1)employee[j].Id!=Id (2) ++N 或N++或N=N+1 (3) employee [i]. Salary-BASE (4) K>paylevel[j] (5)K-paylevel[j-1]

解析 (1)find函数的功能是找到了号为Id的职工在数组employee中的下标。显然,循环进行下去的条件是employee[j].Id!=Id。 (2)当i=0时,表明该职工的信息是第一次录入,所以应当在数组employee中创建一个新元素,于是此处应填入N++或其他等价表达式。 (3)K表示该月应纳的所得税额,所以应填入employee.SalaryBASE。(4)此处是判断当前职工的工资是否超过第j级,所以应填入 K>paylevel[j])。(5)当前职工的工资不超过第j级,应当计算它与第j-1级的差额的所得税,所以应填入K-paylevel[j-1]。
转载请注明原文地址:https://jikaoti.com/ti/evW7FFFM
0

最新回复(0)