版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1第5章结构化程序设计
5.1程序文件的建立与修改5.2简单的交互式输入/输出命令5.3程序的基本结构
5.4程序的模块化5.5程序调试2
VFP是一种高级语言,它提供了三种工作方式:交互方式、程序方式和菜单方式。前面所学的命令就是交互式,本章介绍程序执行方式。3
程序是指能够完成特定任务的命令序列。这些命令序列以文件形式存入磁盘,这个文件称为程序文件或命令文件,其扩展名为.prg。45.1程序文件的建立与修改
5.1.1程序的创建
在VFP中,创建程序可以使用菜单方式或命令方式。51.菜单方式①选择“文件”菜单下的“新建(N…)”,或单击工具栏中的“新建”按钮,或者直接按热键“Ctrl+N”,打开“新建”对话框;②在“新建”对话框中选择“程序”,再单击“新建文件”按钮,弹出程序编辑窗口;③在程序编辑窗口中录入程序内容;④程序录入完毕,按Ctrl+W保存文件,并关闭程序编辑窗口,返回VFP主窗口。62.命令方式格式:MODIFYCOMMAND[〈文件名〉]功能:打开一个程序编辑窗口,建立或修改程序文件。说明:〈文件名〉缺省,则新建的程序文件默认文件名为程序1、程序2、……,如图5-1所示。7图5-1缺省文件名的命令方式打开的程序编辑窗口85.1.2程序的编辑及运行1.程序的打开及编辑我们通常用如下方法打开程序文件并进行编辑修改:
(1)菜单方式
(2)命令方式9(1)菜单方式选择“文件”菜单下的“打开(O…)”,或单击工具栏中的“打开”按钮,或者直接按快捷键“Ctrl+O”,打开“打开”对话框。在文件类型一栏选择“程序*.prg;*.spr;*.mpr;*.qpr)”,再从查找范围中找到相关文件名,单击选中,最后单击“确定”按钮即可。在打开的程序编辑窗口可对源程序进行修改。10(2)命令方式直接用MODIFYCOMMAND〈文件名〉,即可打开相关文件进行编辑修改。注:VFP程序是命令行的序列,每条命令都必须以回车键结尾,一行只能写一条命令,若一条命令很长需分行写时,分行处要添加续行符“;”。112.程序运行
程序编辑修改后,最好先保存。保存后便需要运行来验证结果。运行程序的方法通常有以下几种:
(1)菜单方式(2)命令方式12(1)菜单方式: 选择“程序”菜单下的“运行”(或按快捷键Ctrl+D),弹出“运行”对话框;
(2)命令方式 格式:DO<程序文件名> 功能:执行指定文件名的程序。13注:①<程序文件名>可以包含路径、程序文件的扩展名。缺省路径为当前文件夹。②程序编辑窗口为当前活动窗口时,执行程序也可使用工具栏中的“!”工具按钮或按快捷键“Ctrl+E”。14例5-1:通过键盘输入两个数,计算两个数的乘积,并输出计算结果。分析:按题示,步骤如下:操作:*MODICOMMEX5-1.PRGSETTALKOFFINPUT[输入数A:]TOAINPUT[输入数B:]TOB?A*BSETTALKONRETURN存盘:Ctrl+W开始求积:结束A*B?A*B输入两个数输出结果:A、B15补充:1.显示xs.dbf中在1985年以后出生的记录。2.显示xs.dbf中所有是党员的记录。DISPLAYFOR出生年月>{1985/12/31}LISTFOR党员否党员否或:DISPLAYFORyear(出生年月)>1985165.1程序文件的建立与修改5.2简单的交互式输入/输出命令5.3程序的基本结构
5.4程序的模块化5.5程序调试175.2简单的交互式输入/输出命令
1.非格式化输入命令1)WAIT命令(输入单个字符语句)
WAIT[<提示信息>][TO<内存变量>][WINDOW][TIMEOUT<数值表达式>]作用:接收通过键盘输入的一个字符,保存到指定的内存变量。注:缺省<提示信息>,屏幕显示:“按任意键继续…”
18
2)ACCEPT命令(输入字符串语句)
ACCEPT
[<提示信息>]TO<内存变量>
3)INPUT命令(输入任意型数据)
INPUT[<提示信息>]TO<内存变量>
作用:接收通过键盘输入的数据,保存到指定的内存变量。操作19注:
ACCEPT命令只能接收字符型数据,不需加定界符引号或方括号,输入完成后按回车;
INPUT命令可以接收N型,C型,D型,L型,除N型外,其他各型均要用定界符括起;
WAIT命令只能接收一个字符,且不需按回车。202.非格式化输出命令1)?命令?[<表达式表>]计算表达式的值,并把表达式的值在当前行的下一行的首位输出.2)??命令??[<表达式表>]计算表达式的值,并把表达式的值在当前行的当前光标位置输出.
213)文本输出语句TEXT<文本内容>ENDTEXT功能:将〈文本内容〉原样输出。说明:TEXT和ENDTEXT各独占一行,且必须成对使用。223.格式化输入/输出命令(1)简单的格式输出命令
@<行,列>SAY<表达式>例如:输出计算机的系统日期命令为:@10,30SAY"今天日期是:"+DTOC(DATE())假如今天日期是2012年1月4日,命令执行后,结果如图5-2所示:23图5-2格式输出示例24(2)简单的格式输入命令
@<行,列>[SAY<表达式>]GET<变量>
[READ]25例5-2:利用@…GET…READ语句修改XS表的当前记录。*EX5-2.PRGSETTALKOFFCLEARUSEXS@3,15SAY"学号:"GET学号@3,33SAY"姓名:"GET姓名@5,15SAY"出生日期:"GET出生日期@5,39SAY"专业:"GET专业@7,15SAY"班级:"GET班级READUSESETTALKON
思考:若要修改指定某一条记录,对该程序作何修改?265.2.2常用的程序辅助命令
1.注释命令:
行首注释:NOTE/*<注释内容>行尾注释:&&<注释内容>272.中止命令
⑴CANCEL
结束程序运行,清除内存变量,返回命令窗口
⑵QUIT
结束程序运行,返回WINDOWS⑶SUSPEND 暂停程序执行,返回命令窗口。输入 RESUME继续执行28⑷
RETURN[TOMASTER/TO<文件名>]结束一个程序或自定义函数返回调用程序或命令窗口.293.状态设置命令
设置会话状态命令
SETTALKON/Off
打开/关闭人机对话框,有些命令(AVERAGE,SUM等)在执行时会返回一些有关执行状态的信息。304.清屏命令(1)CLEAR清除VFP主窗口或当前窗口信息。(2)@<行1,列1>[CLEAR[TO<行2,列2>]]
清除一个矩形区域。315.1程序文件的建立与修改5.2简单的交互式输入/输出命令5.3程序的基本结构
5.4程序的模块化5.5程序调试325.3.1顺序结构一、结构化程序的基本结构
VFP是一种结构化的程序设计语言,它有三种基本结构:顺序结构、分支结构、循环结构
⑴顺序结构
按语句出现的先后顺序执行。AB入口入口出口出口33⑵分支结构
根据条件真假,选择两个或多个分支中的一个分支来执行。条件B1B2BA真假入口出口入口出口34⑶循环结构
根据条件真假,重复执行一个语句块。
条件B真假B真条件入口入口出口出口35二、结构化程序设计的特点
1、只有一个入口;2、只有一个出口;3、无死语句;4、无死循环。三、结构化程序设计的方法
1、自顶向下;2、逐步求精;3、模块化。四.面向对象的程序设计技术
VFP提供了面向过程和面向对象的程序设计方法36五.VFP程序设计的步骤分析任务、提出解决问题的办法数据库设计编制程序流程图编制程序运行调试编制说明文档系统维护常用流程图符号375.3.2分支结构
条件B1B2BA真假1.单向分支/双向分支(1)命令格式:
IF<条件表达式><命令序列B1>[ELSE<命令序列B2>]
ENDIF38(2)执行方法:
在两个命令序列中选择一个执行,即如果条件成立,执行IF-ELSE之间的命令序列B1,然后执行ENDIF后面的命令;如果条件不成立,执行ELSE-ENDIF之间的命令序列B2,再执行ENDIF后面的命令。
39
如果没有ELSE之后的命令序列B2,这就是单向分支语句,那么条件不成立时,则直接跳转到ENDIF后面的语句执行。40例5-3:用键盘输入学号,在XS.DBF中查找指定学号的记录,找到则显示该记录;否则不作任何操作。*MODICOMMEX5-3.PRGSETTALKOFFCLEARACCEPT"请输入学号:"TOXUSEXSLOCATEFOR学号=XIFFOUND()DISPENDIFUSERETU
开始打开数据表XSDA结束查找与输入学号相同的记录真输入学号:显示该记录思考:如何表示找到记录?分析:找到吗?假FOUND()41几点说明a.IF----ENDIF要成对出现b.ENDIF要独占一行c.不论条件成立与否ENDIF之后的语句总是要执行的。42例5-4:已知A、B、C,求解一元二次方程:
AX2+BX+C=0(A≠0)的实根,并显示;若没有实根,则显示“方程无实根!".分析:通过键盘输入系数A、B、C,当B2-4AC
0时,方程有实根。设:D=B*B-4*A*CX1,2=(-B±SQRT(D))/(2*A)开始结束真输入系数A,B,C显示两个根D0?假计算D:D=B*B-4*A*C计算两个根显示‘方程无实根’43*程序名:EX5-4.PRGSETTALKOFFCLEARINPUT'A='TOAINPUT'B='TOBINPUT'C='TOCD=B*B-4*A*CIFD>=0X1=(-B+SQRT(D))/(2*A)X2=(-B-SQRT(D))/(2*A)?"X1=",X1,"X2=",X2ELSE?'方程无实根!'ENDIFSETTALKONCANCEL操作44练习:
程序填空。下面是对XS.DBF中已知学号的记录作删除标记的程序:SETTALKOFFACCEPT"输入待删除学生的学号:"TOXUSEXS(1)1)A)FINDXB)SEEKXIF(2)C)LOCATEXD)LOCATEFOR学号=XDELETEENDIFUSE2)A)EOF()B)NOTEOF()RETURNC)EOF()=.T.D)EOF()=.F.DB或D45问题:上述IF语句可以完成对于两种情况的选择,如果有多种情况,如何处理?462.IF语句的嵌套嵌套:是指在一个结构中包含另一个结构。如:IF语句嵌套是在IF-ENDIF结构中包含IF-ENDIF结构。格式:IF<条件1>
…ELSE…IF<条件2>…ELSE…ENDIF…ENDIF
47注:①在IF语句嵌套中,要正确划分IF与 ENDIF结构。 ②第一个ENDIF总与离它最近的IF语句 匹配。48例5-5:求个人所得税公民收入在3000元到6000元(含6000元)的税率为20%,6000元到9000元(含9000元)的税率为30%,9000元以上为40%,低于3000元(含3000元)的不纳税。49分析:可分为4种情况:收入税率0~300003000~600020%6000~900030%9000以上40%用SR表示收入,ZS表示所得税。思考:怎样计算所得税?所得税ZS=SR*税率50开始结束真输入个人收入显示个人所得税分析:SR>9000?假计算所得税ZS=SR*0.4真SR>6000?假计算所得税ZS=SR*0.3真SR>3000?假计算所得税ZS=SR*0.2计算所得税:ZS=SR*051
SETTALKOFF&&程序EX5-5.PRGINPUT‘请输入收入情况:’TOSRIFSR>9000ZS=SR*0.4ELSEIFSR>6000ZS=SR*0.3ELSEIFSR>3000ZS=SR*0.2ELSEZS=0ENDIFENDIFENDIF?’应征税为:‘,ZSRETU<-9000以上
<-6000~9000<-3000~6000<-0~3000操作52几点说明a.IF--ELSE—ENDIF三者要匹配b.ELSE,ENDIF要独占一行c.ENDIF总是离与它最近的IF语句匹配。53
2.多向分支
多向分支语句,即根据多个条件表达式的值,选择执行多个操作中的一个对应执行。
54(1)语句格式:
DOCASECASE〈条件表达式1〉〈命令行序列1〉
[CASE〈条件表达式2〉〈命令行序列2〉……CASE〈条件表达式N〉〈命令行序列N〉][OTHERWISE〈命令行序列N+1〉]
ENDCASE
B2BnB情况1其他条件1条件2条件n情况2……情况nNNYB155在情况分支语句中,有多组序列,根据条件的具体情况选择一组命令序列来执行。该命令按顺序检测条件表达式的值,一旦某个条件表达式的值为真,则相应的命令序列被执行,然后DOCASE语句结束,转到ENDCASE之后的语句执行。56注:DOCASE与第一个CASE之间的语句没有作用!例5-6:修改计算所得税之例(程序EX5-6.PRG)。
SETTALKOFFINPUT‘请输入个人收入(单位:元):’TOSRDOCASECASESR<=3000ZS=0CASESR<6000ZS=SR*0.2CASESR<=9000ZS=SR*0.3OTHERWISEZS=SR*0.4ENDCASE?“应交所得税:”,ZS,“元”RETU操作57例5-7:编程能对CJ.DBF显示菜单,并做如下操作:
1.追加2.浏览3.插入4.删除5.退出
程序EX5-7.PRG如下:
SETTALKOFFUSECJTEXT1.追加2.浏览3.插入 4.删除
5.退出
ENDTEXT58ACCEPT‘请输入选择(1-5):’TOCHDOCASECASECH=‘1’APPENDCASECH=‘2’BROWSECASECH=‘3’INPUT‘请输入记录号:’TONUMGONUMINSERTCASECH=‘4’INPUT‘请输入记录号:’TONUMGONUMDELETECASECH=‘5’?‘结束,再见!’
CANCELOTHERWISE?‘选择有错!’ENDCASE操作59作业与上机1.上机运行调试本节例题及补充例题2.输入X值,编程计算Y:
|x|
x<0
√x0<=x<1y=X/21<=x<3
取X的整数部分x>=3605.3.3循环结构
输出如下图形****SETTALKOFFCLEA?”*”?”*”?”*”?”*”RETUSETTALKOFFCLEAI=1DOWHILEI<=4 ?”*” I=I+1ENDDORETU61
凡需要重复做的工作,在计算机中都可用循环结构程序来实现.FOXPRO提供三条语句支持循环结构程序设计:
1.DOWHILE--ENDDO循环与分支的嵌套循环与循环的嵌套
2.FOR--ENDFOR
3.SCAN--ENDSCAN621.当循环DOWHILE–ENDDO格式:
DOWHILE<条件表达式><语句序列>ENDDO条件B真假B真条件63 执行过程:该语句先测试WHILE后面的表达式,如果条件为真,则重复执行DOWHILE–ENDDO之间的命令序列(循环体);如果条件为假则转到ENDDO之后的命令继续执行。注:为使程序能退出循环,在循环过程中必须修改循环条件的值,否则将变成死循环。64SETTALKOFFCLEARUSEXSDADOWHILENOTEOF()
DISPWAITSKIPENDDORETU操作例5-8:逐一显示XS.DBF中的每条记录。(程序EX5-8.PRG)65
Settalkoffx=0s=0dowhilex<100x=x+1s=s+xenddo?sRETURN操作例5-9:计算1+2+3…+100的和。66问题:条件能不能写成x<=100?若要写成x<=100,例5-9程序该如何修改?67程序修改如下:
SETTALKOFFX=1S=0DOWHILEX<=100S=S+XX=X+1ENDDO?SRETURN68
例5-10:根据键盘输入的姓名,在XS中快速查找,若找到则显示其信息,否则显示“查无此人!”,完成后输入Y继续查找,输入N退出。69USEXSINDEXON姓名tagxmDOWHILE.T.ACCEPT“请输入姓名:”TOXMseekxm
iffound()disp
else?’查无此人!’
endifWAIT‘是否继续查找(Y/N)?’TOX
IFUPPER(X)=‘N’
EXIT
ENDIFENDDOReturn70*2程序名:LX2.PRGSETTALKOFFSETSTATUSOFFCLEARS=0T=1N=1DOWHILEN<=20T=T*NS=S+TN=N+1ENDDO?"S=",SSETSTATUSONSETTALKONCANCEL上机练习:1.计算:1*2*3*…*1002.计算1+2!+3!+...+20!71二)循环和分支的嵌套:
循环语句可以和分支语句嵌套,形成较为复杂的程序结构。721)循环短路命令:LOOP功能:返回循环结构的起始处。2)退出命令:EXIT
功能:退出循环结构,转向执行ENDDO之后的命令。注:①LOOP与EXIT在DOWHILE–ENDDO中使用,可以放在循环结构的任何位置。②LOOP通常与分支结构一起使用。73
settalkoffclearx=1y=20dowhilex<=yifint(x/2)<>x/2x=1+x^2y=y+1loopelsex=x+1endifEnddo?’x=‘,x,’y=‘,y答案:X=122Y=23操作例5-11:写出程序运行后X,Y的值。74
settalkoffstore0tom,ndowhile.t.n=n+2docasecaseint(n/3)*3=nloopcasen>10exitotherwisem=m+nendcaseenddo?‘m=’,m,‘n=’,n
答案:M=24N=14操作例5-12:写出程序运行后M,N的值.75三)循环常用的控制方式格式1:USE<表文件名>
DOWHILENOTEOF()<命令序列>
SKIPENDDO(1)对数据表记录操作时的控制:76格式2:USE<表文件名>
LOCATEFOR<条件>DOWHILENOTEOF()<命令序列>
CONTINUEENDDO77(2)有限次循环的控制格式1:加法循环
K=0
DOWHILEK<a
<命令序列>
K=K+1ENDDO格式2:减法循环
K=a
DOWHILEK>0
<命令序列>
K=K-1ENDDO注:a为自然数78(3)无限次循环的控制格式1:DOWHILE.T.
<命令序列>
IF<条件表达式>
EXITENDIF
...ENDDO格式2:DOWHILE.T.<命令序列>DOCASECASE<条件表达式1>
EXITCASE<条件表达式2>...ENDCASE...ENDDO79四)循环的嵌套
IF语句可以和自身嵌套,DO–WHILE语句可以和IF-ENDIF语句嵌套,同样,DOWHILE语句自身也可以嵌套,形成更为复杂的程序结构。
DOWHILE<>第<…>第DOWHILE<><…>一二第DOWHILE<>
三<…>层ENDDO层ENDDO层ENDDO80在循环的嵌套时,要注意循环语句在执行的顺序,一般来说,在一次循环中,遵循先内层循环,后外层循环的顺序。81例5-13:打印乘法口诀表。
分析:乘法口诀表的式子如下:1╳1=1它由两个乘数和一个积组成。在运行时,这三个量都在变,即需要三个变量。两个乘数要做+1的操作,这个操作对两个乘数来说不同步,所以一个循环无法解决这个问题,只有用循环嵌套。同时考虑到乘法口诀表为三角形,所以还要对循环条件加以限制。82
SETTALKOFFCLEARA=1DOWHILEA<=9B=1DOWHILEB<=AP=A*B??STR(A,1)+'╳'+STR(B,1)+'='+STR(P,2)+''B=B+1ENDDO?A=A+1ENDDO操作控制输出行数控制B行输出式子的个数83例5-14:求3~100的素数.
这个例子是经典的循环嵌套的例子。所谓素数就是除了1和它本身之外,再也没有可以被它整除的整数的整数。而可以整除的数最大的取值范围为2~M/2.同时,有这样一个性质,即除了2之外的所有素数都是奇数。有了这样两个性质,我们可以减少程序的循环执行次数。84
SETTALKOFFM=3DOWHILEM<=100I=2N=INT(M/2)DOWHILEI<=N
IFMOD(M,I)=0EXITENDIFI=I+1ENDDOIFI>N?M,'是素数'
ENDIFM=M+1ENDDO判断M是否能被I整除,是退出,否继续判断M是否为素数
确定判断素数范围
定义除数初值
定义除数终值范围操作思考:若要每输出10个数后暂停,当按任意键时,继续显示,应怎样修改该程序?SETTALKOFFM=2F=ODOWHILEM<=100I=2N=SQRT(M)
&&INT(M/2),M-1DOWHILEI<=NIFMOD(M,I)=0EXITENDIFI=I+1ENDDOIFI>N?M,‘是素数’
F=F+1
ENDIFIFF=10WAIT‘按任意键继续’
F=0
ENDIFM=M+1ENDDO85y=""i=2input"请输入一个整数:"tozsdowhili<=zsifmod(zs,i)<>0i=i+1loopelsey=y+"*"+str(i)zs=zs/iifzs=1?"y="+yendifendifenddoretu例5-15:输入一个整数,分解成质因数之积,并输出其式子。操作86SETTALKOFFDIMENSIONK(2,3)I=1DOWHILEI<=2J=1DOWHILEJ<=3K(I,J)=I*J??K(I,J),''J=J+1ENDDO?I=I+1ENDDO
操作23246例5-16:下列语句执行完后,求数组K中各元素的值
87
SETTALKOFFCLEARX=‘中华人民共和国’
Y=‘’DOWHILELEN(X)>=4Y=Y+SUBSTR(X,1,2)+‘’X=SUBSTR(X,3)ENDDO?Y+X例5-17:上机习题:将‘中华人民共和国’显示为‘中华人民共和国’.操作88小结
我们可以对DOWHILE语句的条件表达式做如下归纳:1.计数循环:1)加法循环X<MX=X+step2)减法循环X>MX=X-step2.数据表循环访问.NOT.EOF()3.循环的人工干预(预设陷阱,全真循环)循环表达式为.T.,但在循环体内必须有可以执行到的EXIT语句.
892.FOR-ENDFOR(指定循环次数)
当循环的循环次数用户是不知道的,表达式稍加改动就得不到正确的结果。所以FOXPRO提供了限定次数的循环:计数循环。格式如下:
90FOR<变量>=<数值表达式1>TO
<数值表达式2>[STEP<数值表达式3>]<语句块>[EXIT][LOOP]ENDFOR91例5-18:按学号顺序逐条显示CJ表中前9个学生的成绩。
SETTALKOFFUSECJFORI=1TO9GOIDISPWAITENDFORUSE操作92例5-19:用FOR-ENDFOR语句打印乘法口诀表:
SETTALKOFFCLEARFORA=1TO9FORB=1TOAP=A*B
??STR(B,1)+‘*’+STR(A,1)+’+STR(P,2)+‘’ENDFOR?ENDFORRETU操作SETTALKOFFCLEARFORA=1TO9FORB=1TOAP=A*B@A-1,7*BSAYSTR(B,1)+'*'+STR(A,1)+'='+STR(P,2)+''ENDFORENDFORRETU93例5-20:编程实现打印下面图形**********方法一:利用函数SETTALKOFFCLEARFORI=1TO4
@I,1SAYREPLICATE(‘*’,I)ENDFORRETURN94方法二:利用嵌套SETTALKOFFCLEARFORI=1TO4FORJ=1TOI@I,JSAY‘*’ENDFOR?ENDFORRETURN95****************************************************上机练习:修改上例程序实现打印如下图形**********12345678996settalkofff1=1f2=1forI=1to20
?f1,f2f1=f1+f2
f2=f2+f1endfor例5-21:求斐波那契数列的前40数F1=1n=1F2=1n=2Fn=Fn-1+Fn-2n>=3操作97上机习题:
1.利用FOR-ENDFOR语句改写求素数程序。2.求水仙花数(153=13+53+33)3.求1000之内的完数.一个数恰好等于它的因子之和称其为完数.如6=1+2+3.
983.SCAN-ENDSCAN
专门用于数据表记录的循环处理.
SCAN[范围]FOR<逻辑表达式1>
WHILE<逻辑表达式2><语句块>[LOOP][EXIT]
ENDSCAN
99例5-22:显示CJ表中成绩高于80的学生.
SETTALKOFFCLEARUSECJSCANALLFOR成绩>80
DISP=INKEY(3)ENDSCAN操作100
[问题]如果程序中需要多次使用相同或相似的代码段,有没有更好的方法来解决?题目:计算1-100的和加上1-200的和S=0I=1DowhileI<=100s=s+II=I+1EnddoI=1DowhileI<=200s=s+II=I+1EnddoS=0I=1Dosumwith100Dosumwith200*sum.prgParatI=1DowhileI<=ts=s+II=I+1Enddo并列的两个循环一个循环,两次调用1015.1程序文件的建立与修改5.2简单的交互式输入/输出命令5.3程序的基本结构
5.4程序的模块化5.5程序调试10212[两段代码][一段代码,两次调用]103过程和自定义函数
为了提高程序的通用性,常采用模块化的程序设计方法。一个结构上相对独立的程序段就是一个模块,这种模块可以是:过程或自定义函数。他们在命名方式、存储方法和参数传递上略有不同。104
过程是过程文件的组成部分,可以把多个过程包含在一个文件当中。这样,当过程文件打开时,它所包含的多个程序也同时调入内存,这样就提高了程序运行速度。
注:命令文件和过程文件可以并存,但一次只能打开一个过程文件。5.4.1过程与过程文件
105过程过程过程过程文件过程程序过程复杂的过程文件106一)建立1.方法:用MODICOMM命令.
例如:modicommgeneral
2.过程的结构:
PROCEDURE<过程名>
<过程体>
RETURN[TOMASTER/TO<过程名>]或ENDPROC
一.过程及过程文件107例如:
procedurejiaparax,y,ss=x+yendproc108过程文件可以由多个过程构成:PROCEDURE<过程名><过程体>RETURN
[TOMASTER/TO<过程名>]PROCEDURE<过程名><过程体>RETURN
[TOMASTER/TO<过程名>]PROCEDURE<过程名><过程体>RETURN
[TOMASTER/TO<过程名>]109二)过程文件的打开和关闭打开:SETPROCEDURETO<过程文件名>关闭:SETPROCEDURETO
或:CLOSEPROCEDURE
三)调用
打开过程文件后,用DO<过程名>[WITH参数表]110例5-23:调用过程文件实现两个数的四则运算。*主程序EX5-23.PRG:SetproctoSUB1X=100Y=200S=0Dojiawithx,y,s?SDojianwithx,y,s?SDochengwithx,y,s?SDochuwithx,y,s?SSetprocto111PROCEDUREjia
parax,y,ss=x+yEndprocPROCEDUREjian
parax,y,ss=x-yEndprocPROCEDUREcheng
parax,y,ss=x*yEndprocPROCEDUREchu
parax,y,ss=x/yReturn过程文件SUB1.prg112SETTALKOFFSETPROCTOSUB2N=10S=0FORM=1TONX=MDOjc
&&求阶乘DOsum
&&求和ENDFORSETPROCTORETUPROCjcT=1FORF=1TOXT=T*FENDFORX=TRETU
PROCsumS=S+X?M,SRETU
例5-24:打印出1!+2!+……+n!,当N=1,2……10时的值.*主程序EX5-24.prg*过程文件:SUB2.prg113
尽管FOXPRO向我们提供了近百个内部函数,但为了完成特定的要求,这些函数并不够用,所以FOXPRO允许用户定义属于自己的有特殊功能的专用函数,这种函数称为自定义函数。
5.4.2自定义函数114(1)一个自定义函数是一个独立的命令文件,其扩展名为.PRG,函数文件与一般命令文件的区别是函数命令文件通过RETURN命令返回一个函数值。一个自定义函数有两种形式:(2)一个自定义函数是一个独立的命令模块,放在过程文件中。函数通过RETURN命令返回一个函数值。115……过程过程过程文件函数文件函数函数116
FUNCTION
<函数名>
PARAMETERS
<参数表>
<命令序列>
RETURN
<表达式>[ENDFUNC]调用方式:?函数名(参数表)
或:变量名=函数名(参数表)
或:DO函数名
WITH参数表自定义函数的命令格式:117PARAMETERSNS=0I=1DOWHILEI<=NS=S+II=I+1ENDDORETUSs=0dosumwith100?s?sum(100)x=sum(100)?x例5-25:编写自定义函数sum(n)=1+2+3+…+n方法一主程序main.prg自定义函数文件sum.prg运行domain,结果:505050505050118Functionsum
PARANS=0I=1DOWHILEI<=NS=S+II=I+1ENDDORETUSEndfuncsetproctogenerals=0dosumwith100?s?sum(100)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电动机检修工风险评估与管理测试考核试卷含答案
- 河北省衡水市街关中学2026-2027年高三上9月月考语文试卷(含答案)
- 异丁烯装置操作工岗前核心技能考核试卷含答案
- 天文学家研究绩效考核表
- 福建泉州科技中学2025-2026学年高一上学期第一次月考模拟英语试题(含答案无听力音频及听力原文)
- T/ZZFSA 004-2024食用调味油
- 铝电解综合工安全行为能力考核试卷含答案
- 焦化装置操作工岗中协同配合考核试卷含答案
- 移栽机操作工安全生产知识强化考核试卷含答案
- 塑料浇铸工班组管理测试考核试卷含答案
- L25J101-2建筑工程做法(下册)
- 彩钢顶屋面维修工程维修施工方案
- 普通动物学题库-普通动物学习题及答案
- 大学室长培训
- 雨课堂学堂在线学堂云《神经网络理论及应用(北工商)》单元测试考核答案
- 2025重庆日报报业集团所属企业招聘3人笔试历年典型考点题库附带答案详解试卷3套
- 雨课堂在线学堂《走进医学》作业单元考核答案
- 人教版二年级数学上册第二单元1~6的表内乘法达标测试卷(含答案)
- 义乌商贸城租房合同范本
- 医药代表开发医院经验分享
- 《网评员管理办法》
评论
0/150
提交评论