1、浙江二级 VISUAL+FOXPRO-试题 11及答案解析(总分:100.00,做题时间:90 分钟)一、试题 1(总题数:1,分数:12.00)程序说明 从键盘输入 10个数,然后找出其中的最大值与最小值,最大值存放在变量 MAX中,最小值存放在变量 MIN中。 程序 SET TALK OFF INPUT TO X MAX=X MIN=X I=1 DO WHILE _ INPUT TO X IF _ MAX=X ENDIF IF _ MIN=X ENDIF _ ENDDO ? MAX, MIN SET TALK ON RETURN(分数:12.00)A.I=1B.I=11C.I=10D.I1
2、0A.XMAXB.XMAXC.XMAXD.X=MAXA.X=MINB.XMINC.XMIND.XMINA.I=XB.I=I+1C.I=I-1D.I=MIN二、试题 2(总题数:1,分数:9.00)程序说明 程序功能是输入 50个学生某门课程的成绩,并求出平均值。 程序 SETTALK OFF DIMENSION A (50) sum=0 FOR i=1 TO 50 INPUT TO A(i) _ END FOR _ ?“平均成绩为:“, _ SET TALK ON RETURN(分数:9.00)A.sum=A(i)B.sum=sum+A(i)C.sum=sum+iD.sum=iA.Aver=s
3、um%50B.Aver=sum MOD 50C.Aver=sum/50D.Aver=sum*50A.sumBiC.A(i)D.Aver三、试题 3(总题数:1,分数:15.00)程序说明 本大题使用的数据表如下: “歌手”表 歌手号 姓名 1001 王容 2001 徐巍 3001 周杰 4001 林俊伦 “评分”表 歌手号 分数 评委号 1001 9.8 101 1001 9.6 102 1001 9.7 103 1001 9.8 104 (分数:15.00)(1).为“歌手”表增加一个字段“最后得分”的 SQL语句是_。(分数:3.00)A.ALTER TABLE歌手 ADD最后得分 F(6
4、,2)B.ALTER DBF歌手 ADD最后得分 F6,2C.CHANGE TABLE歌手 ADD最后得分 F(6,2)D.CHANGE TABLE学院 INSERT最后得分 F6,2(2).插入一条记录到“评分”表中,歌手号、分数和评委号分别是“1001”、9.9 和“105”,正确的 SQL语句是_。(分数:3.00)A.INSERT VALUES(“1001“,9.9,“105“)INTO评分(歌手号,分数,评委号)B.INSERT TO评分(歌手号,分数,评委号)VALUES(“1001“,9.9,“105“)C.INSERT INTO评分(歌手号,分数,评委号)VALUES(“100
5、1“,9.9,“105“)D.INSERT VALUES(“1001“,9.9,“105“)TO评分(歌手号,分数,评委号)(3).假设每个歌手的“最后得分”的计算方法是:去掉一个最高分和一个最低分,取剩下分数的平均分。根据“评分”表求每个歌手的“最后得分”并存储于表 TEMP中,表 TEMP中有两个字段:“歌手号”和“最后得分”,并且按最后得分降序顺序,生成表 TEMP的 SQL语句是:_。(分数:3.00)A.SELECT歌手号,(COUNT(分数)-MAX(分数)-MIN(分数)/(SUM(*)-2)最后得分;FROM 评分 INTO DBF TEMP GROUP BY歌手号 ORDER
6、 BY最后得分 DESCB.SELECT歌手号,(COUNT(分数)-MAX(分数)-MIN(分数)/(SUM(*)-2)最后得分;FROM 评分 INTO DBF TEMP GROUP BY评委号 ORDER BY最后得分 DESCC.SELECT歌手号,(SUM(分数)-MAX(分数)-MIN(分数)/(COUNT(*)-2)最后得分;FROM 评分 INTO DBF TEMP GROUP BY评委号 ORDER BY最后得分 DESCD.SELECT歌手号,(SUM(分数)-MAX(分数)-MIN(分数)/(COUNT(*)-2)最后得分;FROM 评分 INTO DBF TEMP GR
7、OUP BY歌手号 ORDER BY最后得分 DESC(4).与“SEI*ECT*FROM 歌手 WHERE NOT(最后得分9.00 OR 最后得分8.00)”等价的语句是_。(分数:3.00)A.SELECT*FROM歌手 WHERE最后得分 BETWEEN 9.00 AND 8.00B.SELECT*FROM歌手 WHERE最后得分=8.00 AND 最后得分=9.00C.SELECT*FROM歌手 WHERE最后得分9.00 OR 最后得分8.00D.SELECT*FROM歌手 WHERE最后得分=8.00 AND 最后得分=9.00(5).为“评分”表的“分数”字段添加有效性规则:“
8、分数必须大于等于 0并且小于等于 10”,正确的SQL语句是_。(分数:3.00)A.CHANGE TABLE评分 ALTER分数 SET CHECK分数=0 AND 分数=10B.ALTER TABLE评分 ALTER分数 SET CHECK分数=0 AND 分数=10C.ALTER TABLE评分 ALTER分数 CHECK分数=0 AND 分数=10D.CHANGE TABLE评分 ALTER分数 SET CHECK分数=0 OR 分数=10四、试题 4(总题数:1,分数:12.00)程序说明 本题用到的索引文件如下: 记录号 学号 姓名 性别 出生年月 简历 奖学金 照片 5 9510
9、13 陈玉红 .F. 08/03/71 memo 0.00 gen 6 953002 朱 伟 .T. 04/04/70 memo 25.00 gen 7 954001 于 霞 .F. 01/05/72 memo 25.00 gen 4 953013 罗 浩 .T. 09/09/71 memo 50.00 gen 1 954006 张小强 .T. 07/21/70 memo 75.00 gen 2 953008 赵 峰 .T. 11/05/72 memo 75.00 gen 9 951019 陈 红 .F. 09/14/75 memo 75.00 gen 8 951001 王 平 .F. 09/
10、09/70 memo 150.00 gen 3 954011 陈健红 .F. 09/21/10 memo 250.00 gen 程序 SET TALK OFF CLEAR USE学生 INDEX奖学金 LIST GO TOP ? RECNO() &第一个显示 SKIP1 ? RECNO() &第二个显示 GO BOTTOM ? RECNO() &第三个显示 SKIP ? RECNO() &第四个显示(分数:12.00)(1).第一个显示? RECNO()的值为_。(分数:3.00)A.1B.5C.0D.6(2).第二个显示? RECNO()的值为_。(分数:3.00)A.1B.5C.0D.6(
11、3).第三个显示? RECNO()的值为_。(分数:3.00)A.4B.5C.10D.3(4).第四个显示? RECNO()的值为_。(分数:3.00)A.4B.5C.10D.3五、试题 5(总题数:1,分数:12.00)程序 SET TALK OFF CLEAR DIME X(3,4) STORE 1 TO I,K DO WHILE 1=2 J=1 DO WHILE J=3 X(I,J)=K ? X(I,J) K=K+5 J=J+1 ENDDO I=I+1 ENDDO SET TALK ON RETURN(分数:12.00)(1).X(1,1)和 X(1,2)的结果为_。(分数:3.00)A
12、.1 3B.1 6C.1 2D.2 1(2).X(1,3)和 X(2,1)的结果为_。(分数:3.00)A.5 11B.16 11C.11 5D.11 16(3).X(2,2)和 X(2,3)的结果为_。(分数:3.00)A.11 16B.16 21C.21 26D.26 31(4).X(3,1)和 X(3,2)的结果为_。(分数:3.00)A.11 16BF. .T.CF. .F.D.31 .T.六、试题 6(总题数:1,分数:12.00)程序 SET TALK OFF CLEAR val1=10 val2=15 DO P1 ? val1, val2 SET TALK ON RETURN P
13、ROCEDURE P1 PRIVATE val1 val1=50 val2=100 ? val1, val2 RETURN(分数:12.00)(1).第一次 val1, val2的输出结果分别为_。(分数:3.00)A.50 100B.10 100C.50 15D.10 15(2).第二次 val1,val2 的输出结果分别为_。(分数:3.00)A.50 100B.10 100C.50 15D.10 15(3).若在子程序中 PRIVATE val1后加一条语句 PRIVATE val2,则第一次 val1, val2的输出结果分别为_。(分数:3.00)A.50 100B.10 100C.
14、150 15D.10 15(4).若在子程序中 PRIVATE val1后加一条语句 PRIVATE val2,则第二次 val1, val2的输出结果分别为_。(分数:3.00)A.50 100B.10 100C.50 15D.10 15七、试题 7(总题数:1,分数:14.00)1.编写程序,给定一个年份(从键盘输入),判断它是否闰年。闰年的条件是:能被 4整除但不能被 100整除,或能被 100整除且能被 400整除。 (分数:14.00)_八、试题 8(总题数:1,分数:14.00)2.设计一个表单,当单击“开始”按钮时,在编辑框(EDIT1)中输出九九乘法表(如下图的所示),试编写“
15、开始”按钮(Command1)的 Click事件代码。 (分数:14.00)_浙江二级 VISUAL+FOXPRO-试题 11答案解析(总分:100.00,做题时间:90 分钟)一、试题 1(总题数:1,分数:12.00)程序说明 从键盘输入 10个数,然后找出其中的最大值与最小值,最大值存放在变量 MAX中,最小值存放在变量 MIN中。 程序 SET TALK OFF INPUT TO X MAX=X MIN=X I=1 DO WHILE _ INPUT TO X IF _ MAX=X ENDIF IF _ MIN=X ENDIF _ ENDDO ? MAX, MIN SET TALK ON
16、 RETURN(分数:12.00)A.I=1B.I=11C.I=10 D.I10解析:解析 题干要求输入 10个数,I 的初始值为 1,所以 DO WHILE循环条件应用条件 I=10,来控制输入的个数。A.XMAXB.XMAX C.XMAXD.X=MAX解析:A.X=MINB.XMINC.XMIND.XMIN 解析:解析 当输入的数 X大于最大值时,把 X赋给 MAX,当输入的数 X小于最小值时,把 X赋给MIN。MAX 始终指向最大值,MIN 始终指向最小值。A.I=XB.I=I+1 C.I=I-1D.I=MIN解析:解析 I 用来控制输入的个数,处理输入的数 X后,接着处理下一个输入的数
17、,用 I+1来控制,所以此空应为 I=I+1。二、试题 2(总题数:1,分数:9.00)程序说明 程序功能是输入 50个学生某门课程的成绩,并求出平均值。 程序 SETTALK OFF DIMENSION A (50) sum=0 FOR i=1 TO 50 INPUT TO A(i) _ END FOR _ ?“平均成绩为:“, _ SET TALK ON RETURN(分数:9.00)A.sum=A(i)B.sum=sum+A(i) C.sum=sum+iD.sum=i解析:解析 要输入 50个数据,因此可以设置一个循环,其循环次数为 50次,每循环一次,就输入一个数据到 A(i)数组元素
18、中,同时要将该数据累加到 sum变量中,即执行 sum=sum+A(i)语句,程序中的sum变量起到了计数器的作用。A.Aver=sum%50B.Aver=sum MOD 50C.Aver=sum/50 D.Aver=sum*50解析:解析 %:取模运算符,*:乘法运算符,/:除法运算符。A.sumBiC.A(i)D.Aver 解析:解析 平均成绩用变量 Aver表示。sum 表示成绩的总和。三、试题 3(总题数:1,分数:15.00)程序说明 本大题使用的数据表如下: “歌手”表 歌手号 姓名 1001 王容 2001 徐巍 3001 周杰 4001 林俊伦 “评分”表 歌手号 分数 评委号
19、 1001 9.8 101 1001 9.6 102 1001 9.7 103 1001 9.8 104 (分数:15.00)(1).为“歌手”表增加一个字段“最后得分”的 SQL语句是_。(分数:3.00)A.ALTER TABLE歌手 ADD最后得分 F(6,2) B.ALTER DBF歌手 ADD最后得分 F6,2C.CHANGE TABLE歌手 ADD最后得分 F(6,2)D.CHANGE TABLE学院 INSERT最后得分 F6,2解析:解析 修改字段属性的命令的语法格式是: ALTER TABLE TableName1 ALTER FieldName2 FieldTypenFie
20、ldWidth 其中:TableName1 是数据表名。FieldName2 是数据表中所要修改的字段名。FieldTypenFieldWidth用来说明修改后的字段的类型和宽度。从 4个候选项中可以看出,只有选项 A是正确的。选项 C和 D关键字CHANGE有误,而选项 B用来指定表的短语 DBF错误,所以这 3个选项均为错误答案。(2).插入一条记录到“评分”表中,歌手号、分数和评委号分别是“1001”、9.9 和“105”,正确的 SQL语句是_。(分数:3.00)A.INSERT VALUES(“1001“,9.9,“105“)INTO评分(歌手号,分数,评委号)B.INSERT TO
21、评分(歌手号,分数,评委号)VALUES(“1001“,9.9,“105“)C.INSERT INTO评分(歌手号,分数,评委号)VALUES(“1001“,9.9,“105“) D.INSERT VALUES(“1001“,9.9,“105“)TO评分(歌手号,分数,评委号)解析:解析 使用 SQL语言向表中插入数据的命令是 INSERT INTO,命令格式如下: INSERT INTO 表名(字段名 1,字段名 2,)VALUES(表式 1,表达式 2,)或 INSERT INTO表名FROM ARRAY数组名| FROM MEMVAR 作用是在表尾插入一条记录。而在题的 4个选项中:选项
22、 A的顺序不正确,选项 B则使用了错误的关键字TO,选项 D除了顺序不正确之外,还使用了错误的关键字 TO,只有选项 C为正确答案。(3).假设每个歌手的“最后得分”的计算方法是:去掉一个最高分和一个最低分,取剩下分数的平均分。根据“评分”表求每个歌手的“最后得分”并存储于表 TEMP中,表 TEMP中有两个字段:“歌手号”和“最后得分”,并且按最后得分降序顺序,生成表 TEMP的 SQL语句是:_。(分数:3.00)A.SELECT歌手号,(COUNT(分数)-MAX(分数)-MIN(分数)/(SUM(*)-2)最后得分;FROM 评分 INTO DBF TEMP GROUP BY歌手号 O
23、RDER BY最后得分 DESCB.SELECT歌手号,(COUNT(分数)-MAX(分数)-MIN(分数)/(SUM(*)-2)最后得分;FROM 评分 INTO DBF TEMP GROUP BY评委号 ORDER BY最后得分 DESCC.SELECT歌手号,(SUM(分数)-MAX(分数)-MIN(分数)/(COUNT(*)-2)最后得分;FROM 评分 INTO DBF TEMP GROUP BY评委号 ORDER BY最后得分 DESCD.SELECT歌手号,(SUM(分数)-MAX(分数)-MIN(分数)/(COUNT(*)-2)最后得分;FROM 评分 INTO DBF TEM
24、P GROUP BY歌手号 ORDER BY最后得分 DESC 解析:解析 在此 SQL语句中,首先要根据“歌手号”分组计算出每个歌手的总成绩,然后去掉该歌手的最高分及最低分,并且根据评委人数(减去两个去掉分数的评委数量)来计算平均分,将结果保存在表TEMP中,并按照“最后得分”的降序排列。在此题的 4个选项中,选项 A及选项 B在计算歌手总分数时使用了错误的函数 COUNT(该函数用来计算记录数量),并在计算评委人数时使用了错误的函数 SUM(汇总函数,应当用来计算歌手的总分),所以不正确。而选项 C虽然使用了正确的函数,但用来指定分组的GROUP BY子句后面错误地使用了“评委号”字段(应
25、当使用“歌手号”字段),所以也不正确。选项 D正确表达了题意,所以为正确答案。(4).与“SEI*ECT*FROM 歌手 WHERE NOT(最后得分9.00 OR 最后得分8.00)”等价的语句是_。(分数:3.00)A.SELECT*FROM歌手 WHERE最后得分 BETWEEN 9.00 AND 8.00B.SELECT*FROM歌手 WHERE最后得分=8.00 AND 最后得分=9.00 C.SELECT*FROM歌手 WHERE最后得分9.00 OR 最后得分8.00D.SELECT*FROM歌手 WHERE最后得分=8.00 AND 最后得分=9.00解析:解析 题干中 SEL
26、ECT语句的意义为:选择出“歌手”表中所有“最后得分”字段中值不大于9.00(包括 9.00)及不小于 8.00(包括 8.00)记录的所有字段,由此题意我们可以看出:选项 C中 SQL语句的意义为选出“歌手”表中所有“最后得分”字段值大于 9.00或小于 8.00的记录,与题意不符。选项 D中 SQL语句的意义为选出“歌手”表中所有“最后得分”字段值小于等于 9.00或大于等于 8.00的记录(是数据表中的全部记录),与题意不符。选项 A有一定的迷惑性,BETWEENAND表示查询的条件值是在什么范围内的时候用,当 BETWEEN作取值范围限定时,包括限定条件的两个端点值,所以考生很容易犯错
27、误,使用 BETWEENAND的两个限定值应当遵循从小到大的原则,而此题正好相反,所以不可能查询出结果,故也为错误答案。选项 B能够正确体现题干中 SQL语句的意义,所以为正确答案。(5).为“评分”表的“分数”字段添加有效性规则:“分数必须大于等于 0并且小于等于 10”,正确的SQL语句是_。(分数:3.00)A.CHANGE TABLE评分 ALTER分数 SET CHECK分数=0 AND 分数=10B.ALTER TABLE评分 ALTER分数 SET CHECK分数=0 AND 分数=10 C.ALTER TABLE评分 ALTER分数 CHECK分数=0 AND 分数=10D.C
28、HANGE TABLE评分 ALTER分数 SET CHECK分数=0 OR 分数=10解析:解析 可以使用命令 ALTER TABLE来实现对表的字段进行有效性设置,其格式为: ALTER TABLE表名ALTER字段SET CHECK表达式 选项 A和选项 D错误在于使用了错误的关键字 CHANGE。选项 B正确。选项 C缺少子句关键字 SET。四、试题 4(总题数:1,分数:12.00)程序说明 本题用到的索引文件如下: 记录号 学号 姓名 性别 出生年月 简历 奖学金 照片 5 951013 陈玉红 .F. 08/03/71 memo 0.00 gen 6 953002 朱 伟 .T.
29、 04/04/70 memo 25.00 gen 7 954001 于 霞 .F. 01/05/72 memo 25.00 gen 4 953013 罗 浩 .T. 09/09/71 memo 50.00 gen 1 954006 张小强 .T. 07/21/70 memo 75.00 gen 2 953008 赵 峰 .T. 11/05/72 memo 75.00 gen 9 951019 陈 红 .F. 09/14/75 memo 75.00 gen 8 951001 王 平 .F. 09/09/70 memo 150.00 gen 3 954011 陈健红 .F. 09/21/10 me
30、mo 250.00 gen 程序 SET TALK OFF CLEAR USE学生 INDEX奖学金 LIST GO TOP ? RECNO() &第一个显示 SKIP1 ? RECNO() &第二个显示 GO BOTTOM ? RECNO() &第三个显示 SKIP ? RECNO() &第四个显示(分数:12.00)(1).第一个显示? RECNO()的值为_。(分数:3.00)A.1B.5 C.0D.6解析:解析 在文件头处,即 BOF()=.T.处,其记录号总是与逻辑上的第一个记录的记录号相同。(2).第二个显示? RECNO()的值为_。(分数:3.00)A.1B.5 C.0D.6解
31、析:解析 当指针指向第一条记录时,若再向前移指针,则当前记录号仍是逻辑上的第一个记录的记录号。(3).第三个显示? RECNO()的值为_。(分数:3.00)A.4B.5C.10D.3 解析:解析 指针指向最后一条记录,最后一条记录的记录号为 3。(4).第四个显示? RECNO()的值为_。(分数:3.00)A.4B.5C.10 D.3解析:解析 在指针指向文件尾处时,记录号等于记录总数加 1。五、试题 5(总题数:1,分数:12.00)程序 SET TALK OFF CLEAR DIME X(3,4) STORE 1 TO I,K DO WHILE 1=2 J=1 DO WHILE J=3
32、 X(I,J)=K ? X(I,J) K=K+5 J=J+1 ENDDO I=I+1 ENDDO SET TALK ON RETURN(分数:12.00)(1).X(1,1)和 X(1,2)的结果为_。(分数:3.00)A.1 3B.1 6 C.1 2D.2 1解析:(2).X(1,3)和 X(2,1)的结果为_。(分数:3.00)A.5 11B.16 11C.11 5D.11 16 解析:(3).X(2,2)和 X(2,3)的结果为_。(分数:3.00)A.11 16B.16 21C.21 26 D.26 31解析:解析 外层 DO WHILE循环两次,每循环一次内层 DO WHILE都循环
33、三次。最后得出 X(1,1)=1,X(1,2)=6,X(1,3)=11,X(2,1)=16,X(2,2)=21,X(2,3)=26。(4).X(3,1)和 X(3,2)的结果为_。(分数:3.00)A.11 16BF. .T.CF. .F. D.31 .T.解析:解析 定义数组后,系统自动给每个元素定义为逻辑型,其值为逻辑假.F.。X(3,1)和 X(3,2)没有被重新赋值,仍保持系统值。六、试题 6(总题数:1,分数:12.00)程序 SET TALK OFF CLEAR val1=10 val2=15 DO P1 ? val1, val2 SET TALK ON RETURN PROCED
34、URE P1 PRIVATE val1 val1=50 val2=100 ? val1, val2 RETURN(分数:12.00)(1).第一次 val1, val2的输出结果分别为_。(分数:3.00)A.50 100 B.10 100C.50 15D.10 15解析:(2).第二次 val1,val2 的输出结果分别为_。(分数:3.00)A.50 100B.10 100 C.50 15D.10 15解析:解析 调用子程序 P1时,就输出 val1,val2,之后再输出主程序的 val1,val2,所以第一次输出结果应为子程序中的 val1,vat2,第二次输出主程序中的变量。在子程序
35、P1中,定义了一个私有的与主程序中同名的变量 val1,第一次输出 val1,val2 分别为 50,100。执行完子程序,返回主程序。子程序中的私有变量 val1值的改变不影响主程序中的 val1,而自然属性变量 val2随着子程序中同名 val2值的改变而改变。所以第二次输出 val1,val2 分别为 10,100。(3).若在子程序中 PRIVATE val1后加一条语句 PRIVATE val2,则第一次 val1, val2的输出结果分别为_。(分数:3.00)A.50 100 B.10 100C.150 15D.10 15解析:(4).若在子程序中 PRIVATE val1后加一
36、条语句 PRIVATE val2,则第二次 val1, val2的输出结果分别为_。(分数:3.00)A.50 100B.10 100C.50 15D.10 15 解析:解析 子程序中变量 val1和 vat2都为私有变量,在子程序输出时 val1和 val2分别 50,100,但在主程序中的 val1和 val2的值不随子程序中同名变量 val1和 val2的改变而改变,所以第二次输出val1和 val2的值分别为 10,15。七、试题 7(总题数:1,分数:14.00)1.编写程序,给定一个年份(从键盘输入),判断它是否闰年。闰年的条件是:能被 4整除但不能被 100整除,或能被 100整
37、除且能被 400整除。 (分数:14.00)_正确答案:()解析:编写程序代码如下: SET TALK OFF CLEAR INPUT“Y=“TO Y IF(Y%4=0 AND Y%100!=0)OR(Y%100=0 AND Y%400=0) ? Y,“是闰年!“ ELSE ? Y,“不是闰年!“ ENDIF SET TALK ON八、试题 8(总题数:1,分数:14.00)2.设计一个表单,当单击“开始”按钮时,在编辑框(EDIT1)中输出九九乘法表(如下图的所示),试编写“开始”按钮(Command1)的 Click事件代码。 (分数:14.00)_正确答案:()解析:编写表单(Form1)的 Init事件代码如下: PUBLIC C,M 编写命令按钮 Command1的 Click事件代码如下: STORE“ “TO C,M M=“*“ FOR A=1 TO 9 M=M+STR(A,4) ENDFOR M=M+CHR(13) FOR I=1 TO 9 C=C+STR(I,1) FOR J=1 TO I C=C+STR(I*J,4) ENDFOR C=C+CHR(13) ENDFOR THISFORM. EDIT1. VALUE=M+C THISFORM. REFRESH