[计算机类试卷]软件水平考试(初级)程序员下午(应用技术)模拟试卷24及答案与解析.doc

上传人:diecharacter305 文档编号:507369 上传时间:2018-11-29 格式:DOC 页数:22 大小:334.50KB
下载 相关 举报
[计算机类试卷]软件水平考试(初级)程序员下午(应用技术)模拟试卷24及答案与解析.doc_第1页
第1页 / 共22页
[计算机类试卷]软件水平考试(初级)程序员下午(应用技术)模拟试卷24及答案与解析.doc_第2页
第2页 / 共22页
[计算机类试卷]软件水平考试(初级)程序员下午(应用技术)模拟试卷24及答案与解析.doc_第3页
第3页 / 共22页
[计算机类试卷]软件水平考试(初级)程序员下午(应用技术)模拟试卷24及答案与解析.doc_第4页
第4页 / 共22页
[计算机类试卷]软件水平考试(初级)程序员下午(应用技术)模拟试卷24及答案与解析.doc_第5页
第5页 / 共22页
点击查看更多>>
资源描述

1、软件水平考试(初级)程序员下午(应用技术)模拟试卷 24 及答案与解析 1 阅读以下技术说明和流程图,根据要求回答问题 1至问题 3。 说明 图 4-8的流程图所描述的算法功能是将给定的原字符串中的所有前部空白和尾部空白都删除,但保留非空字符。例如,原字符串 “ FileName ”,处理变成 “File Name”。图 4-9、图4-10和图 4-11分别详细描述了图 4-8流程图中的处理框 A、 B、 C。 假设原字符串中的各个字符依次存放在字符数组 ch的各元素 ch(1)、 ch(2)、 、 ch(n)中,字符常量 KB表示空 白字符。 图 4-8所示的流程图的处理过程是:先从头开始找

2、出该字符串中的第一个非空白字符 ch(i),再从串尾开始向前找出位于最末位的非空白字符ch(j),然后将 ch(i)、 、 ch(j)依次送入 ch(1)、 ch(2)、 中。如果字符串中没有字符或全是空白字符,则输出相应的说明。 在图 4-8流程图中, strlen()是取字符串长度函数。 1 请将图 4-9、图 4-10和图 4-11流程图中 (1) (4)空缺处的内容填写完整。 2 在图 4-8流程图中,判断框 P中的条件可表示为: i (5)。 3 函数 f_str(char *str,char del)的功能是;将非申字符串 str分割成若干个子字符串并输出, del表示分割时的标志

3、字符。例如,若 str的值为 “66981636666257”, del的值为 “6”,调用此函数后,将输出 3个子字符串,分别为 “981”、 “3”和 “257”。请将函数 f_str中 (6) (8)空缺处的内容填写完整。 函数 void f_str(char *str, char del) int i,j,len; len = strlen(str); i = 0; while (i len) while ( (6) ) i+; /* 忽略连续的标志字符 */ /* 寻找从 srti开始直到标志字符出现的一个子字符串 */ j = i+1; while (strj !=del (7)=

4、“0“; /* 给找到的字符序列置字符串结束标志 */ printf (“ %st“, (8); 4 阅读以下技术说明和 C语言代码,根据要求回答问题 1至问题 6。 【说明】 有两个进程 (编号分别为 0和 1)需要访问同一个共享资源。为了解决竞争条件(race condition)的问题,需要实现一种互斥机制,使得在任何时刻只 能有一个进程访问该共享资源。以下【 C代码 1】给出了一种实现方法。 【 C代码 1】 int flag2; /+flag数组,初始化为 FALSE*/ Enter_Critical_Section(int my_task_id, int other_task_id

5、) while (flagother_task_id=TRUE); /*空循环语句 */ flagmy_task_id=TRUE; Exit_Critical_Section(int my_task_id, int other_task_id) flagmy_task_id=FALSE; 当一个进程要访问临界资源时,就可以调用【 C代码 1】给出的这两个函数。【 C代码 2】给出了进程 0的一个例子。 【 C代码 2】 Enter_Critical_Section(0,1); 使用这个资源 Exit_Critical_Section(0,1); 做其他的事情 4 什么是临界资源 (critic

6、al resource)?请用 100字以内的文字简要说明。 5 【 C代码 1】所示的方法 (1)实现共享资源的互斥访问。 (1) A能够 B不能 6 【 C代码 1】采用了一种繁忙等待 (busy waiting)的策略,这种策略的缺点是什么 ?请用 100字以内的文字简要说明。 7 如果把 Enter_Critical_Section()函数中的两条语句互换一下位置,则可能会出现什么情况 ? 8 【问题 5】 【 C代码 3】中 x, y是两个已定义的整型变量。对该程序段进行覆盖测试时,必须适当地选取测 试用例。如表 5-10所示给出了可供选择的 4组测试用例。若要实现语句覆盖,则至少应

7、采用的测试用例是 (2);若要实现条件覆盖,则至少应采用的测试用例是 (3);若要实现路径覆盖,则至少应采用的测试用例是 (4)或 (5)。 【 C代码 3】 int a:=0; if (x=O struct ele * next; elem; main(int argc, char * argv) FILE *fp; elem *h, *u, *proc(); if(argc=2 fclose(fp); output(h); while(h I=NULL) u=h*next; free(h); h=u; elem * proc(FILE *fp) int n, m; elem *u, *v,

8、 *p, *base; base=NULL; fscanf(fp, “%d, while(!feof(fp) fscanf(fp, %d, for(v=base; v!=NULL u=v, v=v- next); if( (1) ) if( (2) ) base=v- next; else u- next=v-next; v- q+=m; else v=(elem *)malloc(Sizeof)elem); v- no=n; v- q=m; p=base; while(p !=NULL) if( (3) )break; else u=p; p=p- next; if( (4) ) base=

9、v; else u- next=v; (5); Fscanf(fp, “%d“, return base; Output(elem *head) int count, order; elem *u, *v; printf(“ORDER QUANTITY COUNT NUMBERn“); u=head; order=1; while(u !=NULL) for(count=1, v=u- next;(6);count+, v=v- next); printf(“%4d%9d%6d“, order, u- q, count); order+=count; for(; (7) ;printf(“%4

10、d“, u- no), u=u- next); printf(“n“); 11 请认真阅读以下函数说明、图及 C程序,将程序段中 (1) (7)空缺处的语句填写完整。 【说明】 一般的树结构常采用孩子一 兄弟表示法表示,即用二叉链表代表树的存储结构,链表中节点的两个链域分别指向该节点的第一个孩子节点和下一个兄弟节点,例如,如图 5-9(a)所示的树和如图 5-9(b)所示的树的孩子一兄弟表示。 函数LevelTraverse()的功能是对给定树进行层序遍历。例如,对如图 5-9所示的树进行层序遍历时,节点的访问次序为 DBAEFPC。 对树进行层序遍历时使用了队列结构,实现队列基本操作的函数原

11、型如表 5-12所示。 Bool、 Status类型定义如下: typedef enumFALSE=0, TRUE=1Bool; typedef enumOVERFLOW=-2, UNDERFLOW=-1, ERROR=0, OK=1)Status; 树的二叉链表节点定义如下: typedef struct N6de char data; struct Node *firstchild, *nextbrother; Node, *TreeNode; 【 C函数程序】 Status LevelTraverse(TreeNode root) /*层序遍历树,树采用孩子一兄弟表示法, root是树根

12、节点的指针 */ Queue tempQ; TreeNode ptr, brotherptr; if(!root) return ERROR; InitQueue( (1); brotherptr=root- nextbrother; while(brotherptr)(EnQueue( (2); /*end-while*/ while( (3) ) (4); Printf(“%ct“, ptr- data); if( (5) ) continue; (6); brotherptr=ptr- firstchiid- nextbrother; while(brotherptr) EnQueue(

13、 (7); /*end-while*/ /*end-while*/ return OK; /*LevelTraverse*/ 12 阅读以下应用说明及 Visual Basic部分程序代码,将应填入 (n)处的字句写在对应栏内。 【说明】 在窗体上画一个名称为 Combo1的组合框,画两个名称分别 Labe11、 Labe12及Caption属性分别为 “城市名称 ”和空白的标签。程序运行后,当在组合框中输入一个新项后按回车键 (ASCII码为 13)时,如果输入的项在组合框的列表中不存在,则自动添加到组合框的列表中,并在 Labe12中给出提示 “已成功添加输入项 ”;如果存在,则在 Lab

14、e12中给出提示 “输入项已在组合框中 ”。 【程序】 Private Sub Combo1 (1) (KeyAscii As Integer) If KeyAscii=(2) Then For i=0 To (3) If Combo1. Text=(4) Then Labe12. Caption =“输入项已在组合框中 “ Exit Sub End If Next i Label2. Caption =“已成功添加输入项 “ Combo1. (5) Combo1.Text End If End Sub 13 阅读以下说明及 Visual Basic部分程序代码,将应填入 (n)处的字句写在对

15、应栏内。 【说明】 本程序是一个可进行数制转换的应用程序,图 1所示是其运行界面。 txtDec为 TextBox控件名, Lblkes为转换结果 label控件名。 【程序代码】 Option Explicit Private Function convert(pintDec As Intege, pintS As Integer)As String Dim intCt As Integer,intR As Integer Dim strCov As String,strRes As String intR=pintDec Mod pintS Do While (1) strCov=strC

16、ov const int OPENING = 2; const int OPEN = 3; const int CLOSING = 4; const int STAYOPEN = 5; /定义状态变量,用不同整数表示不同状态 class Door private: private: int state; /传输门当前状态 void setState(int state) this- state = stale; /设置当前状态 public: Door () :state (CLOSED) ; void getState() /根据当前状态输出相应的字符串 switch(state) case

17、 OPENING: cout “OPENING“ endl; break; case CLOSED: cout “CLOSED“ endl; break; case OPEN: cout “OPEN“ endl; break; case CLOSING: cout “CLOSING“ endl; break; case STAYOPEN: cout “STAYOPEN“ endl; break; void click() /发生 click事件时进行状态转换 if ( (1) ) setState(OPENING); else if ( (2) ) setState(CLOSING); els

18、e if ( (3) ) setState(STAYOPEN); void timeout() /发生 timeout事件时进行状态转换 if (state = OPEN) setState(CLOSING); void complete() /发生 complete事件时进行状态转换 if (state = OPENING) setState(OPEN); else if (state = CLOSING) setState(CLOSED); ; int main() Door aDoor; aDoor.getState(); aDoor.click(); aDoor.getState();

19、 aDplete(); aDoor.getState(); aDoor.click(); aDoor.getState(); aDoor.click(); aDoor.getState(); return 0; 【 C+代码 2】 class Door public: DoorState *CLOSED, *OPENING, *OPEN, *CLOSING, *STAYOPEN, *state; Door(); virtual Door() . /释放申请的内存,此处代码省略 ; void setState(DoorState *state) this- state = state; void

20、 getState() /例如,当前状态为 CLOSED时,输出字符串为 “CLOSED“ ; void click(); void timeout(); void complete(); ; Door:Door() CLOSED = new DoorClosed(this); OPENING = new DoorOpening(this); OPEN = new DoorOpen(this); CLOSING = new DoorClosing(this); STAYOPEN = new DoorStayOpen(this); state = CLOSED; void Door:click(

21、) (4); void Door:timeout() (5); void Door:complete() (6); class DoorState /定义一个抽象的状态,它是所有状态类的基类 protected: Door *door; public: DoorState(Door *door) this- door = door; virtual DoorState(void); virtual void click() virtual void complete() virtual void timeout() ; class DoorClosed :public DoorState /定

22、义一个基本的 closed状态 public: DoorClosed(Door *door):DoorState(door) virtual DoorClosed () void click(); ; void DoorClosed:click() (7); /其他状态类的定义与实现代码省略 iht main() Door aDoor; aDoor.getState(); aDoor.click(); aDoor.getState(); aDplete(); aDoor.getState(); aDoor.timeout(); aDoor.getState(); return 0; 14 请将

23、以上【 C+代码 1】与【 C+代码 2】程序段中的 (1) (7)空缺处的语句填写完整。 15 请用 150字以内的文字简要说明【 C+代码 1】、【 C+代码 2】这两种对传输门进行状态模拟的设计思路的区别之处。 16 【说明】 下面是一个 Applet程序,程序的功能是在显示面板上输出字符串。当 html页面被其他窗口遮挡后再次显示时,请给出输出结果。 import java.awt.*; import java. (1). *; public class MyApplet (2) Applet public void (3) (Graphics g) g.drawString(tip,

24、20,40); tip =“I am Java Applet“; public void init() tip =“welcome“; private (4) tip; html head title A Simple Applet /title /head body applet code=“MyApplet.class“ width=800 height=400 /applet /body /html 网页输出 (5) 软件水平考试(初级)程序员下午(应用技术)模拟试卷 24 答案与解析 1 【正确答案】 本题用分层的流程图形式描述给定的算法。图 4-8所描述的流程图是顶层图,其中用 A、

25、 B、 C标注了 3个处理框。而图 4-9、图 4-10和图 411所描述的流程图分别对这 3个处理框进行了细化。 处理框 A的功能是依次检查 ch(1), ch(2), ( 即从串首开始查找 ),直到找到非空白字符 ch(i)。在图 4-9所描述的流程图中,对 i=1, 2 进行循环,只要未找到字符串尾部标志 (即 “0“),且 ch(i)为空白字符 (KB),那么还需要继续查找。因此, (1)空缺处所填写的内容是 “i =n”或 “n =i”或其他等价形式。 处理框 B的功能是依次检查 ch(n), ch(n-1), ( 即从串尾向前开始查找 ),直到找到非空字符 ch(j)。在图 4-1

26、0所描述的流程图中,对 j=n, n-1 进行循环,只要 ch(j)=KB(空白字符 ),那么还需要继续循环查找。由于 B框处理的前提是 A框中已经找到了非空字符 ch(i),因此循环最多到达 “j=i”处就会结束。可见, (2)空缺处所填写的判断条件是 “ch(j)=KB”。而图 4-10中的判断条件 “j i”是可有可无的。 处理框 C的功能是将 ch(i), ch(i+1) , ch(j)的内容依次送入 ch(1), ch(2)中。在图 4-11所描述的流程图中,对 kf=i, i+l, , j进行循环,只要满足 “k=j”的条件,就要继续循并环做传送处理,因此 (3)空缺处所填写的内容

27、是 “k =i”或其等价形式。 由于 ch(i)应送往 ch(1), ch(i+1)应送往 ch(2) ,因此, ch(k)应送往 ch(k-i+1)。这是程序员应熟练掌握的基本功,即从几个特例,寻找普遍规律,再用特例代进去试验是否正确。因此, (4)空缺处所填写的内容是 “ch(k-i+1)”。 2 【正确答案】 在图 4-8所描述的流程图中,判断 ch是空白字符串,等价于 A框处理结束后没有找到空白字符。从图 4-9所描述的流程图中可以看出,循环变量 i超过 n(或达到 n+1)时,就说明从头到尾一直没有找到空白字符。因此,在图 4-8流程图中,判断框 P中的条件可表示为 “i n”,即

28、(5)空缺处所填写的内容是 “n”。 3 【正确答案】 函数 f_str(char*str, char del)的功能是:将非空字符串 str以分割标志字符为界线,分割成若干个子字符串并输出。由函数说明和 C代码可知,该函数对给定的字符串进行从左至 右的扫描,找出不包含标志字符 (变量 del的值 )的子字符串。在该函数 C代码中,变量 i的初值为 0, len表示字符串的长度。当 i len时进入循环体。如果当前字符 (即 stri的值 )是标志字符,则不做处理,继续扫描以处理标志字符连成一串的情况。因此 (6)空缺处所填写的内容是 “stri=del”或其等价形式。 当退出第 2个 whi

29、le循环时,当前字符 stri不是标志字符,此时从 stri开始继续寻找,直到标志字符出现的 个子字符串 (变量 i保持不变,用 j标记寻找的过程 ),给找到的字符序列置字符串结 束标志,以便于后面语句的输出。因此 (7)空缺处所填写的内容是 “strj”。 printf输出语句结束之后,就要继续寻找后面不包含标志字符的子字符串。此时,需要把数组指针 i移至 j的后面,再继续扫描。因此 (8)空缺处所填写的内容是“i=j+1”。 4 【正确答案】 在多道程序系统中,各进程可以共享各类资源,但有些资源一次只能供一个进程使用。需要互斥访问的资源称为临界资源 【试题解析】 在多道程序系统中,各进程可

30、以共享各类资源,但有些资源一次只能供一个进程使用。需要互斥访问的资源称为临界资源 (Critical Resource),如打印机、共享变量和表格等。 5 【正确答案】 B或不能 【试题解析】 【 C代码 1】所示的方法不能实现资源的互斥访问。例如,考虑如下的情形。 1)初始化的时候, flag数组的两个元素值均为 FALSE: 2)进程 0先执行,在执行 while循环语句时,由于 flag1=FALSE,所以程序顺利结束,不会被卡住,假设此时出现一个时钟中断,打断它的运行; 3)进程 1去执行,在执行 while循环语句时,由于 flag0=FALSE,所以程序顺利结束 ,不会被卡住,然后

31、就进入了临界区; 4)当进程 0再执行时,也进入了临界区,这样就同时有两个进程在临界区。 6 【正确答案】 由于该算法策略每个任务进程要循环地去判断当前能否访问临界资源,因此会浪费大量的 CPU时间,而且如果设计不合理,容易导致死锁 【试题解析】 本题考查的是进程之间的互斥问题,即基于繁忙等待 (Busy Waiting)的进程互斥实现方法。其基本思路是,当一个进程要进入临界区,首先需要检查是否允许它进入,若允许,则直接进入;否则,则循环等待。 在多道程序系统中,各个进程是 并发执行的,由于时钟中断的原因,使进程之间的执行顺序变得难以预测,每个进程都有可能在任意一条语句的后面被中断。在这种情况

32、下,如果要采用基于繁忙等待的互斥实现方法,就必须考虑所有的可能情况,即如果每个进程在不同的位置被中断时,能否正确地实现进程间互斥。 由于该算法策略需要使用一个循环语句不断执行测试指令,即每个进程要循环地判断当前能否访问临界资源,因此会浪费大量的 CPU时间,而且如果设计不合理,容易导致死锁。 7 【正确答案】 可能会出现死锁 【试题解析】 在 “Enter_Critical_Section(int my_task_jd, int other_task_id)”函数中,已提示 “while(flagother_task_id=TRUE);”是一条空循环语句。如果将它调到 “flagmy_task

33、_id=TRUE;”语句之后,将导致程序进入死锁状态。 8 【正确答案】 (2)A或 ( 和 组 ) (3)G或 ( 、 和 组 ) (4)E或 ( 、 和 组 ) (5)H或 ( 、 和 组 ) 【试题解析】 这是一道要求读者掌握软件测试过程中覆盖测试基本常识的分析题。本题的解答思路如下。 1)覆盖测试是一种白盒测试方法,通常应用在软件测试的早期,即单元测试阶段。其基本思路是以程序的内部结构为基础来设计测试用例,以覆盖尽可能多的程序内部逻辑结构,发现其中的错误和问题。测试人员必须事先拥有被测程序的规格说明书和程序清单。 2)在白盒测试用例设计中,有语句覆盖、判定覆盖、条件覆盖、判定 /条件覆

34、盖、条件组合覆盖和路径覆盖等几种常见的覆盖测试策略,这些策略的相关描述如表 5-15所示。3)【 C代码 3】程序段的程序流程图如图 5-13所示。 结合表 5-15中给出的语句覆盖测试策略的描述,选择足够多的测试用例数据,使被测程序中每条语句都至少执行 1次。对于本案例的程序段,可选择测试用例 (x=0,y=3),满足 “(x=0)and(y 2)|”的判断条件,使 A语句被执行 1次;可选择测试用例 (x=1, y=2),不满足 “(x 1)or(y=1)”的判断条件,使 B语句被执行 1次。因此 (2)空缺处应选择选项 A(即 和 组测试用例 )。 结合表 5-15中给出的判定覆盖测试策

35、略的描述,选择足够多的测试用例数据,使得程序中每个判定都获得 1次 “真 ”值和 “假 ”值,或者说使程序中每 1个取 “真 ”分支和取 “假 ”分支都至少通过 1次。对于本案例的程序段,可选择测试用例 (x=0, y=3),使判断条件 (x=0)and(y 2)的 “真 ”分支执行 1次;可选择测试用例 (x=1, y=2),使判断条件 (x 1)or(y=1)的 “假 ”分支执行 1次;可选择测试用例 (x=-1, y=2)或选择测试用例 (x=3, y=1),使判断条件 (x 1)or(y=1)的 “真 ”分支执行 1次。 条件覆盖测试策略的本质是:构造一组测试用例数据,使被测程序中每一

36、个判定语句的每个逻辑条件的可能取值至 少满足 1次。对于本案例的程序段要实施条件覆盖测试,可选择测试用例 (x=0, y=3),以同时满足判断条件(x=0)and(y 2)中 x=0和 y2的取值条件;可选择测试用例 (x=-1, y=2),满足判断条件 (x 1)or(y=1)中 x 1的取值条件;可选择测试用例 (x=3, y=1),满足判断条件 (x 1)or(y=1)中 y=1的取值条件。因此 (3)空缺处应选择选项 G(即 、 和 组测试用例 )。 结合表 5-15中给出的判定 /条件覆盖测试策略的描述,构造一组测试用例数据,使得判定中的每个逻辑条件取得各 种可能的值,并且使得每个判

37、定取得各种可能的判定结果。结合以上第 6)点的分析结论可知,对于本案例的程序段,选择测试用例 (x=0, y=3),同时满足判断条件 (x=0)and(y 2)中 x=0和 y 2的取值条件,且使得该判断条件的 “真 ”分支执行 1次。 选择测试用例 (x=1, y=2),使判断条件 (x=0)and(y 2)的 “假 ”分支执行 1次;同时不满足 (x1)or(y=1)的取值条件,且使判断条件 (x 1)or(y=1)的 “假 ”分支执行 1次。 选择测试用例 (x=-1, y=2),满足判断条件 (x 1)or(y=1)中 x 1的取值条件,且使得使该判断条件的 “真 ”分支执行 1次,使

38、判断条件 (x=0)and(y 2)的 “假 ”分支执行 1次。 也可选择测试用例 (x=3, y=1),满足判断条件 (x 1)or(y=1)中 y=1的取值条件,且使得使该判断条件的 “真 ”分支执行 1次,使判断条件 (x=0)and(y 2)的“假 ”分支执行 1次。 对于条件组合覆盖测试策略,其含义是选择足够多的测试用例数据,使被测程序中每个判定中逻辑条件的各种组合都至少出现 1次。对于本案例的程序段,要实现条件组合覆盖测试工作所需的测试用例如表 5-16所示。 9)结合表 5-15中给出的路径覆盖测试策略的描述,选择足够多的测试用例数据,使被测程序中每一条可能的路径至少执行 1次。

39、对于本案例的程序段主要有 3条路径:执行判断条件 (x=0)and(y 2)“真 ”分支的路径;执行判断条件 (x=0)and(y2)“真 ”分支的路径;执行判断条件 (x=0)and(y 2)“假 ”分支的路径。 选择测试用例 (x=0, y=3),同时满足判断条件 (x=0)and(y 2)中 x=0和 y 2的取值条件,使得该判断条件的 “真 ”分支路径被执行 1次。 选择测试用例 (x=1, y=2),同时不满足判断条件 (x 1)or(y=1)中 x 1和 y=1的取值条件,使得该判断条件的 “假 ”分支路径被执行 1次。 选择测试用例 (x=-1, y=2),满足判断条件 (x 1

40、)or(y=1)中 x 1的取值条件,或者选择测试用例 (x=3, y=1),满足判断条件 (x 1)or(y=1)中y=1的取值条件,使得使该判断条件的 “真 ”分支路径被执行 1次。 由以上分析可知, (4)、 (5)空缺处可分别填入选项 E(即 、 和 组测试用例 )和选项 H(即 、 和 组测试用例 )。 9 【正确答案】 V(G)=3 【试 题解析】 这是一道要求读者计算程序环路复杂度的试题。本题的解答思路如下。 程序的环路复杂度 V(G)也称为 McCabe复杂性度量,通常将它定义为程序控制流图 (见图 5-13)的区域数,它是构成基本路径集的独立路径数的上界,可依此得出应该设计的

41、测试用例数目。 在进行程序的基本路径测试时,从程序的环路复杂度可导出程序基本路径集合中的独立路径条数,以确保程序中每个可执行语句至少执行一次所必须的测试用例数目的上界。 计算控制流图环路复杂性 V(G)的一种简单方法是: V(G)=(区域数 )=(判断节点数 )+1。阅读图 5-13的程序控制流图可知,该图的判断节点数为 2个 (x=0)and(y2)和 (x 1)or(y=1),因此【 C代码 3】程序段的环路复杂度 V(G)=2+1=3。 10 【正确答案】 (1)v!=NULL)和该职工完成的产品数量信息 (即 fscanf(fp, “%d“, ),从而形成一个按照产品数量和工号排序的职

42、工有序链表。例如输入一个工号为 n的职工的全部信息后,就利用指针 v从链表的首节点开始顺序搜索满足条件 (即工号等于 n)的节点,这个过程依赖 for循环语句 (即 for(v=base; v !=NuLL u=v,v=v- next);)的实现。当循环条件 v!=NULL 且 v- no!=n 为真时,说明指针 v指向的当前节点存在但却不是满足条件的节点,所以指针 v通过语句u=v, v=v- next实现向后移动,继而指向下一个节点,然后 再重复上述的判断、移动过程,直到找到满足条件的节点或确定链表中根本不存在这样的节点为止。由于这两种结果不能同时发生,所以 for循环后的 if. els

43、e条件语句,先要对上述查找过程可能产生的两种结果做出选择,然后再决定继续执行的操作。又由于在 if条件为真的情况下,要执行的复合语句中包含累计产品数量的语句 (即 v-q+=m;),所以可判断出程序首先是对链表中存在的刚输入职工的工号的情况进行处理,因此 (1)空缺处所填写的内容是 “v!=NULL”可知,类 Door的 state成员变量用于记录类 Door所处的状态, 而 state变量的类型为 Doorstate*。由语句 “virtual void click()”、 “virtual void complete()”和“virtual void timeout()”可知, Doors

44、tate中分别具有 click、 timeout和 complete方法用来响应对应的事件。根据 (4)空缺处所在程序段 “voidDoor:click()”可得, (4)空缺处所填写的内容是 “state- click()”。 同理,根据 (5)空缺处所在程序段 “void Door:timeout()”可得, (5)空缺处所填写的内容是 “state- timeout()”:根据 (6)空缺处所在程序段 “void Door:complete()”可得, (6)空缺处所填写的内容是 “state- complete()”。 根据 (7)空缺处所在程序段给出的注释信息 “定义一个基本的 Cl

45、osed 状态 ”和语句“void DoorClosed:click()”可知, (7)空缺处所填写的内容与传输门当前状态为Closed 且发生 Click 事件时状态的迁移有关。结合如图 6-18所示中的状态转换关系可知,在 Click 事件下 Closed 状态将迁移到 Opening,因此 (7)空缺处应该将传输门的状态设置为 Opening。由于 Doorstate 变量存储了当前其存储的传输门的实例,因此可直接调用其方法 setState设置状态。同时考虑到传输门的状态采用类的实例变量表示,故 (7)空缺处所填写的内容为 “door- setState(door-OPENING)”。

46、 15 【正确答案】 代码 2将状态间的转换规则封装到具体的类中,当状态转换图的转换规则发生变化时,只需更改部分对应类中的状态迁移规则,而代码 1中的迁移规则散 落在程序中,维护起来较为困难。 注:答案类似即可 【试题解析】 【 C+代码 1】和【 C+代码 2】区别是,【 C+代码 2】将状态间的转换规则封装到具体的类中,当状态转换图的转换规则发生变化时,只需更改部分对应类中的状态迁移规则即可,这样更易于维护、移植。由于【 C+代码 1】中的迁移规则散落在程序中,因此维护起来较为困难。 16 【正确答案】 (1)applet (2)extends (3)paint (4)String (5)I am Java Applet 【试题解 析】 所有的 applet程序都要导入包 java.applet *所有的 applet程序继承自类 applet。此处填入继承关键字 extends。 applet的程序的绘制函数是paint()。此处填入变量类型 String。当 html 页面被其他窗口遮挡后再次显示时,变量 tip被修改为 “I am Java Applet”,所以这时显示的结果是 “I am Java Applet”。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试资料 > 职业资格

copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1