1、软件水平考试(初级)程序员下午(应用技术)模拟试卷 8及答案与解析 1 阅读下列算法说明和算法,将应填入 (n)处的字句写在答卷的对应栏内。 【算法说明】 某英汉词典文件包含 N个记录 (N 1),每个记录有两个字段:一个是英文单词,另一个是相应的汉语解释。各个记录按英文单词的词典顺序排列,各英文单词并不重复。 本算法用于维护、更新该英汉词典文件。维护、更新的方法是:首先输入一个英文单词及其汉语解释,然后在该词典中查找输入的英文单词,若找到,则用输入的汉语解释更新原有的解释;若找不到,则需要将输入的 英文单词及其汉语解释插入到该词典的适当位置,使各记录仍按英文单词的词典顺序排列。 【算法】 第
2、一步 读入英汉词典文件,并将读入的 N个英文单词依次存放在字符串数组ENG中,将相应的汉语解释依次存放在字符串数组 CN中。数组元素 CN(i)给出了数组元素 ENG(i)的解释。 第二步 输入英文单词及其汉语解释,将它们分别存放在字符串变量 E和 C中。若 E为空串或都是空格,则转向第四步。 第三步 根据变量 E的值,用二分法在数组 ENG中查找。具体步骤如下: 1 1L , NH 2 INT(L+H)/2)K 3若 E=ENG(K),则 CCN(K) ,转向第二步 若 E ENG(K),则 K-1(1) ;若 E ENG(K),则 K+1(2) 4若 H L则 对 I=N, L, -1(始
3、值,终值,增量 )循环执行: ENG(I)ENG(I+1) CN(I)CN(I+1) 然后,将 E和 C分别存入 (3)和 (4), N+1N 最后转向第二步 否则,转向 (5) 第四步 将数组 ENG和 CN输出,形成新的英汉词典文件,算法结束。 2 阅读以 下函数说明和 C语言函数,将应填入 (n)处的字句填写在对应栏内。 函数 2.1说明 函数 fun1 (int m, int k, int xx )的功能是:将大于整数 m且紧靠 m的 k个素数存入数组 xx中传回。例如:若输入 17, 5,则应输出: 19, 23, 29, 31, 37。 函数 2.1 fun1 (int m, in
4、t k, int xx ) inti, j, s=0; for ( i=m+1; k 0; i+ ) for (j=2; j i; j+ ) if ( i %j=0 ) (1) if( i=j ) (2) k-; 函数 2.2说明 函数 void fun 2 ()的功能是:打印出杨辉三角形 (要求打印出 10行 )。 函数 2.2 void fun2 ( ) int i, j; int a1010; printf (“n“ ); for (i=0; i 10; i+ a i 0=1; (3) for (i=2; i l0; i+ ) for (j=1; j i; j+) (4) for (i=
5、0; i 10; i+ ) for (j=0; j =i; j+ ) (5) printf ( “n“ ); 3 阅读以下说明和 C语言函数,将应填入 (n)处 的字句写在答题纸的对应栏内。 说明 求树的宽度,所谓宽度是指在二叉树的各层上,具有结点数最多的那一层的结点总数。本算法是按层次遍历二叉树,采用一个队列 q,让根结点入队列,若有左右子树,则左右子树根结点入队列,如此反复,直到队列为空。 函数 int Width ( BinTree *T int front=-1, rear=-1; /*队列初始化 */ int flag=0, count=0, p; /*p用于指向树中层的最右边的结点
6、 , flag 记录 层中结点数的最大值 */ if ( T!=Null) rear+; (1); flag=1; p=rear; while (2) front+; T=q front; if (T-lchild!=Null ) roar+-+; (3); count+; if ( T- rchild!=Null ) rear+; qrear=T- rchild; (4); if (front=p ) / 当前层已遍历完毕 if(5) flag=count; count=0; p=rear, /p 指向下一层最右边的结点 return ( flag ); 4 阅读以下说明和 C语言函数,将应
7、填入 (n)处的字句写在对应栏内。 说明 某班有 n个同学,学号分别为 1, 2, , n。为了每天指派若干个同学值日,他们放弃传统单调的轮留 值日,别出心裁采用 “定和值日 ”法:每天所指派值日同学的学号之和须等于其班号 m(n m n(n+1)/2)并且规定:不允许任何两天值日的同学完全一样。 编程使 n个同学按定和 m值日 (正整数 n、 m均从键盘输入,约定 n 50, m100),求出可持续的值日天数 f(n, m)。运行程序,具体求出 f(19, 98)的值。 函数 main ( ) int b, p, i , m, n, k; static int a51101: long s=
8、0; printf (“ 请输入学生人数 ;“); scanf ( “%d“, printf (“ 请输入定和值 : “); scanf ( “%d“, a10=1; a11=1; /* 数组元素赋初值 */ for (1); j =n; j+) for (i=j;(2); i+) /* 计算 a (2, m), a(n, m)*/ (3); b=0, for ( k=1 k j-1; k+ (4); aji=b; (5); /* 求和 s 为所求结果 */ printf (“ “); printf ( “f ( %d, %d ) =%1dn“, n, m, s ); 5 阅读以下说明和 Vi
9、sual Basic代码,将应填入 (n)处的字句写在对应栏内。【说明】 在一些应用场合中,需要对用户的输入数据进行检查监控。以下 VisualBasic程序实现了对新添加到 List列表的内容进行监控,拒绝向 List列表添加重复信息。例如,在 List列表中存在元素 “a01001; a01002”,如果用户输入数据为“a01001”或 “a01002”,系统则弹出提示信息,拒绝将新数据加入 List列表;如果用户输入的数据不同于 List列表中的任何一个元素,则作为新元素加入 List中。VisualBasic界面显示如图所示。根据程序功能说明,完成程序代码。 【代码 5-1】 Begi
10、n VB.Form Forml Caption = “List 列表拒绝添加重复信息 “ /.窗体描述 (略 ) Begin VB.CommandButton Command2 Caption = “退出 “ /.窗体描述 (略 ) End Begin VB.CommandButton Commandl Caption = “添加 “ /.窗体描述 (略 ) End Begin VB.TextBox Text1 /.窗体描述 (略 ) End Begin VB.ListBox List1 Height = 1860 ItemData = “Form1.fix“: 0000 Left = 102
11、0 List = “Form1.fix“: 0002 TabIndex = 0 Top = 525 Width = 2580 End Begin VB.Labe1 Labe11 BackStyle = 0 Transparent Caption = “请输入编号 “ /.窗体描述 (略 ) End End 【代码 5-2】 Attribute VB Name = “Form1“ Attribute VB_GlobalNameSpace = False Attribute VB Creatable = False Attribute VB PredeclaredId = True Attribu
12、te VB_Exposed = False Private Sub Form Load () List1.AddItem “a01001“ List1.AddItem “a01002“ End Sub Private Sub Cormnand1 Click () Dim Myval As Long For i=0 To (1) (2) If (3) Then MsgBox “系统不允许重复输 入,请重新输入 “ Exit Sub End If (4) (5) End Sub 6 阅读以下说明和 Visual Basic代码,将应填入 (n)处的字句写在对应栏内。 【说明】 以下代码实现了当用户
13、退出界面时,判断 TextEdit中的文字是否发生改变,弹出对话框判断,让用户选择是否保存文件或取消退出界面操作。阅读下面的代码,将其补充完整。 【代码 7-1】 Begin VB.Form Forml /.窗体描述 (略 ) Begin VB.TextBox TextEdit Height = 1830 Left = 180 Tablndex = 0 Text = “TextEdit“ Top = 360 Width = 3885 End /.窗体描述 (略 ) End 【代码 7-2】 Dim txtchange As Boolean Dim myval As String Private
14、 Sub Form Load () TextEdit.Text: “CIU, 中国软考联盟 !“ txtchange = False End Sub 【代码 7-3】 Private Sub TextEdit_Change () Static notchange As Boolean (1) notchange = Tree End Sub Private Sub Form_Unload ( Cancel As Integer ) Dim myval As String If (2) Then myval = MsgBox ( “保存文件的更改吗 ?“, vbYesNoCancel, “提示信
15、息 “ ) If (3) Then MsgBox “保存成功 “ End End If If (4) Then End If (5) Then Cancel = 1 End If End Sub 7 阅读以下说明和 C+程序,将应填 (n)处的字句写在对应栏内。 说明 设计一程序,输入 10个整数到一个数组中,调整这 10个数在数组中的位置,使得其中最小的一个数成为数组的首元素,最大的一个数成为数组的末元素。 C+程序 #include iostream.h #define SIZE 10 void main ( ) int data SIZE; int m; cout “请输入 “ SIZE
16、 “个整数 :“; for ( m=0;m SIZE; m+ ) (1); int j=0,k=0; for ( int i=1;i SIZE; i+ ) if (2) j=i; else if ( datai datak ) (3); if (j 0 ) int d=data0; (4); datak=d; if ( k SIZE-1 ) int d=data SIZE- 1 ; dataSIZE- 1 =dataj; (5); cout end1 “ 排序后 : “; for ( m=0;m SIZE; m+ ) cout datam “ “ ; 8 阅读以下说明和 Java代码,将应填入
17、 (n)处的字句写在对应栏内【说明】 编写字符界面的 Application程序,接收依次输入的 10个整型数据,每个数据一行,将这些数据按升序排序后从系统的标准输出设备输出。 【 Java代码】 import java.iO.*; import java.util.* ; public class compositor public static void main ( String args ) final int NUMBER=10; Vector dataVector=new Vector (); try BufferedReader br=new BufferedReader ( (
18、1) InputStreamReader ( System.in ); System.out.println (“请输入 “+NUMBER+“个整数 “); for (int i=0; i NUMBER; i+ ) int temp=Integer.parselnt ( br.(2); int low=0, high=i-1, mid=0; while (3) System.out.println ( low+“,“+mid+“,“+high ); (4); if ( Integer ) dataVectOr.get( mid ) .intValue () =temp ) data Vecto
19、r.insertElementAt ( new Integer ( temp ), mid ); break; else if ( Integer ) dataVector.get ( mid ) .intValue ( ) temp ) high=mid-1; else (5); if ( low high ) dataVector, insertElementAt ( new Integer ( temp ), iow ); /输出 System.out.println ( “n升序的排序结果为 ; “); for (int i=0; i NUMBER; i+ ) System.out.p
20、rint ( dataVector.get( i ) .toString () +“t“ ); catch ( NumberFormatException nfe) System.out.println ( nfe.toString (); System.out.println ( “整数格式输入错误。 “); catch ( IOException ioe ) System.out.println ( ioe.toString (); 软件水平考试(初级)程序员下午(应用技术) 模拟试卷 8答案与解析 1 【正确答案】 (1)H (2)L (3)ENG(L)或等价表达式 (4)CN(L)或等
21、价表达式 (5)(2) 【试题解析】 H, L分别是二分法查找的上界和下界,所以 (1)和 (2)应分别填入H, L。 (3)和 (4)处是将 L之后的元素依次后移以后,将 E和 C分别存入 L处,所以 (3)和 (4)处应分别填入 ENG(L)和 CN(L)或其他等价表达式,比如 ENG(H+1)。 (5)处是 H L,这说明查找表未空,需要转向 (2)继续查找。 2 【正确答案】 (1)break; (2) xx s+=i; (3)aii =1; (4) aij=ai-1 j-1)+ai-1j; (5) printf (“%5d“, ai j); 3 【正确答案】 (1) q rear=T
22、 (2) front p (3) q rear=T- lchild (4) count+ (5) flag count 4 【正确答案】 (1)j=2 (2) i =m (3) p=i-j (4) b+= akp (5) s+=ajm 5 【正确答案】 为所有的列表个数; (2)、 (3)实现了 List列表的内容进行监控,避免重复; (4)为循环控制变量 i更新; (5)Lis列表的内容进行监控时数据合格,没有重复,接受。 (1)List1.ListCount-1 (2) List1.ListIndex = i (3) List1.Text = Text1.Text Then (4) Nex
23、t i (5) List1.Addltem Text1.Text 6 【正确答案】 (1)完成了状态初 始化。 (2)文字发生了改动, txtchange=True,向用户发出提示信息,弹出对话框。 (3)、 (4)、 (5)根据对话框的返回值做出相应的反应。 (1) txtchange = notchange (2) txtchange = True (3) myval = vbYes (4) myval = vbNo (5) myval = vbCancel 7 【正确答案】 (1)n data m (2) datai dataj (3) k=i (4) data0=datak (5) dataj=d 8 【正确答案】 (1)new (2) readLine() (3) low =high (4) mid= (low+high )/2 (5) low=mid+1
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1