1、软件水平考试(初级)程序员下午(应用技术)模拟试卷 19及答案与解析 1 阅读以下说明和流程图,将应填入 (n)处的字句写在对应栏内。 说明 下面的流程图用于统计一个英文句子中单词的个数 N。假设该英文句子中只含字母、空格和句点 “.”,其中句点表示结尾,空格之间连续的字母串称为单词。 流程图 2 阅读下列函数说明和 C函数,将应填入 (n)处的字句写在对应栏内。 函数 2.1说明 下面程序的功能是:将由键盘输入的某个十进制数转换成对应的 R进制数并输出。这里 R是 2到 16的整数,由键盘输入。例如, 输入 n=128, base=13后的输出为 9B。 函数 2.1 #include st
2、dio.h main() char b16=0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F; int c64,n,i=0,base; printf(“Enter a number:“);scaaf(“%d“, printf(“Enter new base:“);scanf(“%d“, doci=(1); i+; n=n/base; while(2); printf(“Transmit new base:“); for(- -i;i =0;- -i)printf(“%c“,(3); 函数 2.2说明 所谓回文字符中是指正序和逆序拼写相同的字符串,例如 astrtsa, adgdt
3、dgda等。下面函数 int fun(char *str)的功能是判断字符串 str是否是回文,当字符串是回文时,函数返回 1,否则返回 0。 函数 2.2 int fun(char *str) int i,j,l; for(i=0;stri! =0;i+); l=i/2; for(j=0,i- -;j =1;(4) if(5) return 0; return 1; 3 阅读下列函数说明和 C函数,将应填入 (n)处的字句写在对应栏内。 说明 邻接表是图的一种顺序存储与链式存储结合的存储方法。其思想是:对于图 G中的每个顶点 vi,将所有邻接于 vi的顶点 vj连成一个单链 表,这个单链表就
4、称为顶点 vi的邻接表,其中表头称作顶点表结点 VertexNode,其余结点称作边表结点EdgeNode。将所有的顶点表结点放到数组中,就构成了图的邻接表 AdjList。邻接表表示的形式描述如下: #define MaxVerNum 100 /*最大顶点数为 100*/ typedef struct node /*边表结点 */ int adjvex; /*邻接点域 */ struct node *next; /*指向下一个边表结点的指针域 */ EdgeNode; typedef struct vnode /*顶点表结点 */ int vertex; /*顶点域 */ EdgeNode
5、*firstedge; /*边表头指针 */ VertexNode; typedef VertexNode AdjListMaxVerNum; /*AdjList是邻接表类型 */ typedef struct AdjList adjlist; /*邻接表 */ int n; /*顶点数 */ ALGraph; /*ALGraph是以邻接表方式存储的图类型 */ 深度优先搜索遍历类似于树的先根遍历,是树的先根遍历的推广。 下面的函数利用递归算法,对以邻接表形式存储的图进行深度优先搜索:设初始状态是图中所有顶点未曾被访问,算法从某顶点 v出发,访问此顶点,然后依次从v的邻接点出发进行搜索,直至所
6、有与 v相连的顶点都被访问;若图中尚有顶点未被访问 ,则选取这样的一个点作起始点,重复上述过程,直至对图的搜索完成。程序中的整型数组 visited的作用是标记顶点 i是否已被访问。 函数 void DFSTraverseAL(ALGraph *G)/*深度优先搜索以邻接表存储的图 G*/ int i; for(i=0;i (1);i+) visitedi=0; for(i=0;i (1);i+)if(2) DFSAL(G,i); void DFSAL(ALGraph *G,int i) /*从 Vi出发对邻接表存储的 图 G进行搜索 */ EdgeNode *p; (3); p=(4); w
7、hile(p!=NULL) /*依次搜索 Vi的邻接点 Vj*/ if(! visited(5) DFSAL(G,(5); p=p- next; /*找 Vi的下一个邻接点 */ 4 阅读下列函数说明和 C函数,将应填入 (n)处的字句写在对应栏内。 说明 Kruskal算法是一种构造图的最小生成树的方法。设 G为一无向连通图,令 T是由 G的顶点构成的于图, Kmskal算法的基本思想是为 T添加适当的边使之成为最小生成树:初始时, T中的点互相不连通;考察 G的边集 E中的每条边,若它的两个顶点在 T中不连通,则将此边添加到 T中,同时合并其两顶点所在的连通分量,如此下去,当添加了 n-1
8、条边时, T的连通分量个数为 1, T便是 G的一棵最小生成树。 下面的函数 void Kruskal(EdgeType edges,int n)利用 Kruskal算法,构造了有 n个顶点的图 edges的最小生成树。其中数组 father用于 记录 T中顶点的连通性质:其初值为 fatheri=-1 (i=0,1,n -1),表示各个顶点在不同的连通分量上;若有fatheri=j, j -1,则顶点 i, j连通;函数 int Find(int father,int v)用于返回顶点 v所在树形连通分支的根结点。 函数 #define MAXEDGE 1000 typedef struct
9、 int v1; int v2; EdgeType; void Kruskal(EdgeType edges,int n) int fatherMAXEDGE; int i,j,vf1,vt2; for(i=0;i n;i+ +) fatheri=-1; i=0; j=0; while(i MAXEDGE vf2=Find(father,edgesi.v2); if(2) (3)=vf1; (4); printf(“%3d%3dn“,edgesi.v1,edgesi.v2); (5); int Find(int father,int v) int t; t=v; while(fathert =
10、0) t=fathert; return(t); 5 阅读以下应用说明及 Visual Basic程序代码,根据要求回答问题 1至问题 4。 说明 某文件管理系统的图片浏览器如图 3-19所示。运行程序时,用户只要通过驱动器列表 框、目录列表框和文件列表框,选择文本文件所在的驱动器、文件夹及相应的文件名后,在图像框中将显示出相应的文件图像。 在开发过程中,假设驱动器列表框名为 drvFile,目录列表框名为 dirFile,文件列表框名为 filFile,选择文件类型组合框名为 cboFile,图像框名为 IMG onClick=over(this) title=放大 Show。 图 3-19
11、 图片浏览器 Visual Basic程序 Private Sub Form_Load () IMG onClick=over(this) title=放大 Show.Stretch=True cboFile.Addltem “位图文件 (*.bmp)“ cboFile.Addltem “图标文件 (*.ico)“ cboFile.Addltem “图元文件 (*.wmf)“ cboFile.Addltem “JPEG文件 (*.jpg)“ cboFile.Addltem “GIF文件 (*.gif)“ cboFile.ListIndex = 0 (1) End Sub Private Sub
12、 drvFile_Change () (2) End Sub Private Sub dirFile_Change () (3) End Sub Private Sub cboFile_Click () (4) Case 0 filFile. Pattern= “*.bmp“ Case 1 filFile. Pattern= “*.ico“ Case 2 filFile. Pattern= “*.wmf“ Case 3 filFile. Pattern= “*.jpg. Case 4 filFile. Pattern= “*.gif“ End Select End Sub Private Su
13、b filFile_Click() If (5) Then IMG onClick=over(this) title=放大 Show. Picture= LoadPieture(filFile. Path+ filFile.FileName) Else IMG onClick=over(this) title=放大 Show. Picture= LoadPicture( (6) + “ + (7) ) End If End Sub 5 请根据 说明 和图 3-19的显示结果,从以下备选答案 中为程序 (1) (7)空缺处选择正确的答案。 备选答案 A. filFile.path B. dirF
14、ile.Path=drvFile.Drive C Right(filFile.Path, 1) = “ D filFile.Pattern =“*.bmp“ E filFile.Path = dirFile.Path F filFile.FileName G Select Case cboFile.ListIndex 6 filFile.Pattern属性用于指定文件列表框中所显示的文件类型。若要同时显示 *.jpg和 *.gif两种文件类型, filFile.Pattern的属性值应如何设置 ? 7 若要在图 3-19窗口 (窗体名为 frm001)中新增一个命令按钮,单击该命令按钮后,图像
15、框所显示的图像就会成为此窗口的背景图像。请写出该命令按钮单击事件过程内的程序代码。 8 假设某应用程序开发工程 (默认的工程名为 “工程 1”)已先后创建了名为 Form01和Form02的两个窗体。为使窗体 Form02成为运行该工程时的启动窗体,在开发 过程应进行的操作过程如下。 在工程对话框中,用鼠标右键单击 “工程 1(工程 1)”,在选择 (8)命令,系统弹出如图 3-20所示的对话框。切换至图 3-20的 “通用 ”选项,在 “(9)”下拉列表框中,选择 “ (10)”。 9 阅读以下应用说明、图和 C+程序,将 C+程序中 (1) (6)空缺处的语句填写完整。 【说明】 以下【
16、C+程序】用于实现两个多项式的乘积运算。多项式的每一项由类 Item描述,而多项式由类 List描述。类 List的成员函数主要有: createList():创建按指 数降序链接的多项式链表,以表示多项式: reverseList():将多项式链表的表元链接顺序颠倒: multiplyList(ListL1, ListL2)计算多项式 L1和多项式 L2的乘积多项式。 【 C+程序】 #include iostream.h class List; class Item friend class List; private: double quot ; int exp ; Item *next
17、; Public: Item(double_quot,int_exp) (1) ; ; class List private: Item *list; Public: List() list=NULL: void reverseList(); void multiplyList(List L1,List L2); void createList(); ; void List:createList() Item *p,*U,*pre; int exp; double quot; list = NULL; while (1) cout “输入多项式中的一项 (系数、指数 ) :“ endl; ci
18、n quot exp: if ( exp 0 ) break ; /指数小于零,结束输入 if ( quot=0 ) continue; p = list; while ( (2) ) /查找插入点 pre = p; p = p- next; if ( p != NULL continue ; u =(3); if (p = list) list = u; else pre- next = u; u - next = p; void List:reverseList() Item *p, *u; if ( list=NULL ) return; p = list - next; list -
19、next = NULL; while ( p != NULL) u = p - next; p - next = list; list = p; p = u; void List:multiplyList ( List L1, List L2 ) Item *pL1,*pL2,*u; int k, maxExp; double quot; maxExp =(4): L2.reverseList(); list=NULL; for ( k = maxExp;k = 0;k- ) pL1 = L1.list; while ( pL1 != NULL pL2 = L2.1ist; while (pL
20、2 NULL quot = 0.0; while (pL1 != NULL pL2 = pL2 - next; else if ( pL1 - exp + pL2 - exp k ) pL1 = pL1 - next; else pL2 = pL2 - next; if ( quot !=0.0 ) u = new item( quot, k ); u - next = list; list = u; reverseList (); L2. reverseList (): void main() List L1,L2,L; cout “创建第一个多项式链表 n“; L1.createList(
21、); cout “创建第二个多项式链表 n“; L2.createList(); L.multiplyList (L1,L2); 10 阅读以下应用说明、图和 Java代码,根据要求回答问题 1至问题 5。 【说明】 Stack类是 java. ntil包中专门用来实现栈的工具类。以下 Java程序是一个不使用库函数而实现字符串反转的程序。例如,输入: 123456,则输出: 654321:输入:asdfeg,则输出: gefdsa。 【 Java程序】 import java.applet.Applet; import java.awt.*; import java.awt.event.*;
22、 import java.util.*; public class UseStack extends Applet implements ActionListener Stack MyStack; Label prompt=new Label(“输入要反转字符 :“); Button pushBtn=new Button(“压栈 “); Button popBtn=new Button(“弹栈 “); /反转 TextField input=new TextField(5); int DrawStack =new int10; /记录堆栈中数据 int PoppedOut=new int20;
23、 /记录被弹出的数据 int StackCnt=0; /记录模拟堆栈的数组中的数据个数 String msg=“ “; public void init() MyStack=new Stack(); add(prompt); add(input); add(pushBtn); add(popBtn); pushBtn.addActionListener(this); (1) public void paint(Graphics g) for (int i=10; i StackCnt; i+) /模拟显示堆栈内部的数据排列情况 g.drawRect(50,200-i*20,80,20); g.
24、drawString(Integer.toString(DrawStacki),80,215-i*20); for (int i=0;(2) ) /显示被弹出的数据 g.drawString(Integer.toString(PoppedOuti),200+i*20,100); g.drawString(“堆栈 “,70,236); g.drawString(“栈底 “,135,225); g.drawString(“栈顶 “,160,225-StackCnt*20); g.drawString(msg,200,140); public void actionPerformed( (3) )
25、if (e.getAct ionCommand () = “压栈 “) /压栈操作 if(StackCnt 10) MyStack.push(new Integer( (4) ); DrawStackStackCnt+=Integer.parseInt(input.getText() ); input.setText (“ “); else msg=“输入数据过多,请先弹栈 !“ else if (e.getActionCommand () = “弹栈 “) /弹栈操作 if( (5) ) StackCnt-; PoppedOutPopCnt+=(Integer)(MyStack.pop().
26、intValue(); else msg=“堆栈已空,不能再弹栈 !“; repaint(); 软件水平考试(初级)程序员下午(应用技术)模拟试卷 19答案与解析 1 【正确答案】 (1) N0 (2) N+1 (3) 是 (4) 否 (5) = 【试题解析】 本题用到的两个变量及其作用分别为: A,存放输入的一个字符;N存放当前读取的单词个数。 (1)使用变量 N应先赋予初值,由上下文知其初值为 0; (2)读取单词的首字母后,单词个数 N应增 1; (3)读取单词的首字母后,循环读入单词的后继字母,直到遇到下一个非字母字符(空格或句点 )为止; (4)略; (5)读到句点表明句子结束,这时
27、输出结果并结束算法。 2 【正确答 案】 (1) n% base (2) n! =0 (3) bci (4) j+, i- (5) stri! =strj 【试题解析】 (1) (3)函数 2.1的基本思想是 “除 base取余 ”,即从低位开始以 n除以 base的余数作为转化后的一位 ci,再以 n除以 base的商作为新的 n,继续进行转化,直至除法商 0为止。最后将所得的 ci作为下标,从数组 b中找出对应的数码表示,即 bci。 (4) (5)此循环初始时, i和 j充当 str的头和尾指针,循环执行过程中,两指针同时以步长 1向 str的中间移动,比较所指字符是否相等,若不等则表明
28、 str不是回文字符串。 3 【正确答案】 (1) G- n (2) ! visitedi (3) visitedi=1 (4) G- adjlisti.firstedge (5) p- adjvex 【试题解析】 (1)此处循环是访问标志向量的初始化,应遍历 G的全体点,共计Gn 个; (2)若 Vi未被访问,则从 Vi开始搜索; (3)标记 Vi已访问; (4)为递归搜索 Vi的邻接点,需先取出 Vi边表的头指针; (5)若 Vi的邻接点 p- adjvex尚未被访问,则从它出发进行纵深搜索。 4 【正确答案】 (1) n-1 (2) vf1! =vf2 (3) fathervf2 (4)
29、 j+ (5) i+ 【试题解析】 (1)由上下文可知,变量 j记录了添加进最小生成树的边数,当 j超出 n-1时循环终止,构造过程结束; (2)此处的判别条件应该是: v1和 V2连通。由于 Vf1和 vf2分别是边 edgesi两顶点 v1、 v2所在连通分支的根, v1和 v2连通当且仅当 vf1和 vf2相等; (3) (4)根 据程序说明,当 v1和 v2不连通时,需添加 edgesi进最小生成树且合并v1和 v2所在连通分支。后者就是令 j自增 1;后者即连接 vf1和 vf2。 (5)对图中的边循环,继续考虑下一条边。 5 【正确答案】 在 Visual Basic应用程序中显示
30、磁盘驱动器、目录和文件的有关信息 (如设计资源管理器 ),除了使用对话框外, VB提供了文件系统内部控件:驱动器列表框 (DriveListBox)、目录列表框 (DirListBox)和文件列表框 (FileListBox)。 驱动器列表框用于显示系统中所有的有效 驱动器,它可以自动填写驱动器的名称和卷标。 目录列表框以目录树形式 (分层缩进 )显示当前目录的所有上级目录及下一级子目录。 文件列表框是一个特殊的 ListBox控件,它以列表形式显示当前目录中的所有文件名,并可选择按文件名、扩展名或属性排列内容。 这些控件通常在一个窗体中工作,程序设计时必须保持三者之间的同步关系。当用户在驱动
31、器列表框 (DriveListBox)中选择一个驱动器时, DirListBox控件就更新显示该驱动器上的目录树。当用户在目录列表框 (DirListBox)中选择一条路径 时,文件列表框 (FileListBox)控件中的内容为该目录下的文件列表。这些活动自动地触发 Change事件。但这些活动不能自动完成,需要为 Change事件编写代码。 本案例程序中,改变当前驱动器时将触发 drvFile_Change()事件,改变当前目录时将触发 dirFile_Change()事件。在 drvFile_Change()事件过程中,需要通过代码将驱动器列表框的 Drive属性 (指明当前驱动器 )赋
32、值给目录列表框的 Path属性,即 (2)空缺处所选择的语句是选项 B的 “dirFile.Path= drvFile.Drive”,使目录列表框中显示当前驱动器上所有的一级目录。在 dirFile_Change()事件过程中,需要将目录列表框的 Path属性 (指明当前路径 )赋值给文件列表框的 Path属性,即 (3)空缺处所选择的语句是选项 E的 “filFile.Path=dirFile.Path”,从而使驱动器列表框、目录列表框和文件列表框的显示内容保持一致 (同步 )。 由于本案例程序是一个图片浏览器,应限制用户只能选择图形文件,因此需要通过组合框指定所要浏览的图片类型,使得文件列
33、表框中只显示出所指定类型的相应文件。当用户更改文件类型组合框中的文件类型值时将触发 cboFile Click()事件。 根据图 3-19的显示结果可知,该图片浏览器支持包含 *.bmp、 *.ico、 *.wmf、*.jpg及 *.gif等多种文件类型。要将同一个表达式与不同的值进行比较,则需要用到 “Select.Case”条件选择语句,即在 cboFile_Click()事件中,需要通过 Select Case语句为文件列表框指定相应的 filFile.Pattern属性值。其中, filFile.Pattern属性用于指定文件列表框中所 显示的义件类型。因此 (4)空缺处所选择的语句是
34、选项 G的“Select Case cboFile.Listlndex”。 由于在窗体 Form_Load()过程中,通过语句 “cboFile.Listlndex=0”间接要求在文件列表框中只显示出后缀为 *.bmp的文件名,即 (1)空缺处所选择的语句是选项 D的filFile.Pattern=“*.bmp“。 在 filFile_Click()事件过程中,应判断文件所在目录是否为根目录,即 (5)空缺处所选择的语句是选项 C的 Right(filFile.Path, 1)=“。其中, filFile.Path属性用于说明所选文件的路径 (目录 )。如果文件所在目录是根目录,则直接通过语句
35、 “IMG onClick=over(this) title=放大Show.Picture=LoadPicture(filFile.Path+filFile.FileName)”,在图像框中显示出相应的图片。其中, filFile.FileName属性用于说明所选文件的文件名。如果文件所在目录不是根目录,则需要通过语句 “IMG onClick=over(this) title=放大Show.Picture=LoadPicture(filFile.Path+“+filFile.FileName)”在图像框中显示出相应的图片。因此 (6)空缺处所选择的语句是选项 A的 “filFile.Path
36、”, (7)空缺处所选择的语句是选项 F的 “filFile.FileName“。 6 【正确答案】 filFile.Pattern属性用于指定文件列表框中所显示的文件类型。若要同时品示多个类型时,用 “;”将各描述符隔开。例如,同时显示 *.jpg和 *.gif两种文件类型的语句如下。 filFile.Pattern=“*.jpg;*.gif“ 7 【正确答案】 若要在图 3-19窗口 (窗体名为 frm001)中新增一个命令按钮,单击该命令按钮后,图像框所显示的图像就会成为此窗口的背景图像。该命令按钮单击事件过程的程序代码如下。 程序代码 Private Sub Command1_Clic
37、k() frm001.Picture=IMG onClick=over(this) title=放大 Show.Picture End Sub 等价的程序代码 Private Sub Command1_Click() If Right(filFile.Path 1)=“ Then frm001.Picture=LoadPicture(filFile.Path+filFile.FileName) Else frm001.Picture=LoadPicture(filFile.path+“+filFile.FileName) End lf End Sub 8 【正确答案】 假设某应 用程序开发工程
38、 (默认的上程名为 “工程 1”)已先后创建了名为 Form01和 Form02的两个窗体。为使窗体 Form02成为运行该工程时的启动窗体,在开发过程应进行的操作过程如下。 在工程对话框中,用鼠标右键单击 “工程 1(工程 1)”,在快捷菜单中选择 工程 1属性 ()命令,系统弹出如图 3-20所示的对话框。切换至图 3-20的 “通用 ”选项,在“启动对象 ”的下拉列表框中,选择该工程默认启动的窗体名,即 “Form02”。 9 【正确答案】 (1)quot=_quot; exp=exp; next=NULL; (2)p!=NULL i+或其等价语句 (3)ActionEvente (4)
39、input.getText() (5)!MyStack.empty()或其等价语句 【试题解析】 这是一道要求读者掌握 Java中 Stack类工具应用的程序设计题。本题的解答思路如下。 堆栈简称为栈,遵循 “后进先出 (LIFO)”原则。 Stack是 Java用来实现栈的工具类,它的主要方法如表 2-16所示。本试题的 Java程序是使用Stack类实现堆栈中弹栈和压栈的操作。对于本试题, Java程 序中使用输入区域 input来接收用户输入的数据,并用pushBtn按钮对应的操作将该数据压入堆栈,使用 popBtn按钮对应的操作将数据从栈顶弹出,所以要随时监听这两个按钮是否有操作。程序
40、中已给出了监听pushBut按钮是否有操作的语句 “pushBut.addActionListener(this);”,同理可得,要随时监听 popBut按钮是否有操作,则 (1)空缺处所填写的弹栈按钮监听语句是“popBtn.addAction Listener(this); ”。 本 Java程序为了显示堆栈中数据排列的情况和数据 弹出的情况,还定义了两个一维数组 DrawStaek 和 PoppedOut 分别记录堆栈中的数据和被弹出的数据。由于程序中己给出 PopCnt是用来 “记录模拟堆栈的数组中被弹 H1的数据个数 ”等注释信息,而 (2)空缺处所在的循环体是用来显示被弹出的数据。
41、因此 (2)空缺处所填写的内容是 “i PopCnt; i+”。 (3)空缺处所填写的内容用于设置监听操作,应填写 “ActionEvent e”。 在使用压栈、弹栈操作时,压入堆栈和弹出堆栈的都是 object对象或是。 object子类的对象,而不是基本数据类型 的数据。通常一个堆栈里可以保存不同类的对象,而本 Java程序堆栈中保存的都是 Integer类的对象。在压栈操作中, (4)空缺处要获取压入栈的数据,因此该空缺处应填入 “input.getText()”。 在弹栈操作中, (5)空缺处用于判断栈是否为空,若不为空,才能进行弹栈操作,因此该空缺处所填写的判断条件是“!MyStack.empty()”。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1