FoxPro For Windows http://cc.synu.edu.cn 1
FoxPro应试指导
应试指导
难点释疑
如何做选择题
如何做阅读程序
如何做完善程序
如何做修改程序
FoxPro For Windows http://cc.synu.edu.cn 2
FoxPro应试指导
难点释疑
一、系统设置命令
1、设置遮盖带删除标记记录,
SET DELETE ON|OFF
? ON 遮盖带删除标记的记录
? 影响下述命令的执行结果:
LIST,DISP,BROW 不显示做删除标记的记录;
COUNT 做删除标记的记录不参加记数;
COPY 不复制做删除标记的记录。
不影响 INDEX ON,REINDEX命令的执行。
? OFF 不遮盖带 "*"的记录。
阅读程序
use rs
DELETE FOR "教授 "$职称
recall for 工龄 >15
LIST
SET DELE ON
count to ss
"ss=",ss
RS.DBF
编号 姓名 性别 出生日期 职称 工龄 婚否
(c,4) (c,6) (c,2) (d,8) (c,6) (n,2) (l,1)
1001 李力 男 19600915 教授 19 T
3001 王玫 女 19751220 助教 4 F
2001 赵大山 男 19650512 副教授 14 T
3002 丁一林 男 19660924 副教授 13 T
1002 孙夏 女 19730822 助教 6 F
2002 黄刚 男 19701020 讲师 9 T
FoxPro For Windows http://cc.synu.edu.cn 3
FoxPro应试指导
2、设置精确与模糊比较:
SET EXACT ON|OFF
? OFF 不精确比较
LOCA FOR 姓名 =?张’
FOR AT(“张?,姓名 )<>0
FOR SUBS(姓名,1,2)=?张’
FOR,张? $姓名
FIND 张
SEEK ?张’
‘ abcd?=?ab?,数据库系统? =“数据?
‘ ab?=?abcd?,数据? =“数据库系统?
? ON 精确比较
‘ abd?=?abd?
? 不影响 $运算
FoxPro For Windows http://cc.synu.edu.cn 4
FoxPro应试指导
4、设置是否显示字段名
SET HEADING ON|OFF
record# sno name
1 990303 tom
3、设置是否显示记录号
DISP OFF 不显示记录号
sno name
990303 tom
990303 tom
5,DISP,?
DISP SNO,NAME
SNO,NAME
record# sno name
1 990303 tom
990303 tom
sno name
990303 tom
FoxPro For Windows http://cc.synu.edu.cn 5
FoxPro应试指导
二、命令语法规则
1、查询命令:
物理顺序检索,LOCA---CONT
LOCA FOR 姓名 =?张’ 继续查找 CONT
逻辑顺序检索,FIND,SEEK
继续查找,SKIP
FIND 192 SEEK 192 SEEK 60+10
FIND 王强 SEEK,王强?
FIND &xm SEEK xm
SEEK {99/10/12}
SEEK,t.
注意:按索引关键字查找
FoxPro For Windows http://cc.synu.edu.cn 6
FoxPro应试指导
2、恰当使用命令中的可选项:
a,[范围 ] ALL,NEXT n,RECORD n,REST
FOR/WHIL 时可省略范围,取满足条件记录。
DISP,DELE,RECA,LOCA,REPL
上述命令无范围选项时,仅对当前记录操作。
LIST,SUM,AVER,TOTA 无范围,对全部。
ALL记录指针移到最后记录加 1。
b,FOR/WHIL<条件 >
FOR 对所有满足条件记录 (从头到尾)操作
WHIL第一个记录开始连续满足条件,一旦不满足,停止操作。
c,FIELDS<字段名表 >
SORT,COPY TO,JOIN,TOTAL,EDIT,BROW、
SCAT,GATH可选;
SUM,AVER 不允许加 fields
FoxPro For Windows http://cc.synu.edu.cn 7
FoxPro应试指导
3、键盘输入交互命令
WAIT ACCE INPUT
字符 字符 (无定界符 ) 字符 (定界符) ?王强?
数字
日期(转换)
一个 任意 任意
回车 不接受回车
变量无须先赋值
【 例 】
wait '按下任意键继续! ' to jx
acce ?请输入您的选择:’ to xz &&1 或 A都认为是字符
input '请输入欲查询电话号,' to dhh && 86891234
input ?请输入姓名:’ to dhh &&,王强 ?
input ?请输入欲查询日期,' to dhh && {99/01/06}
FoxPro For Windows http://cc.synu.edu.cn 8
FoxPro应试指导
4、索引与排序
SORT TO stud2 ON score/D FIELDS sno,name,score FOR sex=“女?
SORT TO stu1 ON sex,score/D
INDEX ON sex+STR(score) TO sex
INDEX ON -score TO score
索引后指针定位:
逻辑定位, GO TOP 逻辑的第一个
GO BOTT 逻辑的最后一个
SKIP 逻辑的下一个
物理定位, GO 1 直接指向记录号
FoxPro For Windows http://cc.synu.edu.cn 9
FoxPro应试指导
5、多数据库操作
数据库建立关联,(别名数据库要索引)
SELE 2
USE score INDE sno
SELE 1
USE student
SET RELATION TO sno INTO b
disp sno,name,sex,b.english,b.chinese,b.math
两数据库横向连接 (不必索引)
JOIN WITH B TO ST_SCORE FOR SNO=B.SNO
多数据库更新 (目标数据库要索引)
UPDATE ON sno FROM B REPL totalscore WITH;
totalscore+b.english+b.chinese+b.math RANDOM
FoxPro For Windows http://cc.synu.edu.cn 10
FoxPro应试指导
三、表达式
1)书写规范:
+,-,*,/,**,{},[],(),.not.,.end.,.or.,>=,<=
2)+,-:
字符连接符:? how,+”are you!”
“how,-”are you!”
日期运算符:? CTOD(“96/10/24”)+10
? {96/10/24}+10
? Date()+ {96/10/24} ×
3)表达式的一致性:
类型一致,用 STR(),DTOC()等函数转换
姓名 +DTOC(出生年月 )+STR(奖学金 )
4)运算次序,(),**,*,/,+,-,<,<=,>,>=,<>,=
.not.,and.,or.
FoxPro For Windows http://cc.synu.edu.cn 11
FoxPro应试指导
条件表达式例,
if,not,Found() if found()
if recno()>=5 if 英语 <>80
if m/4<>int(m/4) if n/2=int(n/2)
if mod(x,3)=0 if upper(YN)<>?Y?
if,not,优秀 if 出勤
if 性别 =‘女’
case n=?1?
注意:所有符号均为半角英文
FoxPro For Windows http://cc.synu.edu.cn 12
FoxPro应试指导
如何做选择题:
四个答案选其一,往往意思相近,较难分辨,如记忆不
深,概念混淆,容易选错。方法是:
判断准确就正面判断,否则采取排除法。
例 1,USE STUD 例 2,执行 SET EXACT OFF后
INDE ON ZF TO ZF 表达式结果为真的是 ----
FS=192 (A)?数据 ’ =?数据库’
(A)SEEK FS (B)?数据’ = =?数据库’
(B)SEEK &FS (C)?数据库’ =?数据’
(C)FIND FS (D)?数据库’ $?数据’
(D)FIND &FS
FoxPro For Windows http://cc.synu.edu.cn 13
FoxPro应试指导
例 3,设数据库共有五个字段,其中第一个字段是字符型,
宽度是 6;第二个字段是数值型,宽度是 8,小数位为 2;其
余三个字段分别是逻辑型,日期型,备注型,则该数据库
中记录的长度是 _______。
(A)34 ( B)35 (C)33 (D)无法计算
例 4,下列正确的字符型常量是 _____。
(A)'ABC'DF? (B)"123"4DFG
(C)”JI'LK7'8DD” (D)'HKU'E'09E?
例 5,下列表达式中, 运算结果为字符串的是 _______。
(A)"234"+"567"
(B)"ABCD"+"XYZ"="ABCDXTZ"
(C)DTOC(DATE()) >"98/12/11"
(D)CTOD("99/12/10")
FoxPro For Windows http://cc.synu.edu.cn 14
FoxPro应试指导
例 6,下列表达式中,其值为,F.的表达式是 _____。
(A)" ABC" >" ASC",AND.,F.,OR.,NOT,23=60/2
.F.,F.
.F.,T.
.T.
(B).NOT,2* *3< >8,AND," PUT" $" COMP" +" UTER”
.F.
.T.,T.
.T.
(C) " BASIC " = " BAS ",AND," XY " $ " EFG " + "
XY",OR.,NOT.,T.
(D)" BAS" $" FoxBASE",AND."红" $"江小红",AND..F.
.T.,T.
.T.
.F.
FoxPro For Windows http://cc.synu.edu.cn 15
FoxPro应试指导
例 7,设 X=“201”,Y=“2000",其值为逻辑假的表达式是 _____。
(A)X$Y,AND.(X=Y),OR.(" X" $" SJKXY" )
(B)X+Y$" 820120009",AND,X<>Y
(C).NOT,X$Y,AND.,NOT,X=Y
(D).NOT,(.NOT.? Y-X?= " 1799" )
例 8:下列命令中,正确的命令是 _____。
(A)SORT ON 姓名 /C,成绩 /D TO AA
(B)SORT ON 姓名 /C;成绩 /D TO AA
(C)SORT ON 姓名 +出生日期 +成绩 /A TO AA
(D)SORT ON 姓名 ;出生日期 /D;成绩 TO AA
FoxPro For Windows http://cc.synu.edu.cn 16
FoxPro应试指导
例 9:设数据库文件 STUD.DBF中共有 200条记录,执行如下命令序列,
USE STUD
GO 10
DISPLAY ALL
RECNO()
当执行最后一条命令后,屏幕上显示的值是 _____。:
(A)200 (B)201 (C)190 (D)10
例 10:在建立索引文件 XM.IDX时,如果参加索引的字段有?姓名?
(字符型)、?出生日期?(日期型)和?总分?(数值型),
正确的命令是 _____。
(A)INDEX ON 姓名 +出生日期 +总分 TO XM
(B)INDEX ON 姓名,DTOC(出生日期 ),STR(总分 ) TO XM
(C)INDEX ON 姓名,出生日期,总分 TO XM
(D)INDEX ON 姓名 +DTOC(出生日期 )+STR(总分 )TO XM
FoxPro For Windows http://cc.synu.edu.cn 17
FoxPro应试指导
例 11:先用 DIMENSION R(2,3)命令定义数组 R,接着对各数组元素赋
值:
R(1,1)=1,R(1,2)=2,R(1,3)=3;
R(2,1)=4,R(2,2)=5,R(2,3)=6
执行命令?R(3),则显示结果是 _____。
(A)3 (B).T,(C).F,(D)0
例 12:设 X=100,Y=200,G=“X+Y”,表达式 5+&G的值是 ___。
(A)305 (B)503 (C)300 (D)5+"X+Y”
例 13:执行 DTOC(DATE(),1)的值是 _____。
(A)20010523 (B){2001/05/23}
(C)“2001523” (D)2001-05-23
例 14:函数 STR(VAL(“9”)+10.57,AT(“b”,“abcdefg”))返回的值是 ____。
(A)19.57 (B)19.6
(C)20 (D)19
例 15:函数 IIF(LEN(REPLICATE(“*”,4))>6,5,-5) 返回的值是 ____。
(A)-5 (B)5 (C).T,(D).F.
FoxPro For Windows http://cc.synu.edu.cn 18
FoxPro应试指导
如何做阅读程序:
此类试题中通常由?,,DISP提供结果输出,数据库记录
要定位准确;循环结构注意循环条件的修改,循环次数,循
环操作内容;要 注意数据的输出格式与内容 。
例 1,SET TALK OFF 例 2,USE XSK
M=4 INDE ON 性别 TO XB
P=1 TOTAL ON 性别 TO NA1
DO WHIL M>1 USE NA1
P=P+P*M COUNT TO MC
M=M-1? MC &&2
ENDDO SET TALK ON
STR(P,3) RETU
RETU
&&P=1+1*4+5*3+20*2=60
FoxPro For Windows http://cc.synu.edu.cn 19
FoxPro应试指导
例 3,SET TALK OFF
USE GZ2
DO WHILE,NOT.EOF()
HJ=基本工资 +津贴 +奖金
REPLACE 合计 WITH HJ
SKIP
ENDDO
GO TOP
编号
姓名,合计
USE
SET TALK ON
RETURN
**将?换成 DISP格式如何变化? Record# 编号 姓名 合计
1 9901 张三 888
9901 张三 888
FoxPro For Windows http://cc.synu.edu.cn 20
FoxPro应试指导
例 4,SET TALK OFF
A=?2001?
10+&A
SET ALK ON
** 如果??10+&A?输出结果如何?
例 5,***MAIN.PRG
SET TALK OFF **AAA.PRG
SET PROC TO AAA PROC SUB
CLEAR PARA Q
P=600+60 Q=800+80
DO SUB WITH P RETURN
P
RETURN
FoxPro For Windows http://cc.synu.edu.cn 21
FoxPro应试指导
例 6:循环结构注意循环变量的修改,内、外循环的次数 。
SET TALK OFF
DIMENSION A(10)
FOR I=1 TO 10
A(I)=I+1
ENDFOR
FOR I=1 TO 9
FOR J=I+1 TO 10
IF A(I)<A(J)
T=A(I)
A(I)=A(J)
A(J)=T
ENDIF
ENDFOR
A(I)
ENDFOR
A(10)
SET TALK ON
RETURN
A(1)=11
T
A(I) A(J)
A(1)A(2)A(3)A(4)A(5)A(6)…………A(10)
2 3 4 5 6 7 11
11 2 3 4 5 6 10
11 10 2 3 4 5 9
FoxPro For Windows http://cc.synu.edu.cn 22
FoxPro应试指导
[例 7],写出下列程序的运行结果
**P66.8
SET TALK OFF
STORE 0 TO A,B,N
DO WHILE.T.
A=A+1 &&1,2,3,4,5,6,7,8,9,10,11,12
DO CASE
CASE INT(A/3)<>A/3
B=B+A &&B=0+1+2+4+5+7+8+10+11
CASE A>10
EXIT
CASE A<=10
N=N+1 &&N=0+1+1+1
ENDCASE
ENDDO
N,B
RETURN
*程序执行到?命令处,输出的 N和 B的值分别是 ____。
*在 DOS循环中,共循环了 ____次。
FoxPro For Windows http://cc.synu.edu.cn 23
FoxPro应试指导
[例 8],**P66.9
SET TALK OFF
A=4
B=2
C=1
DO WHILE C>0
A=A*B &&A=2*4 8*5 40*40
B=B+A &&B=2+8 5+40 40+1600
IF A>50
A=A-5*C
C=C-1
A,B &&1595 1640
ELSE
STORE B-5*C TO B &&B=5 40
N=B
ENDIF
ENDDO
"N=",N &&40
RETURN
*第一条?命令显示的内容为 ____。
*第二条?命令显示的内容为 ____。
FoxPro For Windows http://cc.synu.edu.cn 24
FoxPro应试指导
例 9:
SET TALK OFF
T=1
S=0
FOR I=1 TO 4
T=T*I &&T=1*1*2*3*4
S=S+T &&S=0+1+2+6+24
ENDFOR
"S=",S &&S=33
SET TALK ON
RETURN
*注意循环次数及循环内容
FoxPro For Windows http://cc.synu.edu.cn 25
FoxPro应试指导
如何做完善程序:
此类题首先搞清题意,即程序要完成的功能,按其要完成
的功能补充完善程序语句。通常要完善的是条件,IF条件,
循环条件,查找条件或是答案唯一的语句,注意命令格式,
空格不可缺,标点符号都为半角。
例:显示 XSK.DBF中男同学的记录。
SET TALK OFF
USE XSK
DO WHIL,NOT,EOF()
IF ————
SET RELA TO SNO INTO A
FoxPro For Windows http://cc.synu.edu.cn 26
FoxPro应试指导
例 1.求自然数 1---100中所有奇数的平方和 。
SET TALK OFF
S=0
FOR I=1 TO 100 ______________
S=S+I*I
ENDFOR
"S=",S
SET TALK ON
RETURN
STEP 2
FoxPro For Windows http://cc.synu.edu.cn 27
FoxPro应试指导
例 2.求二维数组每行的和 。
SET TALK OFF
DIMENSION A(6,5),S(6)
STORE 5 TO A
FOR I=1 TO 6
S(I)=0
FOR J=1 TO 5
S(I)=S(I)+_________ &&A(I,J)
ENDFOR
S(I)
ENDFOR A(1,1) A(1,2)……,A(1,5)
RETURN,
.
A(6,1) A(6,2)…….A(6,5)
FoxPro For Windows http://cc.synu.edu.cn 28
FoxPro应试指导
例 3,显示 ZG.DBF中女职工的记录,
SET TALK OFF
USE ZG
DO WHILE,NOT.EOF()
IF 性别 <>?女 ’
SKIP
LOOP
ENDIF
DISPLAY
__________
ENDDO
USE
SET TALK ON
SKIP
例 4,统计 XSK中女学生人数 。
SET TALK OFF
USE XSK
RS=0
SCAN __________
RS=RS+1
ENDSCAN
'女学生的人数为,'+STR(RS)
USE
SET TALK ON
FOR 性别 =?女 ’
FoxPro For Windows http://cc.synu.edu.cn 29
FoxPro应试指导
例 5,在数据库 ZG.DBF中,找出最高工资额和最低工资额并显示,
SET TALK OFF
USE ZG
_____________
SKIP
DO WHILE,NOT.EOF()
IF 工资 >M
M=工资
ENDIF
IF 工资 <N
N=工资
ENDIF
SKIP
ENDDO
?MAX=?,M,?MIN=?,N
SET TALK ON
STOR 工资 TO M,N
FoxPro For Windows http://cc.synu.edu.cn 30
FoxPro应试指导
如何做程序改错:
首先仔细阅读题意,掌握程序目的,然后通读程序,找出
错误。 写出错误行号 (2),写出改正后的完整语句。
常见错误如下:
。语法错误:?‘总成绩 =?+628
。逻辑错误,N=1
DO WHIL N<100
…….
N=N-1
ENDD
。与题意要求不符:性别为男且工资大于 1000元
IF 性别 =?男 ’ OR 工资 >1000
。 命令动词使用错误 。命令中参数使用错误
。函数使用错误 。表达式使用错误
FoxPro For Windows http://cc.synu.edu.cn 31
FoxPro应试指导
例 1:语法错 (命令动词使用错)
按数据库 GZ1.DBF中出生日期查找记录,
(1) SET TALK OFF
(2) USE GZ1
(3) INDEX ON 出生日期 TO BO
(4) DO WHILE,T.
(5) CLEAR
(6) INPUT ?请输入查找日期,?TO A
(7) FIND A
(8) IF EOF()
(9) EXIT
(10) ENDIF
(11) DISPLAY
(12) ENDDO
(13) USE
(14) SET TALK ON
(7)
SEEK A
FoxPro For Windows http://cc.synu.edu.cn 32
FoxPro应试指导
例 2:逻辑错误, 统计数据库 GZ1中男,女的人数,
(1) SET TALK OFF
(2) USE GZ1
(3) STORE 1 TO A,B
(4) DO WHILE,NOT.EOF()
(5) IF 性别 =?男 ’
(6) A=A+1
(7) ELSE
(8) B=B+1
(9) ENDIF
(10) SKIP
(11) ENDDO
(12)? A,B
(13) USE
(14) RETURN
(3)
STOR 0 TO A,B
FoxPro For Windows http://cc.synu.edu.cn 33
FoxPro应试指导
例 3:与题意要求不符
.从键盘上输入一个字符串后, 统计其中含有几个大写字母 。
(1) SET TALK OFF
(2) M=0
(3) ACCEPT ?请输入一串字符 ’ TO X
(4) N=LEN(X)
(5) FOR I=1 TO N
(6) IF UPPER(SUBSTR(X,I,1))
(7) M=M+1
(8) ENDIF
(9) ENDFOR
(10)? M
(11)RETURN
IF UPPER(SUBSTR(X,I,1))=SUBSTR(X,I,1)
FoxPro For Windows http://cc.synu.edu.cn 34
FoxPro应试指导
例 4:语法错
下面程序用于输出 1----20之间能被 3整除的数的个数及其和 。
(1) SET TALK OFF
(2) N=S=0
(3) I=1
(4) DO WHIL I<=20
(5) IF I/3=INT(I/3)
(6) S=S+I
(7) N=N+1
(8) ENDIF
(9) I=I+1
(10)ENDDO
(11)?N,S
(12)RETURN
STOR 0 TO S,N
FoxPro For Windows http://cc.synu.edu.cn 35
FoxPro应试指导
例 5:逻辑错误
.求 1----N中能同时被 2和 11整除的数的和 。
(1) SET TALK OFF
(2) INPUT "N=" TO N
(3) S=1
(4) I=1
(5) DO WHILE I<=N
(6) IF MOD(I,2)=0,AND,MOD(I,11)=0
(7) S=S+I
(8) ENDIF
(9) I=I+1
(10)ENDDO
(11)? S
(12)RETURN
S=0
FoxPro For Windows http://cc.synu.edu.cn 36
FoxPro应试指导
例 6,函数使用错,对数据库 ZG.DBF实现按姓名快速查询,
(1) SET TALK OFF
(2) USE ZG
(3)INDEX ON 姓名 TO IZG
(4)DO WHILE,T.
(5) ACCETP ?输入姓名,? TO A
(6) SEEK A
(7) IF EOF()
(8)? ?查无此人 !?
(9) ELSE
(10) DISPLAY
(11) ENDIF
(12) WAIT ?是否继续 [Y/N]? TO B
(13) IF UPPER(B)=?n?
(14) EXIT
(15) (15) ENDIF
(16)ENDDO
(17)SET TALK ON
IF UPPER(B)=?N?
FoxPro For Windows http://cc.synu.edu.cn 37
FoxPro应试指导
例 7,表达式使用错,在数据库 XSK中, 查找姓王的同学并显示 。
(1)SET TALK OFF
(2)USE XSK
(3)LOCATE FOR 姓名 ='王 '
(4)DO WHILE,NOT.EOF()
(5)CLEAR
(6)@ 10,10 SAY '姓名,'+姓名
(7)@ 11,10 SAY '性别,'+性别
(8)@ 12,10 SAY ?出生日期,?+出生日期 &&DTOC(出生日期 )
(9)WAIT '按任意键显示下一条记录 '
(10) CONTINUE
(11)ENDDO
(12)USE
(13)SET TALK ON
(14)RETURN
FoxPro For Windows http://cc.synu.edu.cn 38
FoxPro应试指导
成绩优秀