1、浙江计算机二级 VF-试卷 8 及答案解析(总分:52.00,做题时间:90 分钟)一、程序阅读选择题(总题数:7,分数:48.00)1.程序阅读选择题阅读下列程序说明并回答问题,在每小题提供的若干可选答案中,挑选一个正确答案。_【程序说明】 程序功能是判断一个自然数是否为质数。【程序】SET TALK OFFINPUT“请输入一个大于 1的自然数:” (1)K=0 &K 值为 0 表示所输入的数是质数,为 1 表示不是质数 J=2DO WHILE JN IF MOD(N,J) (2) (3) LOOP ELSE K1 EXIT ENDIFENDDOIF K0 ? (4) +“是质数”ELSE
2、 ? “NO!”ENDIFSET TALK ONRETURN(分数:8.00)A.ON NB.TO NC.GO ND.INTO NA.0B.0C.=0D.0A.J B.J=J1C.J=J+1D.JJ+2A.STR(N)B.VAL(N)C.UPPER(N)D.REPLICATE(N)【程序说明】 程序功能是用两种循环步长值来求 1+2+3+50 的值。【程序一】S0FOR (5) (6)ENDFOR? SRETURN【程序二】S0FOR (7) S=S+NENDFOR (8)RETURN(分数:8.00)A.N=50 TO 1B.N1 TO 50 STEP-1C.N=1 TO 50D.S1 TO
3、 50A.SNB.SS+NC.NS+ND.S1+NA.N=50 TO 1B.N50 TO 1 STEP-1C.N1 TO 50 STEP-1D.N=1 TO 50 STEPA.PRINT SB.WRITE SC.#SD.? S【程序说明】 设有图书表 TSH,包括字段(总编号、分类号、书名、作者、出版单位、单价);读者表DZH(借书证号、姓名、性别、单位、职称、地址);借阅表 JY(借书证号、总编号、借阅日期、备注)。下面程序的功能是打印已借书读者的借书证号、姓名、单位以及借阅图书的书名、单价、借阅日期。【程序】SET TALK OFFSELECT 1USE DZH (9) TO DSHHSE
4、LECT 2USE TSHINDEX ON 总编号 TO SHHSELECT 3USE JYSET RELATION TO 借书证号 INTO A (10)LIST (11) TO PRINTCLOSE ALLSET TALK ONRETURN(分数:6.00)A.INDEX ON 借书证号B.INDEX ON 分类号C.INDEX ON 书名D.INDEX ON 姓名A.SET RELATION OFF AB.SET RELATION OFF BC.SET RELATION TO 总编号 INTO BADDID.SET RELATION TO 总编号 INTO A ADDIA.借书证号,B.
5、姓名,B.单位,A.书名,A.单价,借阅日期B.借书证号,A.姓名,A.单位,B.书名,B.单价,借阅日期C.B.姓名,B.单位,A.书名,A.单价D.A.姓名,A.单位,B.书名,B.单价【程序】SET TALK OFFCLEARSTORE 10 TO ASTORE 20 TO BSET UDFPARMS TO REFERENCEDO SWAP W1TU A,(B)? A,BPROCEDURE SWAPPARAMETERS X1,X2 TEMPX1 X1X2 X2TEMPENDPROCSET TALK ONRETURN(分数:8.00)(1).A 的输出结果为 _。(分数:2.00)A.10
6、B.20C.30D.5(2).B 的输出结果为 _。(分数:2.00)A.10B.20C.30D.5(3).若将“DO SWAP WITH A,(B)”改为“DO SWAP WITH A,B”,则 A,B 的输出结果为 _。(分数:2.00)A.10 20B.20 20C.20 10D.10 10(4).若将“DO SWAP WITH A,(B)”改为“D()SWAP WITH (A),B”,则 A,B 的输出结果为 _。(分数:2.00)A.10 20B.20 20C.20 10D.10 10【程序说明】 如果在命令窗口输入并执行命令“LIST 名称”后在主窗口中显示:记录号 名称 1 电视
7、机 2 计算机 3 电话线 4 电冰箱 5 电 线假定名称字段为字符型、宽度为 6。【程序】GO 2SCAN NEXT 4 FOR LEFT (名称,2)“电” IF RIGHT (名称,2)“线” LOOP ENDIF ? 名称 ENDSCAN(分数:8.00)(1).程序段的输出结果为 _。(分数:2.00)A.电话线B.电冰箱C.电冰箱电线D.电视机电冰箱(2).若将“LOOP”改为“EXIT”,则程序段的输出结果为 _。(分数:2.00)A.电话线B.电线C.电冰箱D.无任何显示(3).若将“LOOP”改为“EXIT”,且“? 名称”放在“ENDSCAN”的下方,则程序段的输出结果为
8、_。(分数:2.00)A.电话线B.电线C.电冰箱D.电视机(4).若将“LOOP”删除,“? 名称”放在 IF ENDIF 语句中,即取代“LOOP”的位置,则程序的输出结果为_ 。(分数:2.00)A.电话线B.电线C.电话线电线D.无任何显示【程序说明】 使用如下表的数据: (分数:10.00)(1).SQL 语句 SELECT 部门号,MAX(单价*数量)FROM 商品表 GROUP BY 部门号 查询结果有几条记录?(分数:2.00)A.1B.4C.3D.10(2).SQL 语句 SELECT 产地,COUNT(*)提供的商品种类数; FROM 商品表; WHERE 单价200; G
9、ROUP BY 产地 HAVING COUNT(*)2; ORDER BY 2 DESC 查询结果的第一条记录的产地和提供的商品种类数为 _。(分数:2.00)A.北京,1B.上海,2C.广东,5D.广东,7(3).SQL 语句 SELECT 部门表.部门号,部门名称,SUM(单价*数量), FROM 部门表,商品表; WHERE 部门表,部门号商品表.部门号; GROUP BY 部门表. 部门号 查询结果为 _。(分数:2.00)A.各部门商品数量合计B.各部门商品金额合计C.所有商品金额合计D.各部门商品金额平均值(4).SQL 语句 SELECT 部门表.部门号,部门名称,商品号,商品名
10、称,单价; FROM 部门表,商品表; WHERE 部门表.部门号商品表.部门号; ORDER BY 部门表.部门号 DESC,单价 查询结果的第一条记录的商品号为 _。(分数:2.00)A.101B.202C.110D.112(5).SQL 语句 SELECT 部门名称 FROM 部门表 WHERE 部门号 IN (SELECT 部门号, FROM 商品表 WHERE 单价 BETWEEN 420 AND 1000) 查询结果为(分数:2.00)A.家用电器部、电话手机部B.家用电器部、计算机部C.电话手机部、电视机摄像机部D.家电电器部、电视机摄像机部二、编写程序题(总题数:2,分数:4.
11、00)2.编写一个用户自定义函数 SGN(),当自变量为正数时,返回 1;当自变量为负数时,返回 -1;当自变量为零时,返回 0。(分数:2.00)_3.设计一个简单的表单(如下图所示)。其中 3 个控件分别是:标签 Label1、命令按钮 Com mand1、复选框Check1。为 Command 1 编写 Click 事件,当单击该命令按钮时释放该表单;为 Check 1 编写 Interactive Change 事件,当选中该复选框时在 Label1 上显示“身体健康!”字样,否则在 Label1 上不显示任何信息,其中,Command1. Caption“关闭”,Check1. Ca
12、ption=“合格”。 (分数:2.00)_浙江计算机二级 VF-试卷 8 答案解析(总分:52.00,做题时间:90 分钟)一、程序阅读选择题(总题数:7,分数:48.00)1.程序阅读选择题阅读下列程序说明并回答问题,在每小题提供的若干可选答案中,挑选一个正确答案。_解析:【程序说明】 程序功能是判断一个自然数是否为质数。【程序】SET TALK OFFINPUT“请输入一个大于 1的自然数:” (1)K=0 &K 值为 0 表示所输入的数是质数,为 1 表示不是质数 J=2DO WHILE JN IF MOD(N,J) (2) (3) LOOP ELSE K1 EXIT ENDIFEND
13、DOIF K0 ? (4) +“是质数”ELSE ? “NO!”ENDIFSET TALK ONRETURN(分数:8.00)A.ON NB.TO N C.GO ND.INTO N解析:解析:INPUT 命令格式:INPUT字符表达式TO内存变量。A.0B.0C.=0D.0 解析:解析:质数只能被 1 和本身整除的数。所以质数不能被除 1 或本身的数整除,即本题取模后值不为0。A.J B.J=J1C.J=J+1 D.JJ+2解析:解析:变量 J 依次指向 2 到 N-1 之间的整数,所以需向后移动 J 的值,即 JJ+1。A.STR(N) B.VAL(N)C.UPPER(N)D.REPLICA
14、TE(N)解析:解析:STR()是数值型转换成字符型函数,VAL()是字符串转换成数值型函数,UPPER()是字母小写转换成大写函数,REPLICATE()是字符重复函数。【程序说明】 程序功能是用两种循环步长值来求 1+2+3+50 的值。【程序一】S0FOR (5) (6)ENDFOR? SRETURN【程序二】S0FOR (7) S=S+NENDFOR (8)RETURN(分数:8.00)A.N=50 TO 1B.N1 TO 50 STEP-1C.N=1 TO 50 D.S1 TO 50解析:解析:FOR ENDFOR 格式 1: FOR 循环变量=初值 TO 终值STEP 步长 语句序
15、列 EXIT LOOP ENDFOR/NEXT 功能:当循环变量的值不大于终值时,执行循环操作。每循环一次,循环变量的值自动递增一个步长值。 循环变量为任意一个内存变量,不需要事先定义。 初值、终值、步长均为一个数值表达式,其值可为正或负或小数。 若不选STEP 步长选项,递增步长为 1。 LOOP选项实现循环短路操作,EXIT选项实现结束当前循环操作。 格式 2: FOREACH变量IN数组变量/集合 语句系列 EXIT LOOP ENDFOR/NEXT变量 功能:对数组变量或集合中的每个元素执行循环操作。A.SNB.SS+N C.NS+ND.S1+N解析:解析:本语句的功能是求 1+2+3
16、+ +50 的值。A.N=50 TO 1B.N50 TO 1 STEP-1 C.N1 TO 50 STEP-1D.N=1 TO 50 STEP解析:解析:FOR ENDFOR 循环中,当循环变量初值大于终值时,STEP 步长为负值。本题是 150 的自然数依次相加,所以步长为-1。A.PRINT SB.WRITE SC.#SD.? S 解析:解析:语句的功能是显示 1+2+3+ +50 的结果,在 Visual FoxPro 中,换行输出语句的命令用?。同行输出语句用?。【程序说明】 设有图书表 TSH,包括字段(总编号、分类号、书名、作者、出版单位、单价);读者表DZH(借书证号、姓名、性别
17、、单位、职称、地址);借阅表 JY(借书证号、总编号、借阅日期、备注)。下面程序的功能是打印已借书读者的借书证号、姓名、单位以及借阅图书的书名、单价、借阅日期。【程序】SET TALK OFFSELECT 1USE DZH (9) TO DSHHSELECT 2USE TSHINDEX ON 总编号 TO SHHSELECT 3USE JYSET RELATION TO 借书证号 INTO A (10)LIST (11) TO PRINTCLOSE ALLSET TALK ONRETURN(分数:6.00)A.INDEX ON 借书证号 B.INDEX ON 分类号C.INDEX ON 书名D
18、.INDEX ON 姓名解析:解析:读者表 DZH 的主键是借书证号字段,为了提高查找速度,需建立索引,读者表 DZH 的借书证号应为主索引。A.SET RELATION OFF AB.SET RELATION OFF BC.SET RELATION TO 总编号 INTO BADDI D.SET RELATION TO 总编号 INTO A ADDI解析:解析:三表之间通过总编号和借书证号建立联系。因程序中已通过借书证号建立了表 DZH 和 JY 的联系。还需通过关键字总编号建立表 TSH 和 JY 的联系。 建立关联的格式: SET RELATION TO关系表达式 1INTO工作区/表别
19、名 1, 关系表达式 2INTO工作区 2/表别名 2 IN工作区/表别名ADDITIVE 删除关联的格式: SET RELATION OFF INTO工作区/表别名A.借书证号,B.姓名,B.单位,A.书名,A.单价,借阅日期B.借书证号,A.姓名,A.单位,B.书名,B.单价,借阅日期 C.B.姓名,B.单位,A.书名,A.单价D.A.姓名,A.单位,B.书名,B.单价解析:解析:此空所属语句的功能是打印已借书读者的借书证号、姓名、单位以及借阅图书的书名、单价、借阅日期书名和单价是图书表 TSH 中的字段,姓名和单位是读者表 DZH 中的字段,所以选项 B 正确。【程序】SET TALK
20、OFFCLEARSTORE 10 TO ASTORE 20 TO BSET UDFPARMS TO REFERENCEDO SWAP W1TU A,(B)? A,BPROCEDURE SWAPPARAMETERS X1,X2 TEMPX1 X1X2 X2TEMPENDPROCSET TALK ONRETURN(分数:8.00)(1).A 的输出结果为 _。(分数:2.00)A.10B.20 C.30D.5解析:(2).B 的输出结果为 _。(分数:2.00)A.10B.20 C.30D.5解析:解析:命令 SET UDFPARAMS TO REFERENCE 用来设置参数传递方式为按引用传递。
21、也就是说,当形参变量值改变时,实参变量也是随之改变。但是由于本题采用的调用方式是:DO WITH,所以调用方式不受参数 UDFPARAMS 的影响。调用过程中变量 A 是按引用传递,变量 B 用括号括起来,因此 B 始终是按值传递。模块 SWAP 的功能是将两个变量交换。程序开始时变量 A 和 B 的值分别为 10 和 20,执行模块 SWAP 之后将 A 和 B 交换,由于变量 A 是按引用传递,因此交换后变量 A 指向 B 的地址,因此返回主程序后 A 的值为 20,变量 B 为按值传递,模块结束后,其值仍为 20,因此返回主程序后,变量 A 和 B 指向同一个地址,其值均为 20。(3)
22、.若将“DO SWAP WITH A,(B)”改为“DO SWAP WITH A,B”,则 A,B 的输出结果为 _。(分数:2.00)A.10 20B.20 20C.20 10 D.10 10解析:解析:变量 A、B 都是按引用传递,因此,交换后变量 A 指向 B 的地址,B 指向 A 的地址,所以返回主程序后,A、B 值分别为 20、10。(4).若将“DO SWAP WITH A,(B)”改为“D()SWAP WITH (A),B”,则 A,B 的输出结果为 _。(分数:2.00)A.10 20B.20 20C.20 10D.10 10 解析:解析:变量 A 是按值传递,模块结束后,其值
23、仍为 10。B 是按引用传递,交换后变量 B 指向 A 的地址。所以返回主程序后,A 值为 10,B 值也为 10。【程序说明】 如果在命令窗口输入并执行命令“LIST 名称”后在主窗口中显示:记录号 名称 1 电视机 2 计算机 3 电话线 4 电冰箱 5 电 线假定名称字段为字符型、宽度为 6。【程序】GO 2SCAN NEXT 4 FOR LEFT (名称,2)“电” IF RIGHT (名称,2)“线” LOOP ENDIF ? 名称 ENDSCAN(分数:8.00)(1).程序段的输出结果为 _。(分数:2.00)A.电话线B.电冰箱C.电冰箱电线 D.电视机电冰箱解析:解析:本程序
24、考查对 SCAN 语句的掌握和理解。GO 2 是指指针移动到第二条记录,SCAN 语句接下来扫描下面的四条记录,根据 SCAN 语句的循环条件 LEFT(名称,2)“电”可知,只要是名称字段中第一个字是“电”就执行循环语句;在 SCAN 循环语句内部 IF RIGHT (名称,2)=“线” LOOP ENDIF 表示如果记录的最后一个字是“线”就跳到循环的开始。也就是说程序从第二条记录开始查找第一个字是“电”并且最后一个字不是“线”的记录来显示,符合显示条件的只有“电冰箱”和“电线”两条记录;这道题容易出错的是误以为“电线”最后一个字是“线”,因为字段宽度是 6,所以从右边开始两个字节是空格。
25、(2).若将“LOOP”改为“EXIT”,则程序段的输出结果为 _。(分数:2.00)A.电话线B.电线C.电冰箱D.无任何显示 解析:解析:当扫描第三条记录时,进入 IF 语句后,碰到 EXIT 就直接结束 SCAN ENDSCAN 循环,不执行“?名称”语句,所以结果无任何显示。(3).若将“LOOP”改为“EXIT”,且“? 名称”放在“ENDSCAN”的下方,则程序段的输出结果为 _。(分数:2.00)A.电话线 B.电线C.电冰箱D.电视机解析:解析:本题与第(17)题的不同之处,在于“?名称”语句的位置不同,当扫描到第三条记录时,结束 SCAN ENDSCAN 循环后,还要执行“?
26、 名称”语句,所以结果显示电话线。(4).若将“LOOP”删除,“? 名称”放在 IF ENDIF 语句中,即取代“LOOP”的位置,则程序的输出结果为_ 。(分数:2.00)A.电话线B.电线C.电话线电线 D.无任何显示解析:解析:经分析第三条记录和第五条记录满足条件,所以显示结果是电话线电线。【程序说明】 使用如下表的数据: (分数:10.00)(1).SQL 语句 SELECT 部门号,MAX(单价*数量)FROM 商品表 GROUP BY 部门号 查询结果有几条记录?(分数:2.00)A.1B.4C.3 D.10解析:解析:本小题中 SQL 语句的功能是:在商品表中按部门号进行分组,
27、分组后从每个组中查询出单价和数量乘积最大的记录,从原始表中可以看出,表中有 3 个部门号,所以该 SQL 执行后应该有 3 条记录。(2).SQL 语句 SELECT 产地,COUNT(*)提供的商品种类数; FROM 商品表; WHERE 单价200; GROUP BY 产地 HAVING COUNT(*)2; ORDER BY 2 DESC 查询结果的第一条记录的产地和提供的商品种类数为 _。(分数:2.00)A.北京,1B.上海,2C.广东,5 D.广东,7解析:解析:本小题中所写出的 SQL 语句的功能是:在商品表中查询那些提供的商品单价大于 200 元,并且提供两种以上商品的产地,并
28、按照提供的商品种类数降序排列,从原始数据表中可以计算出,满足条件的记录为产地为广东,商品种类个数为 5。(3).SQL 语句 SELECT 部门表.部门号,部门名称,SUM(单价*数量), FROM 部门表,商品表; WHERE 部门表,部门号商品表.部门号; GROUP BY 部门表. 部门号 查询结果为 _。(分数:2.00)A.各部门商品数量合计B.各部门商品金额合计 C.所有商品金额合计D.各部门商品金额平均值解析:解析:该语句利用 SUM()函数在商品表中查询各部门商品的金额合计,该题涉及多表查询,其执行过程是,从部门表中选取部门号和部门名称以及单价和数量字段,乘积后求和,查询出的记
29、录同时要满足部门号字段和商品表中的部门号相等。GROUP BY 后的分组字段是部门号,因此它计算的是,各个部门商品金额的合计。(4).SQL 语句 SELECT 部门表.部门号,部门名称,商品号,商品名称,单价; FROM 部门表,商品表; WHERE 部门表.部门号商品表.部门号; ORDER BY 部门表.部门号 DESC,单价 查询结果的第一条记录的商品号为 _。(分数:2.00)A.101 B.202C.110D.112解析:解析:该 SELECT 语句的功能是在部门表和商品表两个表中查询,利用 SUM()函数在商品表中查询各部门商品金额合计,并将结果按照部门表中的部门号降序排列,单价
30、字段作为排序的次关键字。因此,所选出记录的商品号应该是 0101。(5).SQL 语句 SELECT 部门名称 FROM 部门表 WHERE 部门号 IN (SELECT 部门号, FROM 商品表 WHERE 单价 BETWEEN 420 AND 1000) 查询结果为(分数:2.00)A.家用电器部、电话手机部 B.家用电器部、计算机部C.电话手机部、电视机摄像机部D.家电电器部、电视机摄像机部解析:解析:该语句的执行过程是,首先在内层查询中查找哪个部门的商品单价在 420 元和 1000 元之间,并检索出部门号,然后,在外层查询在部门表中,查找出与之对应的部门名称。二、编写程序题(总题数
31、:2,分数:4.00)2.编写一个用户自定义函数 SGN(),当自变量为正数时,返回 1;当自变量为负数时,返回 -1;当自变量为零时,返回 0。(分数:2.00)_正确答案:(正确答案:程序代码如下: FUNCTION SGN PARAMETERS x DO CASE CASE x0 y=1 CASE x0 y0 OTHERWISE y-1 ENDCASE RETURN y)解析:3.设计一个简单的表单(如下图所示)。其中 3 个控件分别是:标签 Label1、命令按钮 Com mand1、复选框Check1。为 Command 1 编写 Click 事件,当单击该命令按钮时释放该表单;为
32、Check 1 编写 Interactive Change 事件,当选中该复选框时在 Label1 上显示“身体健康!”字样,否则在 Label1 上不显示任何信息,其中,Command1. Caption“关闭”,Check1. Caption=“合格”。 (分数:2.00)_正确答案:(正确答案:编写 Command1 的 Click 事件代码如下: ThisForm. Release 编写 Check1 的InteractiveChange 事件代码如下: IF This. Value1 ThisForm. Label1Caption“身体健康!” ELSE ThisForm. Label1,Caption“” ENDIF)解析:解析:InteractiveChange 是一个当用户使用键盘或鼠标更改控制的值时发生的事件。当复选框处于选中状态时,其 Value 值为 1,否则为 0。