典型程序例题.docx
- 文档编号:24423701
- 上传时间:2023-05-27
- 格式:DOCX
- 页数:23
- 大小:21.71KB
典型程序例题.docx
《典型程序例题.docx》由会员分享,可在线阅读,更多相关《典型程序例题.docx(23页珍藏版)》请在冰豆网上搜索。
典型程序例题
<<省二级考试__VF程序实例>>
应对等级考试笔试和上机程序的程序实例
基本(十一大类):
一、多工作区、Replace、copyto.
二、累加、累乘
三、双重循环:
金字塔问题等
四、排序
五、循环查询:
locate\seek
六、循环插入新记录
七、子程序和参数传递\变量的作用域
八、@行,列say...get...default...
read
字幕问题
九、scatter/gather
十、数组(结合排序)
十一、综合题
*******************************************************************************
一、多工作区、Replace、copyto.
例题1:
涉及setrelationto
有如下表:
(1)XS.DBF(学号C(8),姓名C(8),性别C
(2),班级C(9),出生日期D,走读L)
(2)CJ.DBF(学号C(8),课程名C(20),成绩N(5,1))
说明:
一个学生可以选择多门课程。
请编写一个完整的程序,该程序能完成以下功能:
1、将表XS.DBF和表CJ.DBF建立关联,并显示出所有男同学的姓名以及他们所选课程的课程名
2、将XS.DBF表中所有班级为“2002级2班”的同学信息拷贝到新表STUDENT.DBF中,STUDENT.DBF只含有学号、姓名、性别、走读四个字段
3、将姓名为“王小平”的同学的所有成绩提高10%
CLEAR
CLOSEALL
SELE2
USECJ
INDEXON学号TOXH
SELE1
USEXS
SETRELATIONTO学号INTOB
SETSKIPTOB
LISTFOR性别=’男'FIELDS姓名,B.课程名
COPYTOSTUDENTFOR班级='2002级2班'FIELDS学号,姓名,性别,走读
replaceb.成绩withb.成绩*1.1fora.姓名="王小平"
例题2:
涉及update
下面有两张表:
总分表:
ZF.DBF
学号姓名语文数学总分
110张三
114李四
119王二
成绩表:
CJ.DBF
学号语文数学
1106765
1148967
1197895
按照成绩表的成绩修改总分表的成绩,并计算出总分表的总分字段
参考答案:
CLOSEALL
SELE2
USECJ
INDEXON学号TAGXHCJ
SELE1
USEZF
INDEXON学号TAGXHZF
UPDAON学号FROMBREPL语文WITHB.语文,数学WITHB.数学
REPLALL总分WITH语文+数学
LIST
*******************************************************************************
二、累加、累乘
例1:
累加:
求1~100的和
SUM=0
FORI=1TO100
SUM=SUM+I
ENDFOR
?
’1~100的总和为:
’,SUM
使用DOWHILE实现:
SUM=0
I=1
DOWHILEI<101
SUM=SUM+I
I=I+1
ENDDO
?
’1~100的总和为:
’,SUM
例2:
累乘:
求n!
clear
INPUT"求n!
,请输入n的值:
"TON
MUL=1
FORI=1TOn
MUL=MUL*I
ENDFOR
?
N,’的n!
值为:
’,MUL
例3:
输入n的值,求1+1/2!
+1/3!
+1/4!
+….+1/n!
(阶乘n!
=1*2*3*4....*(n-1)*n)
CLEAR
SUM=_①_
MUL=_②_
INPUT"请输入n的值:
"TON
FORi=1TON
FORj=1TOi
MUL=MUL*__③__
ENDFOR
SUM=SUM+____④_____
ENDFOR
?
'求得的总和为:
',SUM
答案:
1:
02:
13:
j4:
1/mul
注意:
外循环是累加,内循环是累乘
*******************************************************************************
三、双重循环:
金字塔问题等
1、运行XY.PRG程序后,将在屏幕上显示如下乘法表:
1)1
2)24
3)369
4)481216
5)510152025
6)61218243036
7)7142128354249
8)816243240485664
9)91827364554637281
请对下面的程序填空:
***计算乘法XY.PRG***
CLEAR
FORJ=1TO9
?
STR(J,2)+')'
FOR______________
?
?
______________
ENDFOR
?
ENDFOR
RETURN
第一空K=1TOJ第二空STR(J*k,6)
*******************************************************************************
四、排序
输入10个数,将它们从小到大排列
分析:
用i代表趟数,j代表次数
(1)10个数要比较9趟
(2)每趟要比较的次数为:
10-趟数
(3)每次比较:
如果当前数a(j)大于本次比较的最后一个数a(10+1-i)
那么就交换,否则不交换
clear
dimea(10)
?
'输入10个数:
'
fori=1to10
input"请输入:
"toa(i)
endfor
fori=1to9
forj=1to10-i
ifa(j)>a(10-i+1)
t=a(10-i+1)
a(10-i+1)=a(j)
a(j)=t
endif
endfor
endfor
listmemolikea
*******************************************************************************
五、查询:
locate\seek
有下列表:
book(书名C(20),作者C(8),出版日期D,内容简介M)
编写程序:
查询关于foxpro的图书.
USEBOOK
LOCATEFOR‘foxpro’$书名
IF!
FOUND()
?
’没有关于foxpro的图书’
ELSE
DOWHILE!
EOF()
CLEAR
?
书名,作者,出版日期
?
内容介绍
WAIT“是否继续查找?
(Y/N)”TOM
IFM$’nN’
EXIT
ENDIF
CONTINUE
ENDDO
?
”全部显示完成”
ENDIF
注意:
关键地方在于
1、什么地方用locate,什么地方用continue
2、if..exit..endif
3、dowhilenot的条件
使用Locate查找出所有入校总分在580及以上的所有同学信息
clear
use学生
locatefor入校总分>=580
dowhile.not.eof()
disp
continu
enddo
?
'结束'
cancel
*******************************************************************************
六、循环插入新记录
编写程序,对于学生.dbf能够在程序末尾循环插入新记录
CLEAR
CLOSEALL
USE学生
DOWHILE.T.
APPEBLANK
@5,20SAY'学号'GET学号
@5,40SAY'姓名'GET姓名
@7,20SAY'性别'GET性别
@7,30SAY'出生年月'GET出生年月
@9,20SAY'入校总分'GET入校总分
READ
WAIT'你想继续插入新记录吗?
(Y/N):
'TOX
IFX='N'ORX='n'
EXIT
ENDIF
CLEAR
ENDDO
CLEAR
LIST
CLOSEALL
类似:
编写程序,该程序能够顺序修改表学生.DBF中的所有数据。
(要求:
必须使用@行,列say...get..进行数据修改)
CLEAR
CLOSEALL
USE学生
DOWHILE.T.
@5,20SAY'学号'GET学号
@5,40SAY'姓名'GET姓名
@7,20SAY'性别'GET性别
@7,30SAY'出生年月'GET出生年月
@9,20SAY'入校总分'GET入校总分
READ
WAIT'你想继续修改记录吗?
(Y/N):
'TOX
IFX='N'ORX='n'
EXIT
ENDIF
CLEAR
SKIP
ENDDO
CLEAR
LIST
CLOSEALL
*******************************************************************************
七、参数传递\变量的作用域
&&MAIN.PRG&&P1.PRG
X1=1PARAW1,W2
X2=2PRIVATEW1
DOP1WITHX1,X2W1=W1*3
?
’X1=’+STR(X1,1)W2=W2*4
?
?
’X2=’+STR(X2,1)RETURN
X1=1
X2=2
DOP1WITHX1,X1+X2
?
’X1=’+STR(X1,1)
?
?
’X2=’+STR(X2,1)
RETURN
(1)第一次显示X1,X2的值是()
A.1,8B.3,8C.1,1D.8,8
(2)第二次显示X1,X2的值是()
A.1,2B.3,1C.3,2D.1,3
参考答案:
BC
下面看第二个实例:
主程序MCX2.PRG
clea
publici,j
store1toi,j,k
doscx2.prg
?
"主程序的输出结果:
"
?
"i="+str(i,2)+"j="+str(j,2)+"k="+str(k,2)
cancel
子程序scx2.prg
clea
privatej,k
i=i*2
j=j+1
k=j+1
?
"子程序中输出的结果:
"
?
"i="+str(i,2)+"j="+str(j,2)+"k="+str(k,2)
return
执行结果是:
子程序中输出的结果:
i=2j=3k=4
主程序的输出结果:
i=2j=1k=1
*******************************************************************************
八、@行,列say...get...default...
read
字幕问题:
1、有如下程序段,其功能是显示汉字“2008年北京申奥成功!
”
从屏幕的顶部移至底部,请填空补充该程序
CLEAR
CH='2008年北京申奥成功!
'
R=1
DOWHILER<=23
@R,26SAYSPACE(60)
@__________,26SAYCH
T=INKEY(0.2)
_______________
ENDDO
RETURN
答案为:
R+1R=R+1
答案说明:
@R,26SAYSPACE(60)的作用是将上一行显示的'2008年北京申奥成功!
'
清除掉,然后@R+1,26SAYCH显示新一行的数据
R=R+1是保证dowhile不是死循环
*******************************************************************************
九、scatter/gather(本节选用的表是学生.dbf)
掌握:
1、scatter是将一条记录的值copy到一个数组中。
(对应一维数组)
2、scatter使用数组都可以不先定义,大小系统自己搞定
3、如果事先定义了的话,scatter会自动扩展大小
请大家阅读下面两个例题体会:
例1:
将"江冰"同学的名字修改成"姜冰"
clear
use学生
locatefor姓名="江冰"
iffound()
scattertox&&思考:
数组X应该有多少个单元?
?
listmemolikex&&显示数组X的单元和值
x
(2)="江冰"
gatherfromx
wait
clear
list
else
?
"对不起,没有江冰这个人"
endif
closeall
思考答案:
6个,那个备注型和通用型不算.
当然,上个题改为下例也对:
clear
use学生
locatefor姓名="江冰"
dimex(4)&&先定义数组X有4个单元
iffound()
scattertox&&思考:
数组X应该有多少个单元?
?
listmemolikex&&显示数组X的单元和值
x
(2)="江冰"
gatherfromx
wait
clear
list
else
?
"对不起,没有江冰这个人"
endif
closeall
思考答案:
也是6个,那个备注型和通用型不算,虽然定义了四个,但是会自动扩展
*******************************************************************************
十、数组
1、数组的定义
DIMENTION数组名(数值表达式1,[数组表达式2...])
定义后单元默认值为.F.
2、一维数组
(1)、定义一个一维数组:
dimea(10)---定义一个10数组,且所有单元默认值为.F.
(2)、赋值:
例如:
a=''
a
(1)=20
a(3)={^2002/09/23}
a(7)=.T.
....
循环赋值:
dimea(10)
i=1
dowhilei<=10
input'请输入数:
'toa(i)
i=i+1
enddo
或者是:
fori=1to10
input'请输入数:
'toa(i)
endfor
(3)、显示值:
fori=1to10
?
a(i)
endfor
使用dowhile大家思考
方法2:
listmemolikea
3、二维数组
例如:
dimes(5,4)
(1)、赋值:
例如:
s=0
s(3,4)=.t.
s(12)='xixi'.....相当于s(3,4)='xixi'
(2)、循环赋值
fori=1to5
forj=1to4
input'输入值:
'toa(i,j)
endfor
endfor
(3)、显示值:
fori=1to5
forj=1to4
?
?
a(i,j)+space
(2)
endfor
endfor
*******************************************************************************
十一、综合题
例1:
数据表JY.DBF的内容如下:
Record#借书证号借书日期
1001002/01/99
2000705/04/99
3000602/03/99
4001005/17/99
数据表JYR.DBF的内容如下:
Record#借书证号姓名职称
10006孟小梅教授
20010郑财勇讲师
30007王志军助教
且:
JYR库以借书证号为关键字建立了索引,索引文件为JYR.IDX
程序如下:
SELECT1
USEJYRINDEXJYR
SELECT2
USEJY
SETDEVICETOPRINT
&&注意:
有了这句话下面显示的结果都会发送到打印机
H=1
DOWHILE.NOT.EOF()
TS=DATE()-借书日期
IFTS>80
SELECT1
SEEKB.借书证号
IFTS>100.OR.职称<>’教授’
@H,4SAY姓名+’同志,您借的书已过期,请归还’
H=H+1
ENDIF
SELECT2
ENDIF
SKIP
ENDDO
SETDEVICETOSCREEN
RETURN
(1)设当前系统日期为06/15/99,程序将打印()还书的信息
A.孟小梅、郑财勇各一行B.孟小梅一行、郑财勇两行
C.孟、郑、王各一行D.孟、郑、王三人共五行
参考答案:
A
(2)高级职称和其它职称借书的最多天数分别是()
A.81天,101天B.100天,80天C.80天,100天D.101天,81天
参考答案:
B
(3)本程序的功能是:
()
A.查询接书证号B.查询借书日期
C.书未还书者D.查询并打印超期未还书者
参考答案:
D
例2:
CLEAR
OPENDATABASEemplorer
USEcompen
SCANFORRECNO()<=10
IF姓名=’李强’
LOOP
ENDIF
?
姓名,实发工资
ENDSCAN
USE
CLOSEDATABASE
(1)compen是:
()
A.自由表B.数据库表 C.数据库
D.可能是自由表,也可能是数据库表
答案是D
(2)若数据库有50条记录,则程序的功能是:
()
A.前10条记录中搜索“李强”的记录B.列出前10条记录
C.每10条记录一屏显示记录,但不显示“李强”的记录
D.列出前10条记录,但是不显示“李强”的记录
答案是D
(3)循环结束后,指针指向()
A.第1条B.最后一条C.第10条D.最后1条记录加1
答案是D请注意:
scan循环是从第一条做到最后一条,然后在根据for
条件选择处理哪些记录.循环完成后一定EOF()为.t.
另外:
注意区分exit和loop的作用是:
exit退出循环,loop只是结束本次循环
请不能区分的同学下来再问.
请大家注意:
Scan的使用方法,考试很可能要涉及到的
这儿也给大家举例比较一下三种循环操作表:
三种方法实现显示出全部的男生。
------------------------------
使用DOWHILE循环:
CLEAR
CLOSEALL
USE学生
DOWHILENOTEOF()
IF性别=’男’
DISP
ENDIF
SKIP
ENDDO
CLOSEALL
------------------------------
使用FOR循环:
CLEAR
CLOSEALL
USE学生
COUNTTOX
GOTOP
FORI=1TOX
IF性别=’男’
DISP
ENDIF
SKIP
ENDFOR
CLOSEALL
------------------------------
使用SCAN循环:
CLEAR
CLOSEALL
USE学生
SCANFOR性别=’男’
DISP
ENDSCAN
CLOSEALL
------------------------------
例3:
1、
CLEAR
M=0
FORX=1TO10
IFMOD(X,3)=0
M=M+X
ENDIF
ENDFOR
?
M
RETURN
(1)该程序的功能是:
求1到10之间()
A.能被3整除数的个数B.能被3整除数的和
C.不能被3整除数的个数D.不能被3整除数的和
答案是:
B
(2)该程序执行的结果是:
()
A.3B.10C.18D.37
答案是:
C
上机考试程序部分说明
1)注意题目要求是一个完整程序,不要写题号1、2、3之类
2)如果题目涉及到表的操作,请第一条命令可以先发
closeall
clear
最后条命令请书写:
closeall
return
3)注意检查是否存盘到了指定的位置,是否是在项目中建立的程序
请大家参考上机程序部分的题目和参考答案。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 典型 程序 例题