[计算机类试卷]软件水平考试(初级)程序员下午(应用技术)模拟试卷22及答案与解析.doc
《[计算机类试卷]软件水平考试(初级)程序员下午(应用技术)模拟试卷22及答案与解析.doc》由会员分享,可在线阅读,更多相关《[计算机类试卷]软件水平考试(初级)程序员下午(应用技术)模拟试卷22及答案与解析.doc(20页珍藏版)》请在麦多课文档分享上搜索。
1、软件水平考试(初级)程序员下午(应用技术)模拟试卷 22及答案与解析 1 阅读以下某客房管理系统的算法说明和程序流程图,根据要求回答问题 1至问题4。 【算法说明】 某商务交流中心共有 N间客房。每间客房的房间号、房间等级、床位数及占用状态分别存放在数组 ROOM、 RANK、 NBED和 STATUS中。房间等级值为 1、 2或 3。房间的状态值为 0(空闲 )或 1(占用 )。客房是以房间 (不是床位 )为单位出租的。 程序流程图 (见图 2-11)所反映的算法是,根据几个散客的要求预订一间空房。程序的输入为:人数 M,房间等级要求尺 (R=0表示任意等级都可以 )。程序的输出为:所有可供
2、选择的房间号。1 在图 2-11所示的程序流程图中,若要某个房间 I被选中,则需要满足什么条件 ? 2 假设该商务交流中心当前各个房间的情况如表 2-14所示。当输入M=3, R=0时,该算法的输出是 (1)。当输入 M=2, R=1时,该算法的输出是 (2)。 3 如果等级为 r的房间每人每天的住宿费为 RATE(r),其中 RATE为数组,则为使该算法在输出每个候选的房间号 RM(J)后,再输出这批散客每天所需的总住宿费DAYRENT(J),在程序流程图 (见图 2-11)中 “ROOM(1)RM(J)”(b 所指向的方框中 )之后应增加的处理语句是 (3)。 4 如果限制该算法最多输出
3、K个可供选择的房间号,则在程序流程图 (见图 2-11)中“ N”(a所指向的判断框中 )应修改为 (4)。 5 阅读以下应用程序说明和 C程序,将 C程序段中 (1)(7)空缺处的语句填写完整。 说明 打保龄球是用一个滚球去打出 10个站立的柱,将柱击倒。一局分 10轮,每轮可滚球一次或多次,以击倒的柱数为依据计分。一局得分为 10轮得分之和,而每轮的得分不仅与本轮滚球情况有关,还可能与后续一两轮的滚 球情况有关。即某轮某次滚球击倒的柱数不仅要计入本轮得分,还可能会计入前一两轮得分。具体的滚球击柱规则和计分方法如下: 1) 若某一轮的第一次滚球击倒全部 10个柱,则本轮不再滚球 (若是第 1
4、0轮则还需另加两次滚球 )。该轮得分为本次倒柱数 (即 10)与以后两次滚球所击倒柱数之和。 2) 若某一轮的第一次滚球未击倒 10个柱,则可对剩下未倒的柱再滚球一次。如果这两次滚球击倒全部 10个柱,则本轮不再滚球 (若是第 10轮则还需另加一次滚球 ),该轮得分为本次倒柱数 10与以后一次滚球所击倒柱数之和。 3) 若某一轮的两次滚球未击 倒全部 10个柱,则本轮不再继续滚球,该轮得分为这两次滚球击倒的柱数之和。 总之,若一轮中一次滚球或两次滚球击倒 10个柱,则本轮得分是本轮首次滚球开始的连续 3次滚球击倒柱数之和 (其中有一次或两次不是本轮滚球 )。若一轮内二次滚球击倒柱数不足 10个
5、,则本轮得分即为这两次击倒柱数之和。表 3-15是打保龄球计分的某个实例说明。 以下 C程序 是模拟打一局保龄球的过程,统计各轮得分和累计总分。程序交互地逐轮逐次输入一次滚球击倒的柱数,计算该轮得分和累计总分。为记录一轮内击倒 10柱,但还暂不能计算该轮得分和累计总分的情 况,程序引入变量 ok,用来记录当前已完成完整计算的轮次。程序每输入一次滚球击倒柱数,就检查还未完成完整计算的轮次,并计算。 C程序 #include stdio.h #define N 13 struct int n; /* 一轮内滚球次球 */ int f; /* 第一次击倒柱数 */ int s; /* 第一次击倒柱数
6、 */ int score; /* 本轮得分 */ int total; /* 至本轮累计总分 */ int m; /* 完成本轮得分计算,还需滚球次数 */ aN; int ok = 0; /* 已完成完整计算的轮次数 */ int ball(int i, int n, int max) /* 完成一次滚球,输入正确击倒柱数 */ int d, j, k; static c=1; while (1) if(i = 10) printf(“ 输入第 %d轮的第 %d次滚球击倒柱数。 ( =%d)n“, i, n, max ); else printf(“ 输入附加的第 %d次滚球击倒柱数。 (
7、 =%d)n“, C+, max); scanf(“%d , if (d =0 printf(“ 不合理的击倒柱数,请重新输入。 n“) ) if (ok (1) ) /* 对以前未完成计算的轮次分别计算得分与累计总分 */ for(j = ok+1;(2); j+) aj.score += d; if (-aj.m = 0) aj.total = ( (3) ) + aj.score; ok =(4); return d; main ( ) int i, first, second, k; /* i表示轮次 */ for ( i = 1 ; ok 10 ; i+) ai.score = ai
8、.f = first = ball(i,1,10); if ( first = 10) ai.m = 2; ai.n = 1; if (first 10 if (first + second = 10) ai.m = 1; (6); if (i = 10 (7); printf( “各轮处 1次得分 “); for(k 1; k = 1; k+) printf(“%5d“, ak.f); printf(“n 各轮第 2次得分 “); for(k=1; k = i; k+) if (ak.n 2) printf(“ /“); else printf(“%5d“, ak.s); printf(“n
9、 各轮得分 “); for(k = 1; k = ok; k+) printf(“%5d“, ak.score); printf(“n 累计总分 “); for(k = 1; k = ok; k+) printf(“%5d“, ak.total); printf(“n“); 6 阅读以下应用程序说明和 C程序,将 C程序段中 (1)-(7)空缺处的语句填写完整。 说明 以下 C程序 所完成的功能是在 3X3方格中填入数字 1 N(N10)内的某 9个互不相同的整数,使所有相邻两个方格内的两个整数之和为质数。系统输出满足该要求的所有填法。系统的部分输出结果如图 3-18所示。 图3-18 系统的
10、部分输出结果 33方格从第 1行左上角方格开始的序号分别为 0、 1、2,第 2行左边方格开始的序号分别为 3、 4、 5,第 3行左下角方格开始的序号分别为 6、 7、 8。以下 C程序 采用试探法,即从序号为 0的方格 (左上角 )开始,为当前方格寻找一个合理的可填整数,并在当前位置正确填入后,为下一方格 寻找可填入的合理整数。如不能为当前方格寻找一个合理的可填整数,就要后退到前一方格,调整前一方格的整数。直至序号为 8的方格 (右下角 )也填入合理的整数时,就找到了一个解,将该解输出,并调整序号为 8的方格所填的整数,继续去找下一个解。 为了检查当前方格的填入整数的合理性, C程序引入二
11、维数组 checkMatrix,用于存放需要进行合理性检查的相邻方格的序号。 C程序 #include stdio.h #define N 12 int a 9; /* 用于存储方格所填入的整数 */ int bN+1; int pos; checkMatrix3 = -1,0,-1,1,-1,0,-1,1,3,-1,2,4,-1,3,-1 4,6,-1, 5,7,-1; void write(int a) int i, j; for ( i = 0; i 3; i+) for ( j = 0; j 3; j+) printf(“%3d“,a3*i+j); printf(“n“); int i
12、sPrime(int m) int i; if (m = 2) return 1; if (m = 1 | m % 2 = 0) return 0; for (i = 3; i * i = m; ) if (m % i = O) return 0; i+ =2; return 1; int selectNum(int start) int j; for (j = start; j = N; j+) if (bj) return j; return 0; int check ( ) /* 检查填入 pos位置的整数是否 合理 */ int i, j; for (i = 0; (j =(1) =
13、0; i+) if (!isPrime(apos + aj) (2); (3); extend () /* 为下一方格找一个尚未使用过的整数 * / a(4) = selectNum(1); bapos = 0; void change() /* 为当前方格找下一个尚未使用过的整数 (找不到回溯 ) */ int j; while (pos = 0 if (pos 0) return; bapos = 1; apos = j; bj = 0; find ( ) int ok = 1; pos = 0; apos = 1; bapos = 0; de if (ok) if ( (7) ) wri
14、te (a); change( ); else extend( ); else change( ); ok = check(pos); while (pos =0); main( ) int i; for (i = 1; i =N; i+) bi = 1; find( ); 7 阅读以下技术说明和 C语言函数,将 C程序段中 (1)-(5)空缺处的语句填写完整。 说明 函数 DelA - InsB ( LinkedList La, LinkedList Lb, int key 1,int key 2,int len)的功能是,将线性表 A中关键码为 key 1的节点开始的 len个节点,按原顺
15、序移至线性表B中关键码为 key 2的节点之前。若移动成功,则 返回 0;否则返回 -1。 线性表的存储结构为带头节点的单链表, La为表 A的头指针, Lb为表 B的头指针。单链表节点的类型定义如下。 typedef struct node int key; struct node*next; *LinkedList; C程序 int DelA_InsB (LinkedLiSt La, LinkedList Lb, int key1,int key2,int len LinkedList p, q, S, prep, pres; int k; if (!La - next | !Lb - n
16、ext | len =0) return-l; p = La- next; prep = La; while (p p = p- next; if (!p) return -1; /* 表 A中不存在键值为 key1的节点 */ q = p; k = 1; while (q k+; if (!q) return -1; /* 表 A中不存在要被删除的 len个节点 */ S = Lb - next; (3); while (s s = e- next; if (!s) return -1; /* 表 B中不存在键值为 key2的节点 */ (4) q- next; /* 将表 A中的 len个
17、节点删除 */ q- next=(5) pres- next = p; /* 将 len个节点移至表 B */ return 0; 8 阅读以下应用说明及 Visual Basic程序代码,根据要求回答问题 1至问题 3。 【说明】 在 Visual Basic程序中,设计一个 “个人所得税计算器 ”,其应用程序的运行窗口如图 6-16所示。 窗口中的 3个文本框和两个按钮的名称分别为 Txt_salary、 Txt_base、 TxL_tax、 Cmd_compute和 Cmd_quit。 “个人所得税计算器 ”程序运行时,文本框 Txt_base中存放的是免税金额基数 (应扣除的基本费用
18、)。当用户在文本框 Txt_salary 中输入月收入 (工资或薪金 )并单击【计算】按钮 (Cmd_compute后, Txt_tax框中就显示计算所得的应纳税额。文本框 Txt_base和 Txt_tax在运行 时不接受用户输入, Txt_base的内容以灰色显示。 个人工资 (或薪金 )所得税是按照超额累进的税率来征收的,其计算方法如下:以每月收入总额减去免税金额基数后的余额作为该月的月应纳税所得额,再将应纳税所得额按相应级数采用相应的税率进行累进计算。目前的免税金额基数为 1 600元,税率如表 6-15所示。(注:本表所称全月应纳税所得额是指依照本法第六条的规定,以每月收入额减除费用
19、1600元后的余额或者减除附加减除费用后的余额 ) 设某个人的全月应纳税所得额为M(元 ),用下面的公式计算其应缴纳的个人所得税额 S(元 ): 若 0 M500,则S=M5%; 若 500 M2000,则 S=5005%+(M-500)10%; 若 2000 M5000,则 S=5005%+150010%+(M-2000)15%; 若 5000 M20000,则S=5005%+150010%+300015%+(M-5000)20%; 假设某程序员 2008年 5月份工资总额为 4700元,减去 1600元后,应纳税所得额为 3100元,其应缴纳的个人所得税额为 5005%+150010%+1
20、10015%=340元。 在开发过程中,需要编 写的程序代码如下。 【 Visual Bask程序】 Option Base 0 Private Sub Cmd compute-Click() Dim paylevel,taxPrate paylevel=Array(0,500,2000,5000,20000,40000,60000,80000,100000,1000001 taxPrate=Array(5,10,15,20,25,30,35,40,45) M=(1) S = 0 If (M 0) Then For j =1 To 9 If (2) Then s=s+(paylevel(j)-
21、paylevel(j-1)*taxPrate(j-1)/100 Else (3) Exit For End if Next j End if (4)=Str$(S) End Sub Private Sub Cmd_quit_Click() End End Sub Private Sub Form_Load() Txt_tax.Text = “ “ Txt_salary.Text = “ “ Txt_base.Text = 1600 Txt_tax.Locked = True Txt_base.Enabled =(5) End Sub 8 请根据【说明】信息和如图 6-16的显示效果,将【 Vi
22、sual Basic程序】中 (1) (5)空缺处的程序语句填写完整。 9 若要求在图 6-16窗口中,用户输入月工资 (或薪金收入 )后,直接按回车键或向下方向箭就能使焦点 (当前光标 )跳到应扣除的基本费用的输入文本框,而不用【 Tab】键进行切换。请将以下文本框 ht_salary的 KeyDown(按键 )事件过程中空缺的程序代码填写完整。 If KeyCode =13 Or KeyCode = 40 Then (6) End If 10 为使应用程序启动时所载入的窗口 (图 6-16)中具有背景图像 (取自用户自定义的某个图像文件 “C:userbackground.bmp”),并且
23、在程序运行时,当被遮的该窗口又重现时,其背景图像会自动重画。在开发如图 6-16所示窗体时,应对窗体属性对话框 (图 6-17)中哪些关键属性进行什么样的设置 ? 11 阅读以下应用说明、图和 C+代码,根据要求回答问题 1至问题 3。 说明 已知以下 C+程序运行时的 输出结果如下。 1:1 1:1 1:1 C+程序 01 #include iostream 02 using namespace std; 03 class Stock 04 protect: 05 (1) ; 06 Stock(int n, int pr=1) 07 shares = n; share_val=pr; 08
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
2000 积分 0人已下载
下载 | 加入VIP,交流精品资源 |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 试卷 软件 水平 考试 初级 程序员 下午 应用技术 模拟 22 答案 解析 DOC
