1、浙江二级 VISUAL+FOXPRO-试题 14及答案解析(总分:100.00,做题时间:90 分钟)一、试题 1(总题数:1,分数:12.00)程序说明 一个评分统计程序。共有 10个评委打分,统计时,去掉一个最高分和一个最低分,其余 8个分数的平均值即为最后得分。程序最后应显示这个得分及最高分和最低分,显示精度为 1位整数,2 位小数。 程序 SET TALK OFF _ ? “输入 10个评委的打分:“ FOR I=1 TO 10 INPUT TO X(I) ENDFOR _ FOR I=2 TO 10 IF MAXX(I) MAX=X(I) ELSE IF _ MIN=X(I) END
2、IF ENDIF S=S+X(I) ENDFOR AVG=_ ? “平均分为:“,STR(AVG,4,2) ? “最高分为:“,STR(MAX,4,2) ? “最低分为:“,STR(MIN,4,2) SET TALK ON RETURN(分数:12.00)A.DIME XB.X(10)C.DECLXD.DIME X(10)A.STORE X(1)TO MAX,MIN,SB.STORE X(1)C.STORE X TO MAX,MIN,SD.STORE X FOR MAX,MIN,SA.MAXMINB.MINX(I)C.MINX(I)D.MINX(I)A.S/10B.(S-MAX-MIN)/8C
3、.(S-MAX-MIN)/10D.(S+X(I)/8二、试题 2(总题数:1,分数:12.00)程序说明 设有学生. DBF:学号(C,6)、姓名(C,8)、性别(C,2)、出生日期(D,8)、奖学金(N,6,2)。 成绩. DBF:学号(C,6)、课程号(C,4)、成绩(N,5,1)。 课程. DBF:课程号(C,4)、课程名(C,20)。 现要求查询指定的某个学生的某个课程成绩。 程序 SET TALK OFF CLEAR SELE 1 USE学生 ACCE “请输入要查询的学生姓名:“TO XM LOCA FOR_ USE成绩 _ LOCA FOR _ USE课程 IN 3 SELE课程
4、 LOCA FOR _ SELE成绩 ? 学号,学生.姓名,课程号,C.课程名,成绩 SET TALK ON(分数:12.00)A.姓名=XMB.学号=XMC.学号=成绩.学号D.成绩.学号=XMA.IN1B.IN2C.IN3D.IN0A.课程号=学号B.课程名=课程.课程名C.学号=成绩.学号D.成绩.学号=学生.学号A.姓名=XMB.课程号=XMC.课程号=成绩.课程号D.学号=学生.学号三、试题 3(总题数:1,分数:12.00)程序说明 一个模糊查询程序:实现对职工表中的用户指定字段,查询指定内容(可能是不完整的,要求是字符型,如:查姓“王”的)。 程序 USE职工 DO WHILE
5、.T. ACCE “请输入要查询的字段名“FO ZDM IF_ ? “输入的字段类型错误,请重新输入“ LOOP ENDIF ACCE “请输入查询内容:“TO NR LOCA FOR _ DO WHILE _ DISP WAIT CONT ENDDO WAIT “还要继续查询吗?(Y/N)“TO YN _ ENDIF ENDDO(分数:12.00)A.TYPE(ZDM)“N“B.TYPE(ZDM)“C“C.TYPE(ZDM)“Y“D.TYPE(ZDM)“D“A.&ZDM=&NRB.ZDM=&NRC.ZDM=DRD.&ZDM=NRA.EOf()B.BOF()C.FOUND()DNOT. FOU
6、ND()A.EXITB.LOOPC.ENDD.CONTINUE四、试题 4(总题数:1,分数:12.00)程序说明 涉及到的库文件 SJK. DBF如下: record# BH(N型) XM(C型) XB(C型) CS(D型) ZF(N型) ZXJ(N型) 1 080102 王五 男 80/06/08 586.00 99.00 2 080201 李四 女 82/08/09 532.00 81.00 3 080202 张三 男 81/05/06 618.00 116.00 4 080101 赵六 女 82/07/08 609.00 103.00 5 080103 孙月 女 08/06/23 58
7、9.00 72.00 程序 CLEAR SET TALK OFF USE SJK DO WHILE .T. IF EOF() EXIT ENDIF IF XB=“女“ SKIP ELSE XH=BH NAME=XM FEE=ZXJ A=ZF ENDIF SKIP ENDDO ? XH, NAME, FEE, A USE SET TALK ON RETURN(分数:12.00)(1).XH的输出结果为_。(分数:3.00)A.080102B.080201C.080202D.080103(2).NAME的输出结果为_。(分数:3.00)A.“李四“B.“张三“C.“孙月“D.“王五“(3).FEE
8、的输出结果为_。(分数:3.00)A.81.00B.72.00C.99.00D.116.00(4).A的输出结果为_。(分数:3.00)A.618.00B.586.00C.0D.出错五、试题 5(总题数:1,分数:12.00)程序 SET TALK OFF CLEAR INPUT “X=“ TO X INPUT “Y=“ TO Y DO WHILE YO X=X+MOD(Y,X) Y=Y-2 IF Y4 EXIT ENDIF ENDDO ? X,Y(分数:12.00)(1).当输入 X,Y值分别为 3,10时,输出 X值为_。(分数:3.00)A.6B.8C.10D.12(2).当输入 X,Y
9、值分别为 3,10时,输出 Y值为_。(分数:3.00)A.4B.2C.0D.10(3).若将 DO WHILE Y0 改为 DO WHILE Y=0,输入 X,Y值分别为 3,10,则输出 X,Y值分别为_。(分数:3.00)A.8 2B.10 2C.3 8D.3 10(4).当输入 X,Y值分别为 2,5时,输出 X,Y值分别_。(分数:3.00)A.3 8B.3 1C.3 2D.3 3六、试题 6(总题数:1,分数:12.00)程序 CLEAR STORE 2 TO B,D STORE 1 TO A,C DO SUB WITH A,B,C,D ? B ? D STORE 3 TO A2,
10、A4 STORE 1 TO A1,A3 DO SUB WITH A1,A2,A3,A4 ? A4 DO SUB WITH 6,8,10,D ? D PROC SUB PARA A,B,C,D D=B*B-4*A*C DO CASE CASE D0 D=100 CASE D0 D=200 CASE D=0 D=10 ENDCASE RETURN(分数:12.00)(1).B的输出结果为_。(分数:3.00)A.2B.4C.10D.200(2).第一次 D的输出结果为_。(分数:3.00)A.2B.4C.10D.200(3).A4的输出结果为_。(分数:3.00)A.2B.10C.100D.200
11、(4).第二次 D的输出结果为_。(分数:3.00)A.100B.200C.10D.2七、试题 7(总题数:1,分数:14.00)1.编写一个求 100!和求 1+2+3+100的程序,在屏幕上显示结果。 (分数:14.00)_八、试题 8(总题数:1,分数:14.00)2.一个表单的功能是:若在 TEXT1中输入一个除数(整数),然后单击“计算”按钮,就能求出 20500 之间能彼此除数整除的数(整数)及这些数之和,并将结果分别在 EDIT1和 TEXT2中输出。表单设计界面如下图所示。试编写“计算”按钮的事件代码。 (分数:14.00)_浙江二级 VISUAL+FOXPRO-试题 14答案
12、解析(总分:100.00,做题时间:90 分钟)一、试题 1(总题数:1,分数:12.00)程序说明 一个评分统计程序。共有 10个评委打分,统计时,去掉一个最高分和一个最低分,其余 8个分数的平均值即为最后得分。程序最后应显示这个得分及最高分和最低分,显示精度为 1位整数,2 位小数。 程序 SET TALK OFF _ ? “输入 10个评委的打分:“ FOR I=1 TO 10 INPUT TO X(I) ENDFOR _ FOR I=2 TO 10 IF MAXX(I) MAX=X(I) ELSE IF _ MIN=X(I) ENDIF ENDIF S=S+X(I) ENDFOR AV
13、G=_ ? “平均分为:“,STR(AVG,4,2) ? “最高分为:“,STR(MAX,4,2) ? “最低分为:“,STR(MIN,4,2) SET TALK ON RETURN(分数:12.00)A.DIME XB.X(10)C.DECLXD.DIME X(10) 解析:解析 从整个程序来看,10 个评委的成绩放在一个数组里面,所以首先应定义一个有 10个元素的数组 X(10)。定义数组的格式 1:DIMENSION数组名(下标 1,下标 2),数组名(下标 1,下标 2。格式 2:DECLARE数组名(下标 1,下标 2),数组名(下标 1,下标 2)。A.STORE X(1)TO M
14、AX,MIN,S B.STORE X(1)C.STORE X TO MAX,MIN,SD.STORE X FOR MAX,MIN,S解析:解析 本空格的功能是把第一个元素 X(1)赋给变量 MAX,MIN 和 S。赋值命令的格式: STORE表达式TO内存变量。A.MAXMINB.MINX(I)C.MINX(I) D.MINX(I)解析:解析 MIN 始终指向最小值,只要任何一元素、MIN 大于 X(I),就要把 X(I)赋给 MIN。所以此空的条件判断 MIN是否大于 X(I)。A.S/10B.(S-MAX-MIN)/8 C.(S-MAX-MIN)/10D.(S+X(I)/8解析:解析 变量
15、 S是求数组中 10个元素的和,平均值是去掉一个最高分和一个最低分后的平均值,所以此空应填(S-MAX-MIN)/8。二、试题 2(总题数:1,分数:12.00)程序说明 设有学生. DBF:学号(C,6)、姓名(C,8)、性别(C,2)、出生日期(D,8)、奖学金(N,6,2)。 成绩. DBF:学号(C,6)、课程号(C,4)、成绩(N,5,1)。 课程. DBF:课程号(C,4)、课程名(C,20)。 现要求查询指定的某个学生的某个课程成绩。 程序 SET TALK OFF CLEAR SELE 1 USE学生 ACCE “请输入要查询的学生姓名:“TO XM LOCA FOR_ USE
16、成绩 _ LOCA FOR _ USE课程 IN 3 SELE课程 LOCA FOR _ SELE成绩 ? 学号,学生.姓名,课程号,C.课程名,成绩 SET TALK ON(分数:12.00)A.姓名=XM B.学号=XMC.学号=成绩.学号D.成绩.学号=XM解析:解析 程序段的第 3,4,5,6 行的功能是在工作区中打开学生表,输入要查询的学生的姓名(XM),顺序查找学生表中的学号与输入学生姓名(XM)相同的记录。顺序查找命令的格式:LOCATE FOR条件WHILE条件范围。其功能:按表的排列顺序依次搜索满足条件的第一条记录。所以第 1空应填姓名=XM。选项 C不能与输入信息(XM)建
17、立连接,选项 D中成绩表未打开。A.IN1B.IN2 C.IN3D.IN0解析:A.课程号=学号B.课程名=课程.课程名C.学号=成绩.学号D.成绩.学号=学生.学号 解析:解析 指定工作区的命令是:SELECT nWorkArea/c TableAlias。例如在第 2工作区打开成绩表:SELECT 2 USE学生在 USE命令中直接指定在第 2工作区打开成绩表:USE 成绩 IN2。因为学生表在第一工作区打开的,程序第 7、8 行的功能是在第 2工作区打开成绩表,并顺序查找成绩表中的学号与学生表中的学号相同的记录。学生表与成绩表建立连接的公共字段是学号,所以第 3空应填成绩. 学号=学生.
18、学号,又因在当前第二工作区打开了成绩表,所以成绩.学号中的“成绩.”可省略,默认的为成绩表中的学号。选项 C相当于成绩.学号=成绩.学号,无任何意义。选项 B课程表未打开。A.姓名=XMB.课程号=XMC.课程号=成绩.课程号 D.学号=学生.学号解析:解析 课程表与成绩表建立连接的公共字字段是课程号,所以第 4空应填课程号=成绩. 课程号。程序中通过 LOCA FOR姓名=XM 来建立学生表与输入信息的连接,通过 LOCA FOR成绩.学号=学生.学号,课程.课程号=成绩.课程号来建立三表之间的连接。三、试题 3(总题数:1,分数:12.00)程序说明 一个模糊查询程序:实现对职工表中的用户
19、指定字段,查询指定内容(可能是不完整的,要求是字符型,如:查姓“王”的)。 程序 USE职工 DO WHILE .T. ACCE “请输入要查询的字段名“FO ZDM IF_ ? “输入的字段类型错误,请重新输入“ LOOP ENDIF ACCE “请输入查询内容:“TO NR LOCA FOR _ DO WHILE _ DISP WAIT CONT ENDDO WAIT “还要继续查询吗?(Y/N)“TO YN _ ENDIF ENDDO(分数:12.00)A.TYPE(ZDM)“N“B.TYPE(ZDM)“C“ C.TYPE(ZDM)“Y“D.TYPE(ZDM)“D“解析:解析 IF 语句
20、判断输入的内容是否为字符型。 数据类型测试函数的格式:TYPE(字符表达式)功能:返回用定界符括起来的字符表达式内表达式值的数据类型。数据类型是一个表示该表达式类型的单个大写字母。字符型返回值是 C,数值型返回值是 N,货币型返回值是 Y,日期型返回值是 D。A.&ZDM=&NRB.ZDM=&NRC.ZDM=DRD.&ZDM=NR 解析:解析 此空功能是查询的内容(NR)和指定字段(ZDM)内容的记录。宏代换函数的格式:&字符型内存变量.。功能:用字符型内存变量的“值”去替换内存变量“名”。“.”符号表示变量结束。需把 ZDM宏代换成字段内容,所以此空填&ZMD=NR。A.EOf()B.BOF
21、()C.FOUND() DNOT. FOUND()解析:解析 DO WHILE 语句的判断条件是指针是否指向尾记录。如果找到想要的记录并未指向尾记录,则显示该记录。所以此空填 FOUND()或!EOF()。BOF()是表头测试函数。A.EXIT B.LOOPC.ENDD.CONTINUE解析:解析 进入 DO WHILE循环后,若不想继续查询所需内容,输入“N“则退出循环。退出循环用 EXIT命令。四、试题 4(总题数:1,分数:12.00)程序说明 涉及到的库文件 SJK. DBF如下: record# BH(N型) XM(C型) XB(C型) CS(D型) ZF(N型) ZXJ(N型) 1
22、 080102 王五 男 80/06/08 586.00 99.00 2 080201 李四 女 82/08/09 532.00 81.00 3 080202 张三 男 81/05/06 618.00 116.00 4 080101 赵六 女 82/07/08 609.00 103.00 5 080103 孙月 女 08/06/23 589.00 72.00 程序 CLEAR SET TALK OFF USE SJK DO WHILE .T. IF EOF() EXIT ENDIF IF XB=“女“ SKIP ELSE XH=BH NAME=XM FEE=ZXJ A=ZF ENDIF SKI
23、P ENDDO ? XH, NAME, FEE, A USE SET TALK ON RETURN(分数:12.00)(1).XH的输出结果为_。(分数:3.00)A.080102 B.080201C.080202D.080103解析:(2).NAME的输出结果为_。(分数:3.00)A.“李四“B.“张三“C.“孙月“D.“王五“ 解析:(3).FEE的输出结果为_。(分数:3.00)A.81.00B.72.00C.99.00 D.116.00解析:(4).A的输出结果为_。(分数:3.00)A.618.00B.586.00 C.0D.出错解析:解析 刚一打开数据库,记录指针指向第一条记录,
24、EOF()为假,所以执行第一个 ENDIF下面的语句,进入第二个 IF语句,由于第一条记录性别为“男”,不满足条件,所以执行 ELSE下面的XH=BH,NAME=XM,FEE=ZXJ,A=ZF,此时 XH等于第一条记录的 BH字段值 080102,NAME 等于 XM字段值“王五”,FEE 等于 ZXJ字段值 99.00。A 等于 ZF字段值 586.00。执行完 A=ZF语句,又执行 ENDIF下面的 SKIP,记录指针指向第二条记录。重新循环,EOF()为假,因此执行第一个 ENDIF下面的第二个 IF语句,由于第二条记录性别为“女”,满足条件,执行 SKIP语句,跳至第三条记录,然后执行
25、 ENDIF下面的语句 SKIP,记录指针跳至第四条记录。再次重新循环,EOF()为假,所以执行第一个 ENDIF下面的第二个 IF语句,由于第四条记录性别为“女”,满足条件,执行 SKIP语句,跳至第五条记录,然后执行ENDIF TN的语句 SKIP,记录指针跳至第六条记录(库文件尾部)。再次重新循环,EOF()为真,执行 EXIT退出循环。五、试题 5(总题数:1,分数:12.00)程序 SET TALK OFF CLEAR INPUT “X=“ TO X INPUT “Y=“ TO Y DO WHILE YO X=X+MOD(Y,X) Y=Y-2 IF Y4 EXIT ENDIF END
26、DO ? X,Y(分数:12.00)(1).当输入 X,Y值分别为 3,10时,输出 X值为_。(分数:3.00)A.6B.8C.10 D.12解析:(2).当输入 X,Y值分别为 3,10时,输出 Y值为_。(分数:3.00)A.4B.2 C.0D.10解析:解析 当 Y=10时进入 DO WHILE循环,执行 X=X+MOD(Y,X)=3+1=4,Y=Y-2=10-2=8,当 Y=8时继续循环,执行 X=X+MOD(Y,X)=4+0=4,Y=Y-2=6,当 Y=6时,继续循环执行 X=X+MOD(Y,X)=4+2=6,Y=Y-2=4,当 Y=4时,继续循环,执行 X=X+MOD(Y,X)=
27、6+4=10,Y=2,当 Y=2时,满足 IF的 Y4 条件,执行 EXIT退出循环,所以最后输职 X值 10,Y 值 2。(3).若将 DO WHILE Y0 改为 DO WHILE Y=0,输入 X,Y值分别为 3,10,则输出 X,Y值分别为_。(分数:3.00)A.8 2B.10 2C.3 8D.3 10 解析:解析 当 Y=10时,不满足循环条件 Y0,所以不执行 DO WHILE循环体,直接执行?X,Y 语句,所以输出 X的初值 3,Y 的初值 10。(4).当输入 X,Y值分别为 2,5时,输出 X,Y值分别_。(分数:3.00)A.3 8B.3 1C.3 2D.3 3 解析:解
28、析 当 Y=5时,进入循环体,执行 X=X+MOD(Y,X)=2+1=3,Y=Y-2=3,满足 IF的 Y4 条件,执行 EXIT退出循环,输出 X,Y 值分别为 3,3。六、试题 6(总题数:1,分数:12.00)程序 CLEAR STORE 2 TO B,D STORE 1 TO A,C DO SUB WITH A,B,C,D ? B ? D STORE 3 TO A2,A4 STORE 1 TO A1,A3 DO SUB WITH A1,A2,A3,A4 ? A4 DO SUB WITH 6,8,10,D ? D PROC SUB PARA A,B,C,D D=B*B-4*A*C DO
29、CASE CASE D0 D=100 CASE D0 D=200 CASE D=0 D=10 ENDCASE RETURN(分数:12.00)(1).B的输出结果为_。(分数:3.00)A.2 B.4C.10D.200解析:(2).第一次 D的输出结果为_。(分数:3.00)A.2B.4C.10 D.200解析:解析 执行 DO SUB WITH A,B,C,D 时,实参 A,B,C,D 传递给予过程 SUB的形参A,B,C,D,执行 D=B*B-4*A*C=2*2-4*1*1=0,执行 CASE D=0分支,D 被重新赋值 10,返回主程序,B 值没有改变仍为 2,D 值随子程序 SUB同名
30、变量的改变而改变。所以输出 B值为 2,D 值为 10。(3).A4的输出结果为_。(分数:3.00)A.2B.10C.100D.200 解析:解析 执行 DO SUB WITH A1,A2,A3,A4 时,实参 A1,A2,A3,A4 传递给子过程 SUB的形参A,B,C,D,执名 D=B*B-4*A*C=3*3-4*1*1=5,执行 CASE D0 分支,D 被重新赋值为 200,返回主程序,D值返给 A4,所以输出 A4值为 200。(4).第二次 D的输出结果为_。(分数:3.00)A.100 B.200C.10D.2解析:解析 执行 DO SUB WITH 6,8,10,D 时,实参
31、 6,8,10,D 传递给子程序 SUB的形参A,B,C,D,执行 D=B*B-4*A*C=8*8-4*6*10=-176,执行 CASE D0 分支,D 被重新赋值为 100,返回主程序,输出 D值 100。七、试题 7(总题数:1,分数:14.00)1.编写一个求 100!和求 1+2+3+100的程序,在屏幕上显示结果。 (分数:14.00)_正确答案:()解析:程序代码如下: STORE 1 TO N,I S=0 DO WHILE N=100 I=I*N S=S+N N=N+1 ENDDO ? “100!结果是:“,I ? “1+2+3十+100 结果是:“,S八、试题 8(总题数:1
32、,分数:14.00)2.一个表单的功能是:若在 TEXT1中输入一个除数(整数),然后单击“计算”按钮,就能求出 20500 之间能彼此除数整除的数(整数)及这些数之和,并将结果分别在 EDIT1和 TEXT2中输出。表单设计界面如下图所示。试编写“计算”按钮的事件代码。 (分数:14.00)_正确答案:()解析:程序代码如下: S=0 THISFORM. EDIT1. Value=“ “ FOR I=20 TO 500 IF MOD(I, VAL(THISFORM, TEXT1, Value)=0 THISFORM. EDIT1. Value=THISFORM. EDIT1. Value+STR(I,5) S=S+I ENDIF ENDFOR THISFORM. TEXT2. Value=S THISFORM. REFRESH