【简答题】
试题八
阅读下列程序说明和C程序,将应填入__(n)__处的字句写在答题纸的对应栏内。
[程序8说明]
程序8用于计算某公司每个职工应缴纳的个人所得税额和全体职工缴纳的个人所得税总额。职工的当月收入(工资或薪金)通过键盘输入,每次输入一个职工的工号和工资(或薪金)。由于该公司的工资或薪金是不定时发放的,所以输入过程中每个职工的收入会出现多次输入,整个输入以工号小于等于0结束。
假设个人所得税法规定;个人收入所得,按月计税,以每月收入总额减除免税金额800元后的余额作为该月的月应纳税所得额,适用税率如下表所示。
上表表明,个人收入所得税是按照超额累进的税率来征收的。
设一个人的月应纳税所得额为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元。
[程序8]
#include <stdio.h>
#define MaxNum 50
#define BASE 800 /*免税金额基数*/
int paylevel[]={0,500,2000,5000,20000,40000,60000,80000,100000,100000¨:
int taxPrate[]={5,10,15,20,25,30,35,40,45): /*税率表*/
typedef struct{
int ld; /*职工的工号*/ .
long Salary; /*职工的工资*/
}Info;
/* 查找工号为Id的职工在数组employee中的下标,返回值为0表示没有 */
int find(int ld,Info employee[],int m){
int j;
employee[0]._dj=Id;
for(j=m;__(1)__;j--);
return j;
}
void main(void)
{ Info employeeCHaxNum+1];
long Wage;
double sum s 0,K,S:
int i,j,N=0,Code;
scanf("M%ld",&Code,&Wage); /*读入职工号、工资或薪金*/
while(Code>0) {
i=find(Code,employee,N);
if (i>0)employee[i].Salary += Wage:
else{ __ (2)__;
employee[N].Id=Code;employee[N].Salary=Wage;
}
scanf("%d%ld",&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[i].Id,S);
sum += S;
}
printf("全体职工个人所得税总额:%10,21f\n",sum);
}