【计算机类职业资格】初级程序员下午试题-7及答案解析.doc
《【计算机类职业资格】初级程序员下午试题-7及答案解析.doc》由会员分享,可在线阅读,更多相关《【计算机类职业资格】初级程序员下午试题-7及答案解析.doc(10页珍藏版)》请在麦多课文档分享上搜索。
1、初级程序员下午试题-7 及答案解析(总分:120.00,做题时间:90 分钟)一、B试题一/B(总题数:1,分数:15.00)1.【流程图】 (分数:15.00)填空项 1:_二、B试题二/B(总题数:1,分数:15.00)2.【说明】程序 8 用于计算某公司每个职工应缴纳的个人所得税额和全体职工缴纳的个人所得税总额,职工的当月收入(工资或薪金)通过键盘输入,每次输入一个职工的工号和工资(或薪金)。由于该公司的工资或薪金是不定时发放的,所以输入过程中每个职工的收入会出现多次输入,整个输入以工号小于等于 0 结束。假设个人所得税法规定:个人收入所得,按月计税,以每月收入总额减除免税金额 800
2、元后的余额作为该月的月应纳税所得额。适用税率如表 2 所示。B表 2/B 级数 月应纳税所得额 适用税率 (%)123456789不超过 500 元的部分501 元2000 元的部分2001 元5000 元的部分5001 元2000 元的部分2001 元4000 元的部分4001 元6000 元的部分6001 元8000 元的部分8001 元100000 元的部分超过 100000 元的部分 51015202530354045上表表明,个人收入所得税是按照超额累进的税率来征收的。设一个人的月应纳税所得额为 K(元),用下面的公式计算其应缴纳的个人所得税额 S (元);若 0K500,则 S=K
3、5%;若 500K2000,则 S=5005%+(K-500)10%;若 2000K5000,则 S=5005%+150010%+(K-2000)15%;若 5000K20000,则 S=5005%+150010%+300015%+(K-5000)20%; .例如,某人某月收入总额为 4100 元,减去 800 元后,应纳税所得额为 3300 元,其应缴纳的个人所得税额为 500*5%+1500*10%+1300*15%=370 元。【程序】#includestdio.h#define MaxNum 50#define BASE 800 /*免税金额基数*/int paylevel=0,500
4、,2000,5000,20000,40000,60000,80000,100000,1000001;int taxPrate=5,10,15,20,25,30,35,40,45; /*税率表*/typedef structint ld; /*职工的工号*/long Salary; /*职工的工资*/ Info;/*查找工号为 ld 的职工在数组 employee 中的下标,返回值为 0 表示没有*/int find (int ld ,Info employee, int m) int j;employee0. Id=Id;for(j=m;U (1) /U;j-);return j;void m
5、ain(void) Info employeeMaxNum+1;long Wage;double sum=0, K,S;int i,j,N=0,Code;scanf(“%d %Id“,while(Code0)i=find (Code, empolyee, N );if(i0)employee i. Salary+=Wage;elseU (2) /U;employeeN. Id=Code;employeeN. Salary =Wage;scanf(“%d %Id“, for(i=1;i=N;i+) K=U (3) /U; /*计算月应纳税所得额*/S=0; /*月应纳税额赋初值*/if(K0)
6、for(j=1;j9;j+)ifU (4) /U /*月应纳税所得额超过第 j 级*/S=S+(paylevelj-paylevelj-1)*taxPratej-1/100;elseS =S+U (5) /U* taxPratej-1/100; break; printf(“职工%d 应缴纳的个人所得税额:%10.21f/n“,employeei.Id,S);sum+=S;printf(“全体职工个人所得税总额:%10.21f/n“,sum);(分数:15.00)填空项 1:_三、B试题三/B(总题数:1,分数:15.00)3.【说明】 下面的程序功能的功能是以行为单位对字符串按下面的条件进行
7、排序。排序条件为:从字符串中间一分为二,右边部分按字符的 ASCII 值降序排序,排序后左边部分与右边部分进行交换。如果原字符串长度为奇数,则最中间的字符不参加排序,字符仍放在原位置上 例如:位置:0 1 2 3 4 5 6 7 源字符串:h g f e a b c d 则处理后字符串:d c b a h g f e 函数 ReadDat()实现从文件 in.dat 中读取数据(每行字符串长度均小于 80),函数 WriteDat()把结果 dat 输出到文件 out.dat 中。 #includestdio.h #includesiring.h #includeconio.h char da
8、t20 80; void jsSort() int i,j,k,strl; char ch; for(i=0;i20;i+) strl=strlen(datei); for(j=U (1) /U;jstrl;j+) /*对后半部分的字符串进行排序*/ for(k=j+1;kstrl;k+) if(U (2) /U) ch=dati j; doti j=dati k; dati k=ch; for(j=0;U (3) /Uj+) /*前后两部分进行交换*/ ch = date i j; dote i j = date i (strl+1)/2+j; dat i (strl+1)/2+j=ch;
9、void main() reodDat(); isSort(); writeDot(); readDat () FILE * in; int i=0; char * p; U (4) /U; while(i20 if(p) *p=0; i+; fclose (in); writeDat() FILE * out; int i; clrscr (); out = fopen(“out. dat“ ,“W“); for(i=0;i20;i+) printf(“%s/n“,dari); printf (U (5) /U); fclose (out); (分数:15.00)填空项 1:_四、B试题四/
10、B(总题数:1,分数:15.00)4.【说明 4.1】 假设两个队列共享一个循环向量空间(如图 1-2 所示),其类型 Queue2 定义如下: typedef struct DateType data MaxSize; int front2,rear2; Queue2; 对于 i=0 或1,fronti和 reari分别为第 i 个队列的头指针和尾指针。函数EnQueue (Queue2*Q,int i,DaleType x)的功能是实现第 i 个队列的入队操作。 【函数 4.1】 int EnQueue(Queue2 * Q, int i, DateType x) /*若第 i 个队列不满
11、,则元素 x 入队列,并返回 1;否则,返回 0*/ if(i0i1) return 0; if(Q-reari=Q-frontU (1) /U return 0; Q-dataU (2) /U=x; Q-reari=U (3) /U; return 1; 【说明 4.2】 函数BTreeEqual(BinTreeNode*T1,BinTtneNode*T2)的功能是递归法判断两棵二叉树是否相等,若相等则返回1,否则返回 0。函数中参数 T1 和 T2 分别为指向这两棵二叉树根结点的指针。当两棵树的结构完全相同,并且对应结点的值也相同时,才被认为相等。 已知二叉树中的结点类型 BinTreeN
12、ode 定义为: struct BinTreeNode char data; BinTreeNode * left, * right; ; 其中 dau 为结点值域,leR 和 risht 分别为指向左、右子女结点的指针域, 【函数 4.2】 int BTreeEqual(BinTreeNode * T1, BinTreeNode * T2) if(Ti = NULL /*若一棵为空一棵不为空,则不等*/ else if(U (5) /U) return 1; /*若根结点值相等并且左、右子树*/ /*也相等,则两棵树相等,否则不等*/ else return 0; (分数:15.00)填空项
13、 1:_五、B试题五/B(总题数:1,分数:15.00)5.1】 【应用说明 5.1】 本应用程序的窗体中有一个下拉式列表框(名称为 Combo1)和两个文本框(名称分别为 Txt1 和 Txt2)。运行时,用户从 Combo1 的列表中进行选择,程序就会将选中条目的内容以及编号(从 0 开始)分别在文本框 Txt1 和 Txt2 中显示出来。 【程序代码 5.1】 Private Sub Combo1_Click() Txt1.Text = Combo1.U (1) /U Txt2.Text = Combo1.U (2) /U End Sub (注:可供(2)处选择的选项:List, Ind
14、ex, Listlndex, ListCount, Number) 【应用说明 5.2】 本应用程序的运行窗口如图 2 所示。 (分数:15.00)填空项 1:_六、B试题六/B(总题数:1,分数:15.00)6.【说明】 下面程序的功能是显示已定义的一个 3 行 3 列的二维数组每行的元素,并求所有元素的和并输出。请在程序的每条横线处填写一个适当的语句,使程序的功能完整。 public class Arrayt U (1) /UstaticU (2) /Umain(String args) int sum=0; int = t 11,12,13, 21,22,23,31,32,33; for
15、(int i=0;U (3) /Ui+) System. out. print(“b“+i+“:“); for(int j=0;U (4) /Uj+) System. out. print(bi j +“ “); U(5) /U System. out. println (); System. out. println(“sum=“+sum); (分数:15.00)填空项 1:_七、B试题七/B(总题数:1,分数:15.00)7.【说明】 某学校举办了一场奥运知识竞赛,参加竞赛的选手为 200 名,1200 为选手编号。竞赛时间为 9:0011:00。8 道竞赛题目依次从“A”“H”编号,选手
16、可按任意次序答题,每完成一道题目,可立即提交答案。若答案正确(Y),则选择其他题目进行解答,否则,可继续做该题目或选择其他题目进行解答,直至竞赛结束。 选手提交答案的情况及判定结果由专人即时录入,录入数据包括提交答案的时间、选手编号、题目编号(AH)、是否正确(Y/N)等。 对竞赛情况进行统计和排名的规则如下: 1若选手 X在竞赛时提交的题目 P 解答正确,则解答该题目所用时间计算如下: 解答题目 P 的用时=提交题目 P 正确的时间-竞赛的开始时间+罚时,罚时=提交题目 P 错误解答的次数20 例如:表 1 中 14 号选手在 10:27提交了题目 A 的正确解答,因此该选手正确解答该题目所
17、用时间 P 为 87 分钟,由于他在 09:37 和 09:52两次提交了题目 A 的错误解答,因此罚时为(220)分钟=40 分钟,所以 14 号选手解答题目 A 的用时=(87+ 40)分钟:127 分钟。 2已经提交正确答案的题目再次提交时不再计算。 3竞赛结束时,选手的总用时为所有解答正确的题目用时累加所得,解答不正确的题目不计时。 4排名时,完成题目数量多者排名靠前;若完成的题目数相同,则用时少者排名靠前;若完成的题目数和所用时间均相等,则名次相同;完成题目数为。的选手不参加排名。 本应用程序的运行窗口如图 3 所示。 (分数:15.00)填空项 1:_八、B试题八/B(总题数:1,
18、分数:15.00)8.【说明】 设计一个日期类 Date 包括年、月、日等私有数据成员。要求实现日期的基本运算,如某日期加上天数、某日期减去天数、两日期相差的天数等。 在 Date 类中设计如下重载运算符函数: Date operator + (int days) : 返回某日期加上天数得到的日期。 Date operator - (int days) : 返回某日期减去天数得到的日期。 int operator - (Date /day_tab 二维数组存放各月天数,第一行对应非闰年,第二行对应闰年 class Date int year, month, day /年,月,日 int lea
19、p(int); /判断是否闰年 int dton(Date 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 =U (1) /U date =
20、ntod(number) return date Date operator - (int days) /-运算符重载函数 staffs Date date; int number=U (2) /U; number - = days; date = ntod(number) return date; int operator - (Date return days; void disp() coutyear“.“month“. “dayendl; ;int Date: :leap( int year) if(U (4) /U) /是闰年 return 1; /不是闰年 else return0
21、: int Date: dton( Date for(y=1;y=d. year;y+) if(U (5) /U)days+ =366; /闰年时加 366 天 else days + = 365; /非闰年时加 365 天 for(m =0;md. month-1;m+) if( (6) ) days += day_tab1 m; else days +=day_tab0 m; days + = d. day; return days; Date Date:ntod(intn) /将从元 0 年 0 月 0 日的天数转换成日期 int y=1,m = 1,d,rest = n,lp; whi
22、le(1) if(leap(y) if(rest= 366) break; else rest - = 366; else /非闰年 if(rest = 365 ) break; else rest-=365; y+; y-; Ip = leap(y); while(1) if(lp) /闰年 if(restday_tab1 m - 1) rest -= day_tab1 m-1; else break; else /非闰 if(restday_tab0 m -1) rest -= day_tab0 m-1; else break; m+; d = rest; return Date(y;m,
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
5000 积分 0人已下载
下载 | 加入VIP,交流精品资源 |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 职业资格 初级 程序员 下午 试题 答案 解析 DOC
