s=0 t=0 d=3
for i=1 to 5
t=t+d
s=s+1/t
d=d*10 endf
out=s
? Out
********** End **********
DO YZJ WITH OUT
SET LOGERRORS OFF
SET TALK OFF
*------------------------------------------------------*
【程序设计】 *------------------------------------------------------*题目:编程求 sum=3-33+333-3333+33333 的值。 * 要求使用 for...endfor 语句来完成。 * 将结果存入变量 OUT 中。 * 请按照题目要求,在下面编写程序代码。 *------------------------------------------------------
SET TALK ON
SET LOGERRORS ON
OUT=-1
**********Program********** s=0
t=0 d=3
for i=1 to 5
t=t+d
s=s+t*(-1)^(i+1)
d=d*10 endf
out=s
? Out
********** End **********
DO YZJ WITH OUT
SET LOGERRORS OFF
SET TALK OFF
*------------------------------------------------------*
【程序设计】 *------------------------------------------------------*题目:编程求 P=1-1/(2×2)+1/(3×3)-1/(4×4)+1/(5×5)。 * 将结果存入变量 OUT 中,要求用 Do While 语句实现。 *------------------------------------------------------
SET TALK ON
SET LOGERRORS ON
OUT=-1
**********Program********** P=0 M=1
I=0
DO WHILE M<=5
P=P+((-1)^(M+1))/(M*M)
M=M+1
ENDDO
?\
OUT=P
********** End **********
DO YZJ WITH OUT
SET LOGERRORS OFF
SET TALK OFF
*------------------------------------------------------*
【程序设计】 *------------------------------------------------------- *题目:编程计算正整数 num 的各位上的数字之积。 * 例如,若输入:252,则输出应该是:20。 * 将结果存入变量 OUT 中,要求用 Do While 语句实现。 * 请按照题目要求,在下面编写程序代码。 *------------------------------------------------------
SET TALK ON
SET LOGERRORS ON
?\输入正整数 num=434\
num=434
OUT=-1
**********Program********** s=1
do while num<>0
s=s*(num)
num=int(num/10)
endd
out=s
? Out
********** End **********
DO YZJ WITH OUT
SET LOGERRORS OFF
SET TALK OFF
三.多表改错 *------------------------------------------------------*
【程序改错】 *------------------------------------------------------*题目:给定程序 MODI1.PRG 的功能是:选择最小号空闲区,若最小 * 号空闲区号大于 1, 说明系统当前已有工作区被占用,在这种 * 情况下,测试最小号空闲工作区的前一个工作区打开的数据 * 库文件名,该数据库的字段数和记录数。注:假设字段数和 * 记录数均小于 10。 *------------------------------------------------------*注意:不可以增加或删除程序行,也不可以更改程序的结构。 *------------------------------------------------------SET TALK OFF SELECT 1 USE DB2 SELECT 2 USE DB1 ***********FOUND********** select 0 A=SELECT() ?A WAIT IF A>1 SELECT (A-1) FILENAME=ALIAS() ***********FOUND********** FNUM = FCOUNT() ***********FOUND********** COUNT TO RECNUM CLEAR @ 6,6 SAY \在\区中已经打开了:\该数据库中的字段数是:\该数据库中的记录数是:\+ STR(RECNUM,1) ENDIF CLOSE DATA SET TALK ON RETURN *------------------------------------------------------*
【程序改错】 *------------------------------------------------------*题目:已有员工数据库 YG.DBF 和工资数据库 GZ.DBF。 * 给定 MODI.PRG 程序的功能是根据用户输入的岗位查询相应 * 的岗位工资、教学津贴和科研津贴,并显示聘任为该岗位 * 的人员情况。 *------------------------------------------------------*注意:不可以增加或删除程序行,也不可以更改程序的结构。 *------------------------------------------------------SET TALK OFF SET SAFETY OFF AN=\SELECT 0 USE GZ INDEX ON 雇员号 TO GZ1 SELECT 0 USE YG ***********FOUND********** SET RELA TO 雇员号 INTO GZ DO WHILE UPPER(AN)=\教授\请输入岗位:\GW ***********FOUND********** LOCA FOR 岗位=GW IF !FOUND() ? \没有此岗位!\岗位,GZ->岗位工资,GZ->教学津贴,GZ->科研津贴 LIST OFF 姓名,性别,职称,岗位 FOR 岗位
=GW ENDIF ***********FOUND********** WAIT \是否继续?\再见!\DATABASE SET TALK ON RETURN *------------------------------------------------------*
【程序改错】 *------------------------------------------------------*题目:有如下数据库文件: * ZY.DBF:职员号 N(3,0),姓名 C(6),性别 C(2),职务 C(10); * DD.DBF:订单号 N(3,0),客户号 N(3,0),职员号 N(3,0), * 签订日期 D(8),金额 N(6,2)。 * 给定程序 MODI1.PRG 的功能是:根据客户号查询该客户的有关 * 订单信息,结果按订单金额降序排序,并显示这些定单的总金额。 * 修改并调试该程序,使之正确运行。 *------------------------------------------------------*注意:不可以增加或删除程序行,也不可以更改程序的结构。 *------------------------------------------------------SET TALK OFF SET SAFETY OFF SELECT 1 USE zy INDEX ON 职员号 TO zyi SELECT 2 USE dd INDEX ON -金额 TO ddi
***********FOUND********** SET RELA TO 职员号 INTO A DO WHILE .T. CLEAR KH=202 ? \请输入客户号:\客户号=kh ***********FOUND********** IF EOF() ? \没有该客户!\订单号\职 员\签订日期\金 额\STR(订单号,3)+SPACE(5)+A->姓名+SPACE(5)+DTOC(签订日期)+\金额,6,2) ***********FOUND********** s=S+金额 CONTINUE ENDDO ? ? \总金额为:\ENDIF ? WAIT \继续查询吗(Y/N)?\p IF !UPPER(p)=\EXIT ENDIF ENDDO CLOSE DATA SET SAFETY ON SET TALK ON *------------------------------------------------------*
【程序改错】 *------------------------------------------------------*题目:有如下数据库文件: * ZY.DBF:职员号 N(3,0),姓名 C(6),性别 C(2),职务 C(10); * KH.DBF:客户号 N(3,0),客户名 C(30),地址 C(30),电话 C(13); * DD.DBF:订单号 N(3,0),客户号 N(3,0),职员号 N(3,0), * 签订日期 D(8),金额 N(6,2)。 * 给定程序 MODI1.PRG 的功能是:根据职员姓名查询该职员签订的 * 有关订单信息。修改并调试该程序,使之正确运行。 *------------------------------------------------------*注意:不可以增加或删除程序行,也不可以更改程序的结构。 *------------------------------------------------------SET TALK OFF SET SAFETY OFF SELECT 1 USE zy SELECT 2 USE kh INDEX ON 客户号 TO khi SELECT 3 USE dd SET RELATION TO 客户号 INTO B INDEX ON 职员号 TO ddi DO WHILE .T. CLEAR XM=\王武\请输入职员姓名:\,XM SELECT 1 LOCATE FOR 姓名=xm IF EOF() ? \没有该职员!\ELSE ? \订单号\客户名\签订日期\金 额\职员号:\职员号 zyh=职员号 SELECT 3 SEEK zyh ***********FOUND********** DO WHIL .NOT .EOF().AND.职员号=zyh ? STR(订单号,3)+SPACE(5)+KH->客户名+\签订日期)+\金额,6,2) n=n+1 ***********FOUND********** SKIP ENDDO ? ? \共\张订单\继续查询吗(Y/N)?\ON *------------------------------------------------------*
【程序改错】 *------------------------------------------------------*题目:已有某学校某班的语文课成绩文件 YWCJ.DBF 和平均成绩 * 文件 PJCJ.DBF,其中 PJCJ.DBF 文件为空。 * 请编写 MODI1.PRG 程序:计算每名学生的平均成绩,并 * 填入到 YWCJ.DBF 相应字段中。然后将平均成绩低于全班 * 平均成绩的学生的学号和平均成绩存入 PJCJ.DBF 文件中。 * 要求 PJCJ.DBF 中各记录按学号升序排序。 *注:每名学生平均成绩=作文×40%+语法×30%+阅读×30% *------------------------------------------------------*注意:不可以增加或删除程序行,也不可以更改程序的结构。 *------------------------------------------------------SET TALK OFF SET SAFETY OFF sele