vfp等级考试复习题Word文件下载.docx
《vfp等级考试复习题Word文件下载.docx》由会员分享,可在线阅读,更多相关《vfp等级考试复习题Word文件下载.docx(57页珍藏版)》请在冰点文库上搜索。
B.DELETEFROMDZWHEREYEAR(DATE())-YEAR(CSRQ)>
C.DELETEFROMDZFORYEAR(DATE())-YEAR(CSRQ)>
D.DELETEFROMDZWHILEYEAR(DATE())-YEAR(CSRQ)>
主要掌握DELETE命令和DELETE-SQL命令的功能。
A选项能够实现逻辑删除,但是XS表必须事先打开且为当前工作区的表。
C、D选项都是语法错误。
7.已知DZ表的结构为:
读者编号(DZBHC(8))、姓名(XMC(8))等,并且按照DZBH设置了结构复合索引,索引标识为DZBH,如果DZ表不是当前工作区的表,则下列________命令不能实现查找读者编号为“96010101”的记录。
A.SELECTDZ
LOCATEFORDZBH="
96010101"
B.SEEK"
960101"
ORDERDZBHINDZ
C.SELECTDZ
SETFILTERTODZBH="
D.SELECTDZ
SEEK"
【解析】答案为D。
LOCATEFOR命令是条件定位,根据给定的条件将记录指针定位到指定的记录。
SETFILTERTO命令是记录的筛选,在当前工作区的表中筛选出满足条件的记录。
SEEK命令可以实现查找的功能,但是必须要设置主控索引。
8.已知表中已经建立了多个索引,则无论是否设置主控索引,都定位到同一条记录的命令是________。
A.GOTOPB.GOBOTTOMC.GO5D.SKIP-1
GOTOP、GOBOTTOM、SKIP命令都是相对定位命令,它们受记录的逻辑顺序的影响。
而GO5指的是跳转到5号记录,无论是否设置主控索引,记录的记录号是不会改变的。
9.下列关于记录的删除的叙述,不正确的是________。
A.DELETE命令和DELETE-SQL命令都要求表以独占方式打开
B.PACK命令和ZAP命令要求表必须以独占方式打开
C.PACK命令和ZAP命令可以实现彻底删除表中带有删除标记的记录的功能
D.RECCOUNT()函数的返回值不受SETDELETEDON|OFF命令的影响
主要掌握表中记录删除的相关内容。
DELETE命令要求表必须事先打开,而DELETE-SQL命令不必,且无论表是独占方式还是共享方式打开,都不影响删除标记的设置。
PACK和ZAP命令要求表必须以独占方式打开,PACK彻底删除带有删除标记的记录,ZAP删除表中所有记录,仅保留表结构。
RECCOUNT()函数返回表中的记录数,不受删除标记的影响。
10.已知TS表中有DJ字段(单价,数值型),如果DJ不低于100,则设置BZ(备注,备注型)内容为“高档图书”,则下面哪条命令不能完成该功能________。
A.USETS
REPLACEBZWITH"
高档图书"
FORDJ>
=100
B.UPDATETSSETBZ="
WHEREDJ>
C.UPDATETSSETBZ="
D.UPDATETSSETBZ=IIF(DJ>
=100,"
"
"
)
主要掌握UPDATE命令和REPLACE命令。
前者的语法格式为:
UPDATE表文件名SET字段名=值WHERE逻辑条件表达式。
REPLACE命令的语法格式为:
REPLACE字段名1WITH值1,字段名2WITH值2,…FOR逻辑条件表达式,REPLACE命令要求表必须事先打开,而且是当前工作区的表。
11.已知TS表属于数据库TSK,如果不小心删除了TSK的相关文件,则要将TS表添加到其他数据库中,必须释放____________,释放的命令是___________________。
【解析】答案为后链、FREETABLETS。
数据库表和数据库之间通过双向链接相关联。
一张数据库表只能属于一个数据库,如果意外损害了数据库文件,则必须释放后链才能添加到其他数据库中。
12.已知成绩表(cj.dbf)的结构如下图,请完善下列各项命令。
字段名
类型
宽度
字段含义
是否主键
XH
C
6
学号
是
KCDH
2
课程代号
CJ
N
3,0
成绩
(1)创建表结构的命令
CREATETABLECJ(XHC(6),KCDHC
(2),CJN(3,0))
(2)给CJ表添加一个备注型字段BZ
ALTERTABLECJADDCOLUMNBZM
(3)将BZ字段的字段名改为CJBZ
ALTERTABLECJRENAMECOLUMNBZTOCJBZ
(4)为CJ表添加一条记录:
08010101,02,60
INSERTINTOCJ(XH,KCDH,CJ)VALUES("
08010101"
02"
60)
(5)将所有CJ不及格的记录的CJBZ字段内容设置为“需要补考”
UPDATECJSETCJBZ="
需要补考"
WHERECJ<
60
(6)根据KCDH字段升序排序,当KCDH相同时按照CJ升序排序,索引标识名为KCCJ
INDEXONKCDH+STR(CJ,3)TAGKCCJ
(7)将成绩表所有08级的考生的考试记录做删除标记(XH的前两位表示年级)。
DELETEFROMCJWHERELEFT(XH,2)="
08"
【解析】该类题目主要要求掌握表的一些相关命令。
因此要熟悉每一种命令的功能以及命令格式。
13.已知TS表和JY表的结构如下,
TS表结构
JY表结构
sh
20
书号
dzbh
8
读者编号
sm
50
书名
zz
40
作者
jsrq
D
借书日期
dj
5,1
单价
hsrq
还书日期
图书表TS的记录如下:
记录号
1
I247.5/8888P
女奴:
天命之择
林政
48
I247.5/8880P
支离破碎
石康
43.6
3
C912.1-49/129P
卡耐基经典小故事全集
(美)戴尔·
卡耐基
39.8
4
K891.26-49/2P
礼仪是一种资本:
日常礼仪的300个细节
李洁
5
H1/104P
中国语文
杜纯梓
98
F239.22/14P
中国审计体系研究
《中国审计体系研究》课题组编著
借阅表JY的记录如下:
05030815
2008-05-01
2008-05-23
2008-06-12
2008-06-17
06030828
2008-12-11
2009-01-24
2008-11-01
2008-11-21
2008-08-01
2008-09-01
A030013
2008-11-08
2008-12-01
7
2008-05-12
2008-05-19
2009-05-01
2009-05-11
9
2008-09-11
2008-09-21
TS表的候选关键字是SH,JY表的候选关键字是DZBH+SH,若JY表中所有的SH值都来自TS表,则两张表之间是一对多关系。
其中主表是TS表,子表是JY表。
如果在两张表之间建立永久关系,则必须设置主表TS表中以SH字段为索引关键字建立主索引或候选索引,在子表中以SH字段建立普通索引。
两张表的记录如上表所示,如果两张表之间创建了参照完整性:
更新级联、删除限制和插入限制。
就两张表的已知数据而言,如果把TS表的第3号记录的书号改为“C912.1-49/110P”,则JY表中有2条记录被更改,如果把JY表中的第8号记录的书号改为“F252/265P”,则TS表中有0条记录被更改。
如果要删除TS表中的第5号记录,则允许吗?
允许
如果要求只有登记入库的书才能被借阅,则设置TS表和JY表之间的参照完整性规则为插入限制。
【解析】掌握数据库表之间的关系,以及永久关系的建立和参照完整性的设置。
第二部分内容程序阅读与改错
1.阅读下列程序,回答指定问题。
SETTALKOFF
CLEAR
USESALARY
DOWHILE.NOT.EOF()
IF实发工资>
=250
SKIP
LOOP
ENDIF
DISPLAY&
&
短路
SKIP&
ENDDO
CLOSEDATABASE
RETURN
该程序完成的功能是;
LOOP语句的功能是。
【解析】答案是:
程序完成的功能是显示实发工资低于250元(不含250)的记录信息。
LOOP语句的功能是当检验当前的记录满足“实发工资>
=250”条件时,不执行语句DISPLAY和SKIP(又称为将其短路)。
2.给程序填充,使其具有以下功能:
根据学生成绩表(CJ)中学生的考试成绩,按下表的划分标准,给出相应的等级,设CJ表中有一个名为DJ的字段。
分数与等级对照表
分数
等级
90~100
优秀
80~89
良好
70~79
中等
60~69
及格
<60
不及格
USECJ
GOTOP
DOWHILE.T.
N=CJ
DOCASE
CASE
(1)
ReplaceDjwith”不及格”
CASE
(2)
ReplaceDjwith”及格”
CASE(3)
ReplaceDjwith”中等”
CASE(4)
ReplaceDjwith”良好”
OTHERWISE
ReplaceDjwith”优秀”
ENDCASE
SKIP
IFEOF()
EXIT
ENDIF
USE
【解析】答案为
(1)N<
60;
(2)N<
70;
(3)N<
80;
(4)N<
90。
程序中用到了DO循环嵌套CASE语句和IF语句的形式,先进入循环,执行CASE语句,再利用条件语句来判断何时结束循环。
CASE语句中的各种CASE条件,排列顺序很重要,如果排列不对,将产生错误的结果。
例如,程序片段:
CASEN<
90
CASEN<
70
80
结果对60分~90分的成绩等级均给”良好”。
3.已知学生表xs.dbf。
给程序填充,使其具有以下功能:
求男、女同学平均年龄(输出时保留4位小数)。
要求采用FOR循环语句,
Usexs
Gotop&
将记录指针指向学生表的第一个记录
Store0tosum1,sum2,cot1,cot2
ForI=1to
(1)&
recount()函数返回打开的表的记录数
Ifxb=”男”
Sum1=sum1+
(2)&
SUM1中存放男同学年龄之和
Cot1=cot1+1&
COT1中存放男同学人数
Else
Sum2=sum2+(3)&
SUM2中存放女同学年龄之和
Cot2=cot2+1&
COT2中存放男同学人数
Endif
Skip
endfor
?
(4)
(5)
USE
(1)reccount();
(2)year(date())-year(csrq)(3)year(date())-year(csrq)(4)"
男同学的平均年龄为"
+STR(SUM1/COT1,7,4)(5)"
女同学的平均年龄为"
+STR(SUM1/COT1,7,4)。
此程序中用到了循环语句FOR…ENDFOR,使用语句SKIP将记录指针向下移动一个记录,直到学生表中的记录全部处理完。
•表达式year(date())-year(csrq)用于计算每个学生的年龄。
•STR为VFP系统提供的函数,其功能是将数值表达式转换成数值字符串,第一个参数为要转换的数值表达式,第二个参数为串长,第三个参数为小数位。
“男同学的平均年龄为“+STR(SUM1/COT1,7,4)是一字符表达式,若没有STR转换函数,如:
?
+SUM1/COT1,则系统会提示“操作符与操作数类型不匹配”。
4.利用SCAN循环语句,完成题2。
Usexs&
打开学生表
Store0tosum1,sum2,cot1,cot2&
将0值赋给内存变量SUM1,SUM2,COT1,COT2
(1)
Ifxb="
男"
Sum1=sum1+
(2)
Cot1=cot1+1
Sum2=sum2+(3)
Cot2=cot2+1
endif
endscan
?
USE&
关闭学生表
【解析】答案是:
(1)scan;
STORE语句与下列四个语句等价:
注意:
VFP系统规定一行只能写一条语句
SUM1=0
SUM2=0
COT1=0
COT2=0
•此程序中用到了循环语句SCAN…ENDSCAN,其中使用IF语句,根据性别不同,各自往不同的变量中累加,一条记录处理完,自动进入下一条记录,直到学生表中的记录全部处理完。
•因为SCAN语句自动移动记录指针进入下一条记录,所以不要加上skip语句。
5.利用DOWHILE循环语句,完成题2。
程序清单如下:
Usexs
Gotop&
DOWHILE
(1)&
判断表的记录指针是否指向了表的尾部
Sum1=sum1+
(2)
Cot1=cot1+1
Sum2=sum2+(3)
Cot2=cot2+1
Skip
enddo
(1)NOTEOF();
此程序中用到了循环语句DOWHILE<
循环条件>
…ENDDO,此处<
用到了函数EOF():
EOF()=.T.即记录指针已经指向了表的尾部(表记录的结束标志)
EOF()=.F.即记录指针没到表的尾部
noteof()即记录指针没到表的尾部,就进行循环;
否则,结束循环
VFP系统还提供另一个函数BOF():
BOF()=.T.即记录指针已经指向了表的头部(表记录的开始标志)
BOF()=.F.即记录指针没到表的头部
6.完善自定义过程ntoc(),当传递一个0—9间的数字时,分别返回零—九。
并给出使用的方法。
dimensionarray1[10]
dimensionarray2[10]
clear
FORi=1to10
array1[i]=i-1
ENDFOR
array1[i]
(1)&
调用过程ntoc()
array2[i]
ENDFOR
procedurentoc
PARAmeterspdigit,aa&
虚拟参数
LOCALcstring&
局部变量
Cstring="
零一二三四五六七八九"
fori=1to10
aa[i]=
(2)
endf
ENDPROC
【解析】答案是
(1)dontocwitharray1,array2,
(2)SUBSTR(cstring,pdigit*2+1,2);
在foxpro中,数组必须按址传递。
在默认情况下,当你用do...with调用过程或表单时,参数是按址传递。
在函数或方法中,参数是按值传递。
如:
dimensionarray1[10]doformform1witharray1
7.在INPUT、ACCEPT和WAIT命令中,必须要以回车键表示输入结束的命令是。
A.INPUT、ACCEPTB.INPUT、WAIT
C.ACCEPT、WAITD.INPUT、ACCEPT和WAIT
WAIT命令只能接收单个字符,可以在用户输入一个字符后自动结束该命令。
而INPUT、ACCEPT命令,等待用户从键盘输入数据,并以回车键表示结束输入。
8.下列关于DOCASE……ENDCASE语句说法不正确的是。
A.只要CASE条件成立,就执行这个CASE条件对应的命令序列
B.DOCASE和ENDCASE必须成对出现
C.所有的CASE条件都不成立且没有OTHERWISE语句,则直接跳出本结构,执行ENDCASE后面的语句
D.在DOCASE和第一个CASE之间的任何语句都不被执行
不管有几个CASE条件同时成立,只有最先成立的那个CASE条件对应的命令序列被执行。
如果所有的CASE条件都不成立且没有OTHERWISE语句,则直接跳出本结构。
DOCASE和ENDCASE必须成对出现,在DOCASE和第一个CASE之间的任何语句都不被执行。
9.在DOWHILE.T.的循环中,退出循环应使用的命令是。
A.LOOPB.EXITC.CLOSED.CLEAR
LOOP与EXIT都用于循环体中,结束当前的循环,但两者有着根本区别。
语句EXIT结束循环,将跳到直接包含它的循环体语句外,控制程序执行ENDDO或ENDFOR的后续语句。
语句LOOP结束当前的循环,即忽略此后的循环体语句,重新回到循环头,根据循环测试条件决定是否退出循环。
语句CLOSE是关闭语句,如CLOSEALL即关闭当前打开的所有的文件,包括表、数据库、项目等等。
CLEAR是清屏命令。