1、软件水平考试(初级)程序员下午(应用技术)模拟试卷 17及答案与解析 1 阅读以下说明和流程图,回答问题 1 2,将解答填入对应的解答栏内。 说明 下面的流程图描述了计算自然数 1到 N(N1)之和的过程。 流程图 问题 1 将流程图中的 (1) (3)处补充完整。问题 2 为使流程图能计算并输出 1*3+2*4+N*(N+2) 的值, A框内应填写 (4);为使流程图能计算并输出不大于 N的全体奇数之和, B框内应填写 (5)。 2 阅读下列函数说明和 C函数,将应填入 (n)处的字句写在对应栏内。 函数 2.1说明 函数 strcpy的功能是将字符串 str2的内容复制到字符申 str1。
2、 函数 2.1 (1) strcpy (char *slr1, const char *str2) char * temp; while( * str2!=0) *cp+ =(2); (3)=0; return str1; 函数 2.2说明 函数 int strcmp(const char *str1, const char *str2)的功能是按字典序比较两个 字符串str1和 str2的大小。当 str1 str2时返回 -1,当 str1 str2时返回 1,否则返回 0。 函数 2.2 int strcmp(const char *str1, const char *str2) whi
3、le( *str1= =* str2) if(* s1= =(4) return 0; s1+; (5); if( *str1 *str2) return -1; return 1; 3 阅读下列函 数说明和 C函数,将应填入 (n)处的字句写在对应栏内。 说明 循环队列的类型定义如下 (其中队列元素的数据类型为 datatype): typedef struct datatype dataMAXSIZE; /*数据的存储区 */ int front,rear; /*队首、队尾指针 */ int num; /*队列中元素的个数 */ c _ SeQueue; /*循环队 */ 下面函数及其功能
4、说明如下: (1) c_SeQueue* Init_SeQueue():新建队列; (2) int ln_SeQueue( c_SeQueue *q, datatype x):将元素 x插入队列 q,若成功返回1否则返回 0; (3) int Out_SeQueue (c_SeQueue *q, datatype *x):取出队列 q队首位置的元素,若成功返回 1否则返回 0。 函数 c_SeQueue* Init_SeQueue() q=malloc(sizeof(c_SeQueue); q- front=q- rear=MAXSIZE-1; (1); return q; int In_Se
5、Queue( c_SeQueue *q, datatype x) if(q- num= =MAXSIZE) return 0; /*队满不能入队 */ else q- rear=(2); q- dataq- rear=x; (3); return 1; /*入队完成 */ int Out_SeQueue( c_SeQueue *q, datatype *x) if (q- num= =0) return 0; /*队空不能出队 */ else *x=(4); /*读出队首元素 */ q- front=(5); q- num- -; return 1; /*出队完成 */ 4 阅读下列函数说明和
6、 C函数,将应填入 (n)处的字句写在对应栏内。 说明 下面程序的功能是将多个文件的内容同 时输出在屏幕上,文件名都作为参数传入,命令执行为: cat file1 file2 file3,即同时输出 file1、 file2、 file3的内容。 程序 #include stdio.h #include stdlib.h void fileeopy(FILE * ifp, FILE *ofp) int c; while(c=getc(1)!=EOF) pute(c,(2); int main(int arge, char *argv) FILE *fp; while(3) 0) if(fp=f
7、open(4),“r“)= =NULL) printf(“Cant open filen“); return 1; else filecopy(fp, stdout); fclose(5); return 0; 5 阅读以下应用说明及 Visual Basic程序代码 ,根据要求回答问题 1至问题 4。 【说明】 某学期成绩管理系统的 “增、删、改数据表中的记录 ”对话框如图 1-19所示。 图 1-19对话框中共定义了 6个标签、 6个文本框、 4个命令按钮和 1个 Data数据控件。其中 Data数据控件是 Visual Basic的标准控件。利用它能方便地创建应用程序与数据库之间的连接,
8、并实现对数据资源的访问。【添加】 (cmdAdd)按钮用于向学生成绩数据表添加一条空记录:【修改】 (cmdEdit)按钮用于修改当前所显示的一条数据记录:命令按钮【删除】 (cmdDelete)用于删除当前显示的 一条数据记录;单击【退出】 (cmdExit)按钮,系统将退出图 1-19所示的对话框。 表 1-13是学生成绩表结构的示例;表 1-14是学生成绩表的示例。 图 1-19将表 1-14数据库中的记录信息显示到相应的文本框中。要在各文本框 (txtStu(i), i=0,1,2,3,4,5)中显示 Data数据控件所连接的数据表中的数据,必须将文本框与 Data数据控件进行绑定。【
9、 Visual Basic程序】 Private Sub Form_Load() For i = 0 To 5 txtStu(i).Locked = True Next iEnd Sub Private Sub cmdAdd Click() cmdEdit.Enabled = Not cmdEdit.Enabled (1) For i = 0 To 5 txtStu(i) .Locked = Not txtStu(i).Locked Next i If cmdAdd. Caption = “添加 “ Then (2) Datal.Caption = “新记录 “ cmdAdd.Caption
10、= “保存 “ cmdExit.Caption = “取消 “ txtStu(0).SetFocus Else Datal.Recordset.Update (3) cmdAdd.Caption = “添加 “ End IfEnd SubPrivate Sub cmdEdit_Click() cmdAdd. Enabled = Not cmdAdd. Enabled cmdDelete. Enabled = Not cmdDelete. Enabled For i = 0 To 5 txtStu(i).Locked = Not txtStu(i).Locked Next i If cmdEdi
11、t.Caption = “修改 “ Then Datal.Recordset.Edit cmdEdit.Caption = “保存 “ cmdExit.Caption = “取消 “Else (4) cmdEdit.Caption = “修改 “ End IfEnd SubPrivate Sub cmdDelete_Click() answer = MsgBox(“确实删除该记录吗 ?“, vbYesNo + vbQuestion, “警告 “) If answer = vbYes Then Datal.Recordset.Delete (5) If Datal.Recordset.EOF T
12、hen (6) End If End IfEnd Sub Private Sub cmdExit_Click() If cmdExit.Caption = “退出 “ Then End Else (7) cmdAdd. Enabled= True cmdEdit.Enabled = True cmdDelete. Enabled= True For i = 0 To 5 txtStu(i).Locked = Not txtStu(i).Locked Next i cmdExit.Caption = “退出 “ cmdAdd.Caption = “添加 “ cmdEdit.Caption = “
13、修改 “ (8) End IfEnd SubPrivate Sub Datal_Reposition() Datal.Caption = “第 “ int deg; public: void setname(charna) strcpy(name,na); char * getname() return name; void setdeg(int d) deg= d; int getdeg()return deg; ; class compute int ns; student naN; public: void getdata(); void sort(); void disp(); ; v
14、oid compute:getdata() int i,tdeg; char tname10; printf(“输入学生人数 :“); scanf(“%d“, printf(“输入学生姓名和成绩 :n“); for(i=0;i ns;i+ +) scanf(“%s%d“,tname, (1); nai.setdeg(tdeg); void compute:sort() int i,j,pick; (2); for(i=0;i ns-1;i+ +) pick=i; for(j=i+1;j ns;j+ +) if(naj.getdeg() napick.getdeg() (3); temp=nai
15、; nai=napick; napick=temp; void compute:disp() int cutoff,i; printf(“RESULTn“); printf(“姓名 成绩 合格否 n“); cutoff=ns*7/10-1; for(i=0;i ns;i+ +) printf(“%-6s%3d“,(4); if(5) printf(“tPASSn“); else printf(“tFAILn“); void main() compute obj; obj.getdata(); obj.sort(); obj.disp(); 10 阅读以下说明和 java代码,将应 填入 (n)
16、处的字句写在对应栏内。 说明 有若干教师,每个教师只有姓名,一个教师可以指导多名研究生;每名研究生有姓名和研究方向,程序最后输出每个教师指导的所有研究生的姓名和研究方向。 Java程序 public class Teacher String name; int top=0; Student student=new Student20; public Teacher() public Teacher(String name) this.name=name; boolean add(Student stu) int len=this.student.length; if (top len-1) t
17、his.studenttop=siu; (1); return true; else return (2); void disp() System.out.println(“指导老师 “”+this.name); System.out.println(“研究生 :”); for(int i=0;i (3);i+) System.out.println(“姓名 :”+this.studenti.name+“t研究方向 :”+this.studenti. search); public static void main(String args) Teacher t=new Teacher(“李明
18、”),new Teacher(“王华 ”); Student s1 = new Student(“孙强 ”, “数据库 ”); Student s2 = new Student(“陈文 ”, “软件工程 ”); Student s3 = new Student(“章锐 ”, “计算机网络 ”); if(! t0.add(s1) System.out.println(“每个老师最多只能指导 20个学生 !”); if(! t0.add(a2) System.out.println(“每个 老师最多只能指导 20个学生 !”); if(! t1.add(s3) System.out.println
19、(“每个老师最多只能指导 20个学生 !”); for(int i=0;i 2;i+) (4); class (5) String name; String search; public Student() public Student(String name,String search) this.name=name; this.search=search; String getName()return this.name; String getSearch()return this.search; 软件水平考试(初级)程序员下午(应用技术)模拟试卷 17答案与解析 1 【正确答案】 (1)
20、 0 (2) S+i (3) i+1 (4) SS+i*(i+2) (5) ii+2 【试题解析】 本题中,变量 i用作循环变量,变量 S则用于存放累加和,起初始值为 0。在计算 1+2+N 时,每循环一次,将 i的值累加到当前的 S中,并且 i自增 1。为计算 1*3+2*4+N*(N+2) 的值,只需将其第 i项的值 i*(i+2)累加到 S中;为计算不大于 N的全体奇数之和,令循环变量的步长为 2即可。 2 【正确答案】 char * (2) * str2+ (3) * cp (4) 0 (5) s2+或 +s2 【试题解析】 (1)根据函数说明, char *是函数 strcpy的返回
21、值类型; (2)while循环是字符串复制的关键,它将 str2的字符一个个复制到 cp; (3)字符复制完成后,应在字符串 cp的末尾添加结束符; (4) (5): while循环的功能是从字符串首开始逐个比较 str1和 str2的每一字符,如果循环一直执行到两字符串末尾,则说明两串相等,应返回 0值。 3 【正确答案】 (1) q- num=0 (2) (q- rear+1) % MAXSIZE (3) q- num+ (4) q- dataq- front (5) (q- front+1)%MAXSIZE 【试题解析】 (1)新建的队列中元素个数应为 0; (2)向循环队列中添 加新元
22、素后,队尾指针应向后移动一位; (3)向循环队列中添加新元素后,队列中元素个数应增 1; (4)取出队首位置的元素; (5)从循环队列中取出一个元素后,队首指针应向后移动一位。 4 【正确答案】 (1) ifp (2) ofp (3) - -argc (4) * +argv (5) fp 【试题解析】 (1) (2):此处 while循环用于复制两个文件中的信息,即从 ifp中读取,向 ofp中写入; (3)此处对多个参数 (文件名 )进行循环,其中 argc代表参数的个数,并且计数时包括了最前 面的可执行文件名,以 cat filel file2 file3为例, argc=4。因此应该填入
23、 - -argc才符合循环的判断条件; (4)此处用于获取文件名并将其打开。字符串数组 argv保存了全体参数的值,以cat filel file2 file3为例, argv0=cat,argv1=file1 ,于是应排除 argv0,即填入* +argv才能正确获取文件名; (5)在对文件操作完毕后应对文件句柄做关闭的动作,此处即调用 fclose函数来关闭已经打开的文件句柄 fp。 5 【正确答案】 (1)H或 cmdDelele.Enabled = Not cmdDelete.Enabled (2)E或 Datal.Recordset.AddNew (3)G或 Datal.Record
24、set.MoveLast (4)B或 Datal.Recordset.Update (5)F中 Datal.Recordset.MoveNext (6)G或 Datal.Recordset.MoveLast (7)D或 Datal.Recordset.CancelUpdate (8)A或 Datal.Refresh (9)C或 DataI.Recordset 【试题解析】 这是一道要求读者掌握用 Data数据控件访问数据库的综合应用题。本题的解答思路如下。 Data数据控件是 Visual Basic的标准控件。利用它能方便地创建应用程序与数据库之间的连接,并实现对数据资源的访问。为了在程序运
25、行时,使 Data数据控件能够访问指定表中的记录信息,应设置该控件的DatabaseName属性和 RecordSource属性。要在图 1-19各文本框中显示 Data控件所连接的数据表中的数据,必须将文本框与 Data数据控件进行绑定。 本程序开始部分,通过 以下语句设置文本框不可编辑,使某条记录成为当前记录后,触发此事件。 For i = 0 TO 5 txtStu(i).Locked = True Next i 在程序运行中,应注意各命令按钮之间的互相制约关系。例如,单击【添加】按钮后,不允许再单击【修改】、【删除】等按钮。因此本案例在【添加】按钮的 Click事件中,用“cmdEdi
26、t.Enabled = Not cmdEdit.Enabled”、“cmdDelete.Enabled=NotcmdDelete.Enabled”等语句分别实现【修改】、【删除】按钮不可用状态的设置。因此 (1)空缺处所选择的语句是选项 H的“cmdDelete.Enabled=Not cmdDelete.Enabled”。 对于添加记录的操作,需单击两次【添加】按钮才能完成。第 1次单击该按钮时,执行 (1)空缺处的语句。而该语句所要完成的功能是将一条空记录添加到记录集的末尾,因此 (2)空缺处所选择的语句是选项 E的 “Datal.Recordset.AddNew”。由语句 “txtStu
27、(i).Locked=Not txtStu(i).Locked”可知,第 1次单击【添加】按钮后,就可以在文 本框(txtStu(i),i=0,1,2,3,4,5)中输入各字段的数值。 第 2次单击【添加】按钮时,执行语句 “Datal.Recordset.Update”,其作用是确认添加操作后,再将新记录添加到数据库中。通常,新添加的记录是数据表中的最后一条记录,因此 (3)空缺处语句所要完成的功能是,将记录指针移到最后一条记录上,即该空缺处所选择的语句是选项 G的 “Datal.Recordset.MoveLast”。 对于修改记录中的语句“Datal.Recordset.Edit”,其作
28、用是调用 Recordset的 Edit方法,使当前记录成为可编辑的状态。在完成修改操作后,还需执行语句 “Datal.Recordset.Update”,以确认所要做的修改操作,即 (4)空缺处所选择的语句是选项 B的“Datal.Recordset.Update”。 对于删除记录的操作,删除当前记录的语句是“Datal.Recordset.Delete”。删除当前记录后应使下一条记录成为当前记录,因此 (5)空缺处所选择的语句是选项 F的 “Datal.Recordset.MoveNext”。 删除当前记录后,如果记录指针指向最后一条记录的后面,则需 要重新将记录指针移动到最后一条记录上,
29、使之成为当前记录。语句 “If Datal.Recordset.EOF Then”用于判断记录指针是否指向最后一条记录的后面。其中, EOF是 Recordset的一个属性,当值为True时,表明记录指针已移到最后一条记录的后面。 (6)空缺处语句所要完成的功能是,使最后一条记录成为当前记录,即该空缺处所选择的语句是选项 G的“Datal.Recordset.MoveLast”。 (7)空缺处语句所要完成的功能是放弃添加的新记录(或对数据的修改 ),选择的语句是选项 D的 “Datal.Recordset.CancelUpdate”。取消所添加的新记录 (或对数据修改 )的操作后,还需要刷新与
30、 Datal相连接的记录集,同时把记录集中的第一条记录设置为当前记录。因此, (8)空缺处所选择的语句是选项 A的 “Datal.Refresh”。 最后 (9)空缺处所选择的语句用于设置当前记录数,即选项 C的 “Datal.Recordset”。在 Datal的 Reposition事件中, Recordset是Datal控件所控制的记录集对象,通过此对象对数据表中的记录进行浏览和操作。访问数据库的记录集可用 Datal.Recordset实现。 另外补充说明一点,对于本试题中,学生成绩表的建立步骤如下。 1)启动数据管理器,选择【外接程序】 【可视化数据管理器】命令。 2)建立数据库,即
31、单击工具栏中的【数据库窗口】按钮。 3)建立数据表结构。在数据库窗口中单击鼠标右键,从弹出的快捷菜单中选择【新建表】命令,打开如图 1-21所示的 “表结构 ”对话框。 “表名称 ”栏输入:学生成绩表。按表 1-13给出的学生成绩表结构定义表中的各个字段。 4)编辑数据表中的数据。在数据库窗口的数据表名处单击鼠标右键,从弹出的快捷菜单中选择【打开】命令。在打开的记录操作对话框按表 1-14所给出的信息添加各个学生的成绩。 6 【正确答案】 (10)D或 bas 【试题解析】 Visual Basic应用程序有 4种类型的文件,包括单独的窗体文件、标准模块文件、类模块文件和工程文件。单独的窗体文
32、件的扩展名为 frm;公用标准模块文件的扩展名为 bas;类模块文件的扩展名为 cls;工程文件的扩展名为vbp。工程文件由若干个窗体和模块组成。 7 【正确答案】 将【退出】按钮的 Caption属性设置为 “退出 (&C)”,将 Cancel属性设置为 “True” 【试题解析】 Visual Basic的任何一个控件,只要它有 Caption属性,就可以为其指定访问热键。对于一般控件 (非菜单项 ),可以在设计阶段通过属性窗口,在Caption属性中加符号 “&”设置访问热键。访问键只能是一个字符,通常用键盘上存在的西文字符作为访问键,否则就没有实际意义。如果用汉字作为菜单项或控件的标题
33、,则通常把访问键放在标题后面的括号中。 若要使图 1-19对话框中的【退出】按钮新增如下的功能:运行时该按钮上显示有 “退出 (C)”字样的信息,按【 Alt+C】组合键或按【 ESC】键都相当于单击该按钮,则需要在开发时,将命令按钮 “退出 ”的 Caption属性设置为 “退出 (&C)”,将Cancel属性由默认的 “False”更改为 “True”。 8 【正确答案】 执行所本试题所给出的 MsgBox语句时,将弹出一个消息框,该消息框的标题为 “数据错 ”;该消息框内的正文为 “清检查修改输入数据 !”;该消息框中有一个错误图标,还有一个【 OK】按钮;如果用户按【 Enter】键,
34、则相当于单击【 OK】按钮 (答案类似即可 ) 【试题解析】 MsgBox语句的语法格式如下。 MsgBox Msg , type%, title , helpfile, context 其中, Msg是在对话框内显示的字符串; type是一个整数值或符号常量,用来控制在对话框内显示的按钮、图标的种类和数量; title是在对话框上显示的标题。 因此,执行所本试题所给出的 MsgBox语句时,将弹出一个消息框,该消息框的标题为 “数据错 ”,该消息框内的正文为 “请检查修改输入数据 !”,该消息框中有一个错误图标,有一个【 OK】按钮,如果用户按【 Enter】键,则相当于单击【 OK】按钮。
35、 9 【正确答案】 (1) nai.setname(tname) (2) student temp (3) pick=j (4) nai.getname(),nai.getdeg() (5) i =cutoff 【试题解析】 本程序定义了两个类 student和 compute,另有三个公共成员函数getdata()、 sort()和 disp(),它们分别用于获取数据、按成绩排序和输出数据。 (1)此处获取扑更新学生对象 nai的姓名属性; (2)sort()函数后半部分使用了 student类型的变量 temp,应该在此处声明; (3)sort()函数的功能是将数组 na按成绩降序排列,这
36、里使用的是简单选择排序算法, pick和 i都是数组下标,且 pick记录了自第 i个位置起最大元素的下标; (4)根据程序输出的示例,此处应依次输出 nai的姓名和成绩,分别需使用getname()和 getdeg()方法获得; (5)cutoff是前百分之七十学生的序号。 10 【正确答案】 (1) top+及其等效形式 (2) false (3) top (4) ti.disp() (5) Student 【试题解析】 (1) (2): add函数是给 Teacher类的 student数组增加一个学生,每个老师最多能指导 20个学生,如果增加成功则返回 true;否则返回 false。 Top是一个表示 student数组里面有多少个学生的标志。每增加一个学生, top就要加1; (3)disp函数是用一个循环来显示老师所指导的所有学生,循环变量从 0开始,上限是 top-1; (4)此处是调用 disp函数来显示所有老师指导的学生。 (5)根据程序大意,这是 Student类的定义。