试题八
阅读下列程序说明和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
#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 Id; /*职工的工号*/
long Salary; /*职工的工资*/
}Info;
/*查找工号为Id 的职工在数组employee 中的下标,返回值为0 表示没有*/
int find(int Id, 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 %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.2lf\n", employee[i].Id, S);
sum += S;
}
printf("全体职工个人所得税总额: %10.2lf\n", sum);
}
参考答案:
(1)employee[j].Id!=Id (2)n=n+1;或者n++;或者++n (3)employee[i].Salary-BASE (4)k>payleve[j] (5)k-payleve[j-1]