[计算机类试卷]软件水平考试(初级)程序员下午(应用技术)模拟试卷24及答案与解析.doc
《[计算机类试卷]软件水平考试(初级)程序员下午(应用技术)模拟试卷24及答案与解析.doc》由会员分享,可在线阅读,更多相关《[计算机类试卷]软件水平考试(初级)程序员下午(应用技术)模拟试卷24及答案与解析.doc(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,
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
2000 积分 0人已下载
下载 | 加入VIP,交流精品资源 |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 试卷 软件 水平 考试 初级 程序员 下午 应用技术 模拟 24 答案 解析 DOC
