填空题

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

1
2
3
4
5
6
7
8
9

不超过500元的部分
501元~2000元的部分
2001元~5000元的部分
5001元~2000元的部分
2001元~4000元的部分
4001元~6000元的部分
6001元~8000元的部分
8001元~100000元的部分
超过100000元的部分

5
10
15
20
25
30
35
40
45
上表表明,个人收入所得税是按照超额累进的税率来征收的。
设一个人的月应纳税所得额为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; ________ ;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 [i]. Salary+=Wage;
else{ ________ ;
employee[N]. Id=Code;employee[N]. Salary =Wage;
}
scanf("%d %Id", &Code, &Wage);
}
for(i=1;i<=N;i++) {
K= ________ ; /*计算月应纳税所得额*/
S=0; /*月应纳税额赋初值*/
if(K>0) {
for(j=1;j<=9;j++)
if ________ /*月应纳税所得额超过第j级*/
S=S+(paylevel[j]-paylevel[j-1])*taxPrate[j-1]/100;
else{S =S+ ________ * taxPrate[j-1]/100; break; }
}
printf("职工%d应缴纳的个人所得税额:%10.21f\n",employee[i].Id,S);
sum+=S;
}
printf("全体职工个人所得税总额:%10.21f\n",sum);
}

【参考答案】

employee[j].Id!=Id ++N 或N++或N=N+1
employee [i]. Salary-......

(↓↓↓ 点击下方‘点击查看答案’看完整答案 ↓↓↓)
热门 试题

填空题
【说明】某学校举办了一场奥运知识竞赛,参加竞赛的选手为200名,1~200为选手编号。竞赛时间为9:00~11:00。8道竞赛题目依次从“A”~“H”编号,选手可按任意次序答题,每完成一道题目,可立即提交答案。若答案正确(Y),则选择其他题目进行解答,否则,可继续做该题目或选择其他题目进行解答,直至竞赛结束。选手提交答案的情况及判定结果由专人即时录入,录入数据包括提交答案的时间、选手编号、题目编号(A~H)、是否正确(Y N)等。对竞赛情况进行统计和排名的规则如下:1.若选手X在竞赛时提交的题目P解答正确,则解答该题目所用时间计算如下:解答题目P的用时=提交题目P正确的时间-竞赛的开始时间+罚时,罚时=提交题目P错误解答的次数×20例如:表1中14号选手在10:27提交了题目A的正确解答,因此该选手正确解答该题目所用时间P为87分钟,由于他在09:37和09:52两次提交了题目A的错误解答,因此罚时为(2×20)分钟=40分钟,所以14号选手解答题目A的用时=(87+ 40)分钟:127分钟。2.已经提交正确答案的题目再次提交时不再计算。3.竞赛结束时,选手的总用时为所有解答正确的题目用时累加所得,解答不正确的题目不计时。4.排名时,完成题目数量多者排名靠前;若完成的题目数相同,则用时少者排名靠前;若完成的题目数和所用时间均相等,则名次相同;完成题目数为。的选手不参加排名。本应用程序的运行窗口如图3所示。窗口中的两个文本框为Txt_time和Txt_player,分别用于录入提交答案的时间和选手编号。组合列表框Combo1提供题目编号(A~H),录入时从中选择。检查框Chk_yn用于输入解答是否正确信息。当单击“确定”按钮(Cmd_comfirm)时,录入的提交信息加入列表框List1中,排名情况在列表框List2输出。单击“关闭”按钮时退出应用程序。在开发过程中,需要编写的部分程序代码如下:【程序】Private Type infoNo As Integer ′选手编号Num As Integer ′完成题目数量Time As Integer ′完成题目的总用时d(8)As Integer ′d用于记录提交第i个题目错误答案的次数a(8)As Boolean ′a用于记录第i个题目是否已经提交正确答案End TypeDim R(201)As info ′R[j]用于统计编号为j的选手提交答案的情况Dim Maxlndex As Integer ′Maxlndex记录提交答案的选手中编号最大者Private Sub Form_Load()For i = 1 to 8Combo1. Addltem chr(________)NextCombo1. Text = Combo1. List(0):txt_time.Text = :txt_player.Text = For i = 1 To 200R(i) num=0:R(i).time =0:R(i).no=iForj = 1 To 8R(i).d(j) =0:R(i).a(j) =FalseNext j,iEnd SubPrivate Sub cmd_confirm_Click()Dim h, m, k, time As Integer, ch, pass, s1 As StringK = Instr(txt_time, text, : ):If k<2 Then Goto error1H = Val(Left(txt_time. Text, k-1)):m = Val(Mid(txt_time. Text, k+1))If h>11 Or h=11 And m>0 Or m>=60 Then goto errorlTime=________′计算答题时间,以分钟为单位If txt_plater, text<1 or txt_player, text>200 Then Goto errorlch=________pass = IIf(chk_yn.________=0, N , Y )s1 = txt_time. Text+Space____+ txt_player. Texts1 = s1 + Space(10 - Len(txt_player. Text))+ch+Space(8)+passList1. Additem s1K = Val(txt_player. Text) ′k为选手编号R(k). no =k ′编号为k的选手的提交信息记录在下标为k的数组′元素中If k>maxindex Then maxindex = kM =Asc(ch)-Asc( a )If pass< > Y Then ′编号为k的选手提交第m个题目的解答不正确R(k).d(m)=R(k).d(m)+1Else If R(k).a(m)< >True Then ′已经提交正确的题目的解答不再计算R(k).a(m) =true:R(k).num=R(k).num+1R(k).time = R(k). time +________Call statistic ′调用过程statistic进行实时排名和输出End IfExit Suberror1: MsgBox 录入信息有错误! ,vbOKOnlyEnd Sub
填空题
【说明】设计一个日期类Date包括年、月、日等私有数据成员。要求实现日期的基本运算,如某日期加上天数、某日期减去天数、两日期相差的天数等。在Date类中设计如下重载运算符函数:Date operator + (int days) : 返回某日期加上天数得到的日期。Date operator - (int days) : 返回某日期减去天数得到的日期。int operator - (Date&b): 返回两日期相差的天数。【程序】#include<iostream.h>int day tab[2][12]={{31,28,31,30,31,30,31,31,30,31,30,31},{31,29,31,30,31,30,31,31,30,31,30,31}}; day_tab二维数组存放各月天数,第一行对应非闰年,第二行对应闰年class Date{int year, month, day 年,月,日int leap(int); 判断是否闰年int dton(Date&)Date ntod(int)public:Date() { }Date (int y, int mint d) I year = y; month = m; day = d;}void setday(intd){day = d;}void setmonth(int m) {month = m;}void setyear(int y) {year =y;}int getday() {return day;}int getmonth() {return month:}int getyear() {return yea;}Date operator + (int days) +运算符重载函数{static Date date;int number =________date = ntod(number)return date}Date operator - (int days) -运算符重载函数{staffs Date date;int number=________; number - = days;date = ntod(number)return date;}int operator - (Date &b) -运算符重载函数{int days=________;return days;}void disp(){cout<<year<< . <<month<< . <<day<<endl;}};int Date: :leap( int year)if(________) 是闰年return 1; 不是闰年elsereturn0:}int Date:: dton( Date &d) 求从公元0年0月0日到d日期的天数{inty,m,days =0;for(y=1;y<=d. year;y++)if(________)days+ =366; 闰年时加366天else days + = 365; 非闰年时加365天for(m =0;m<d. month-1;m++)if( (6) )days += day_tab[1] [m];elsedays +=day_tab[0] [m];days + = d. day;return days;}Date Date::ntod(intn) 将从元0年0月0日的天数转换成日期{int y=1,m = 1,d,rest = n,lp;while____{ if(leap(y))if(rest<= 366) break;else rest - = 366;else 非闰年if(rest = 365 ) break;else rest-=365;y++;}y--;Ip = leap(y);while____{if(lp) 闰年if(rest>day_tab[1] [m - 1]) rest -= day_tab[1] [m-1];else break;else 非闰if(rest>day_tab[0] [m -1]) rest -= day_tab[0] [m-1];else break;m++;}d = rest;return Date(y;m,d);}void main(){Date now(2003,10,1) ,then(2005,6,5);cout<< now: ;now. disp();cout<< then: ;then. disp();cout<< 相差天数: <<(then-now)<<endl;Date dl = now + 1000,d2 = now - 1000;cout<< now + 1000: ;d1. disp();cout<< now - 1000: :d2. disp();}