vph程序设计基础与顺序结构.ppt_第1页
vph程序设计基础与顺序结构.ppt_第2页
vph程序设计基础与顺序结构.ppt_第3页
vph程序设计基础与顺序结构.ppt_第4页
vph程序设计基础与顺序结构.ppt_第5页
已阅读5页,还剩137页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1,VisualFoxPro程序设计教程杭州商学院计算机教研室2019年11月25日,数据库应用,2,第3章程序设计基础,3.1VisualFoxPro应用程序设计概述3.2程序文件设计3.3可视化界面与事件过程设计,3,3.1VisualFoxPro应用程序设计概述,3.1.1VFP程序设计过程VFP应用程序包括:一个或多个数据库设置应用程序系统环境的主程序用户界面查询和报表等。全过程包括:规划应用程序、创建数据库、设计用户操作界面和设计访问信息的方法、测试和调试,而且各阶段要有一个反复、完善的过程。(P.103图3.1),4,3.1VisualFoxPro应用程序设计概述,3.1.2VFP程序设计方法VFP将过程化程序设计与面向对象程序设计结合在一起,为用户创建功能强大灵活多变的应用程序提供了方便、实用的程序设计后台支持。面向过程程序设计方法面向对象程序设计方法,5,3.1VisualFoxPro应用程序设计概述,3.1.2VFP程序设计方法1.面向过程程序设计方法面向过程程序设计方法,是将应用程序目标系统的整体功能进行分解,自顶向下不断的把复杂的处理分解为子处理,这样一层一层地分解下去,直到仅剩若干个容易处理的子处理为止。这种结构分析和结构设计是围绕实现“过程”来构造系统的。2.面向对象程序设计方法面向对象的程序设计方法有些象使用集成电路(IC)构造计算机硬件一样,各个部件都是相对封闭独立的,部件之间的连接与通信通过对外接口实现。所以可以将面向对象的程序设计方法视为“软件IC”,它的软件部件的内部结构紧密,有自己的私有数据和操作方法,而与外界的沟通是通过传递信息来完成的。,6,3.1VisualFoxPro应用程序设计概述,3.1.3VFP程序编程机制VFP程序由代码组成,代码包括以命令形式出现的指令、函数或VFP可以理解的任何操作符号行。这些代码可以出现在:“命令”窗口中。程序文件中。“表单设计器”或“类设计器”的事件或方法程序代码窗口中。“菜单设计器”、“报表设计器”的过程代码窗口中。1.使用命令窗口在命令窗口中键入VFP命令并按Enter键执行。输入结果显示在VFP的大屏幕上。重新执行该命令,将光标移到此行并按Enter键。选中多行,一次性批量执行多行代码。,7,3.1VisualFoxPro应用程序设计概述,3.1.3VFP程序编程机制2.程序文件程序:是为了完成某项指定的任务而需执行的命令序列。程序文件:命令序列以一定的结构有序地编排在一起,并以文件的形式存储在磁盘上,这种文件称为命令文件或程序文件。(.PRG、.FXP)程序可以被修改并重新运行。可以从菜单、表单和工具栏上启动程序。一个程序可以调用其他程序或被其他程序调用。执行命令效率高,而且可以重复调用。,8,3.1VisualFoxPro应用程序设计概述,3.1.3VFP程序编程机制2.程序文件,9,3.1VisualFoxPro应用程序设计概述,3.1.3VFP程序编程机制3.事件驱动的可视化界面的事件过程代码,10,3.2程序文件设计,3.2.1程序设计基本特点程序的质量标准是“清晰第一,效率第二”。程序书写规范,风格统一。结构化程序设计的基本结构规定为:顺序结构、选择结构、循环结构。一个大的程序开发应当采用“自顶向下、逐步细化和模块化”的方法。程序模块应该只有一个入口、一个出口,无死语句、死循环。,11,3.2程序文件设计,3.2.2算法表示算法:解决问题的方法、步骤。表示形式:自然语言、传统流程图、N-S结构化流程图和伪代码等。常用的流程图符号:起止框:处理框:判断框:输入输出框:流程线:连接点:,12,3.2程序文件设计,3.2.2算法表示,循环结构,13,3.2程序文件设计,3.2.2算法表示例3.1将“学生”表中指定学生的奖学金加10元,并显示该学生的奖学金。,Y,N,14,3.2程序文件设计,3.2.6程序文件示例例3.2编制一个程序文件实现口令验证功能。,15,3.2程序文件设计,3.2.6程序文件示例例3.3编制一个程序文件实现收费找零功能(程序自动随机生成一个需要付款的金额,要求忽略角分,用户从键盘输入预付款金额,程序自动计算找零金额并对50元、10元、5元、1元的找零张数进行统计且给出提示。请大家试着画画程序流程图。,16,3.2程序文件设计,3.2.3程序文件的建立与执行在程序文件中的命令或指令通常又称作语句。程序文件由若干条语句组成,每行只能有一条语句,并以回车键结束。程序文件主要包括3个基本部分:数据输入、数据处理、数据输出。1创建程序通过项目管理器创建通过文件菜单创建通过命令创建(MODIFYCOMMAND)2.保存程序通过菜单保存直接关闭没有保存的程序,则会弹出相应对话框,提示保存或放弃按CTRL+W组合键保存,17,3.2程序文件设计,3.2.3程序文件的建立与执行3.修改程序通过项目管理器的“修改”选项打开程序并修改通过文件菜单中“打开”选项打开程序并修改通过命令MODIFYCOMMAND打开程序并修改注:修改窗口和创建窗口相同,修改完毕后应注意保存。4.运行程序通过项目管理器的“运行”按钮运行程序通过程序菜单中“运行”选项运行程序通过命令DO运行程序,18,3.2程序文件设计,3.2.4简单的输入和输出语句1.换行输出语句:?格式:?功能:分别计算表达式列表的值,并将表达式列表的值输出在主窗口的当前光标的下一行。2.同行输出语句:?格式:?功能:当前光标所在行、列的后面。,19,3.2程序文件设计,3.2.4简单的输入和输出语句3.表达式接收语句:INPUT格式:INPUTTO功能:将键盘输入的数据赋给由指定的内存变量。从键盘输入的数据可以是常量、变量或表达式,数据类型可以是N,C,D,L和Y等。注意:输入的字符串常量,必须有定界符。4.字符串接收语句:ACCEPT格式:ACCEPTTO功能:将键盘输入的数据赋给由指定的内存变量。注意:从键盘输入的数据只能是字符型常量。,20,3.2程序文件设计,3.2.4简单的输入和输出语句5.单字符接收语句:WAIT格式:WAITTOWINDOWATNOWAITNOCLEARTIMEOUT功能:将键盘输入的数据赋给由指定的内存变量。注意:从键盘输入的数据只能是一个单字符常量。,21,3.2程序文件设计,3.2.5程序注释与环境设置语句1.程序注释语句:NOTE/*格式:NOTE或*功能:对程序的结构或功能进行注释。2.语句注释:&格式:&功能:对程序中某一条语句的功能进行注释。3.清屏语句:CLEAR格式:CLEAR功能:执行清屏操作。,22,3.2程序文件设计,3.2.5程序注释与环境设置语句4.常用的SET语句系列(1)SETTALKON/OFF功能:打开或关闭系统交互对话显示方式,缺省时为打开显示。(2)SETDELETEOFF/ON(3)SETEXACTOFF/ON(4)SETCARRYOFF/ON(5)SETDEFAULTTO(6)SETEXCLUSIVEON/OFF(7)SETESCAPEON/OFF(8)SETUDFPARMSTOVALUE/REFERENCE,23,第4章程序设计控制结构,4.1程序控制的基本结构顺序结构选择分支结构循环结构4.2子程序与参数传递4.3综合程序设计范例,24,4.1程序控制的基本结构,4.1.1顺序结构指程序的执行按其中的命令从上到下逐条顺序执行。例:105页第一个程序例:编写一个求圆面积的程序,圆半径的值由键盘输入。例:求下列表达式的值(x、y的值由键盘输入)。log(x+y)+2|x-y|sin(30)例4.1:求“学生”表中指定班级的全体学生的奖学金总额。,25,顺序结构,例1(105页)settalkoffclearaccept请输入你的名字:tonamemessage=大家好!这是+name+的第一个程序!?messagesettalkon,使用input可以吗?,INPUT:数据类型可以是N,C,D,L和Y等;ACCEPT:从键盘输入的数据只能是字符型常量。,26,顺序结构,编写一个求圆面积的程序,圆半径的值由键盘输入。,settalkoffclearinput请输入圆的半径:tors=pi()*r2?半径为+alltrim(str(r,2)+的圆的面积为:+alltrim(str(s,20,2)settalkon,27,顺序结构,求下列表达式的值(x、y的值由键盘输入)。log(x+y)+2|x-y|sin(30),settalkoffclearinput请输入x的值:toxinput请输入y的值:toys=log(x+y)+2*abs(x-y)/sin(30*pi()/180)?表达式的值为:+alltrim(str(s,20,2)settalkon,28,4.1程序控制的基本结构,例4.1:求“学生”表中指定班级的全体学生的奖学金总额。,note求指定班级的奖学金总额settalkoffclearuse学生accept输入班级(951/953):tobjsum奖学金tojxjforleft(学号,3)=bj?bj+班的奖学金总额为+str(jxj,5,2)usesettalkon,与INPUT的区别?,INPUT:数据类型可以是N,C,D,L和Y等;ACCEPT:从键盘输入的数据只能是字符型常量。,29,4.1程序控制的基本结构,选择结构二路选择分支结构格式IFELSEENDIF功能根据的值控制执行或。条件表达式关系表达式或逻辑表达式,其值为逻辑真(.T.)或逻辑假(.F.),30,4.1程序控制的基本结构,选择结构二路选择分支结构流程图注意ENDIF不能省略,二路分支的出口为ENDIF的下一条语句,ELSE后面为空,没有表达式。,31,4.1程序控制的基本结构,选择结构二路选择分支结构程序举例例4.2:从键盘输入一个数,说明它是奇数还是偶数。习题5.2:给定一个年份,判断是否闰年。,32,*例4.2:从键盘输入一个数,说明它是奇数还是偶数。*(1)被2整除,偶数;*(2)不能被2整除,奇数。SETTALKOFFCLEARINPUT请输入一个数值型数据:TOAIFINT(A/2)=A/2?A,是偶数!ELSE?A,是奇数!ENDIFSETTALKON,33,*教p199习5_2*给定一个年份(从键盘输入),判断它是否闰年。闰年的条件是:*能被4整除但不能被100整除,或能被100整除且能被400整除。SETTALKOFFCLEAINPUTY=TOYIF(Y%4=0.AND.Y%100!=0).OR.(Y%100=0.AND.Y%400=0)?Y,是闰年ELSE?Y,不是闰年!ENDIFSETTALKON,34,4.1程序控制的基本结构,选择结构二路选择分支结构二路分支的简约形式IFENDIF程序举例任意输入三个数,按从大到小的顺序输出。,35,*从键盘输入A,B,C三个数*值,将它们从大到小*排列后输出.SETTALKOFFCLEAINPUTA=TOAINPUTB=TOBINPUTC=TOCIFABT=AA=BB=TENDIF,IFA=80DC=良CASECJ=70DC=中CASECJ=60DC=及格OTHERWISEDC=不及格ENDCASE?DCENDIFSETTALKON,45,我们学到的命令,创建、修改程序:MODIFYCOMMAND运行程序:DO同行输出语句:?表达式接收语句:INPUT字符串接收语句:ACCEPT单字符接收语句:WAIT程序注释语句:NOTE/*语句注释:&清屏语句:CLEAR选择分支语句:IFENDIF结构多路分支语句:DOCASEENDCASE结构,46,上机作业,199页第1题200页实验1、实验2注意事项:在d盘建立以自己学号命名的文件夹,如070000001设置工作目录Setdefaulttod:070000001运行程序do例1.prg注意在英文状态下输入程序指令。,47,4.1.3循环结构,循环语句的三种形式:当型循环:DOWHILEENDDO步长型循环:FORENDFOR表记录扫描处理SCANENDSCAN(将在后续章节中介绍),48,4.1.3循环结构DOWHILE基本概念,一、DOWHILEENDDO(当型循环)格式:DOWHILEENDDO功能:当的值为真时,重复执行DOWHILEENDDO之间的,直到的值为假时结束。,49,4.1.3循环结构DOWHILE基本概念,一、DOWHILEENDDO(当型循环)DOWHILEENDDO说明一般在循环体中,应该包含改变值的命令,否则将出现死循环现象(即永真循环)。当一开始就不成立时,循环一次也不做。,50,4.1.3循环结构DOWHILE应用举例,1.对已知循环次数的程序段进行顺计数操作。控制格式:N=初值(通常设为1)DOWHILENN=N+1ENDDO功能:已知循环次数M,通过对循环变量N进行顺计数并与M比较的方法完成循环操作。,51,4.1.3循环结构DOWHILE应用举例,例1:求1+2+3+10的和值解1:顺计数流程框图见右,52,例1:求1+2+3+10的和值解1:顺计数SETTALKOFFCLEARS=0&累加器赋初值,用于存放最后的和值N=1&累加器赋初值,将用于存放循环次数DOWHILEN0N=N-1ENDDO功能:已知循环次数N,通过对循环变量N进行倒计数并与0比较的方法完成循环操作。,4.1.3循环结构DOWHILE应用举例,54,例1:求1+2+3+10的和值解2:倒计数SETTALKOFFCLEARS=0&累加器赋初值,用于存放最后的和值。N=10&累加器赋初值,将用于存放循环次数。DOWHILEN0S=S+N&实现累加,即用原来的S加上N,和值再赋给S。N=N-1&实现累减,即用原来的N减去1,差值再赋给N。ENDDO?1+2+3+10=,SSETTALKON,4.1.3循环结构DOWHILE应用举例,55,例2:求A!的值,A从键盘输入。SETTALKOFFCLEART=1&累乘器赋初值,用于存放最后的积值。INPUTA=TOAN=1DOWHILEN1E-5STORE1TOT1,T2,T3FORJ=1TO2*I-1T1=T1*XT2=T2*JENDFOR,S=S+T3*T1/T2T3=-T3I=I+1ENDDO?”SIN(“+STR(X,6,4)+”)=“+LTRIM(STR(S,20,7)SETTALKON,4.1.3循环结构FOR与DOWHILE,例11:计算数据前n项之和,X-X3/3!+X5/5!-X7/7!+精确到105,(精度控制),70,循环结构的一个基本应用是级数求和问题,即对数列求和。常用的控制方法有两种:一种是次数控制,即已知控制循环的次数,往往采用FOR语句实现;另一种是精度控制,即不知道循环的次数,但明确整个级数运算结果精确的小数位数,或级数的某一项精确的小数位数,往往采用DOWHILE语句实现。一般较复杂的级数求和问题用双重循环实现,内循环求级数的一项或一项的一部分,外循环实现累加。当然,较简单的级数求和问题也可以对控制结构稍加技术处理,用单循环实现。通俗地说,这就是“累加累乘”问题。循环有3种执行情况,即有限次循环,永真循环和一次也不做的循环。,4.1.3循环结构FOR与DOWHILE,71,4.1.3循环结构其它程序举例,例12:输入一个整数初始值,从该数开始到100之间(包括100),找出能被7或11整除的所有整数,显示其值以及个数。(循环与分支的嵌套),SETTALKOFFCLEARINPUT“请输入一个正整数”TONC=0FORI=NTO100IFMOD(I,7)=0ORMOD(I,11)=0?STR(I,3)C=C+1ENDIFENDFOR?”从”+STR(I,3)+”到整除的数的个数为”+STR(C,2)SETTALKON,72,4.1.3循环结构其它程序举例,字符串的拆合(函数应用题)利用字符处理函数,应用循环结构的思路,可以实现字符串的拆合基本知识(常用函数):大小写转换upper-lower类型转换ctod-dtoc,val-str,asc-chr截取left,right,substr字符串长度len,73,4.1.3循环结构其它程序举例,解1:字符串的倒装SETTALKOFFCLEARACCEPTN=TONM=LEN(ALLTRIM(N)J=1S=DOWHILJ=1F=SUBSTR(N,J,1)S=S+F&顺装J=J-1ENDDO?SSETTALKON,例13:该程序实现字符串倒置。如字符串“ABCD”倒置后为“DCBA”。,注意:S=S+F与S=F+S的区别,74,4.1.3循环结构其它程序举例,例14:写出下列程序的运行结果:(注:字符”G”、”O”、”D”的ASCII码分别为71、79、68。),SETTALKOFFCLEARC=一二三四五六七八九十B=GOODR=0FORI=1TOLEN(B)W=SUBSTR(B,I,1)D=ASC(W)+R-65S=IFD+SR=R+6ENDFORSETTALKON,75,4.1.3循环结构EXIT与LOOP,四、EXIT与LOOP的区别加入EXIT与LOOP后的循环控制格式DOWHILEEXITLOOPENDDOFOR循环变量=初值TO终值STEP步长EXITLOOPENDFOR/NEXT注意:LOOP与EXIT一般应放在分支语句中。,区别:(1).EXIT语句结束整个最内层循环,不再进行条件判断。称为循环的“断路”。(2)LOOP语句只结束本次循环,直接进行是否执行下一次循环的判断。又称为循环的“短路”,76,4.1.3循环结构EXIT与LOOP,四、EXIT与LOOP的区别,加入EXIT后的循环控制格式(FOR与DOWHILE相同),77,4.1.3循环结构EXIT与LOOP,四、EXIT与LOOP的区别加入LOOP后的循环控制格式,LOOP选项用于跨过LOOP后面的语句,直接回到循环起始语句DOWHILE。,LOOP选项用于跨过LOOP后面的语句,在执行完循环变量加步长后,直接回到与终值的比较。,78,四、EXIT与LOOP的应用对循环次数不确定的程序段进行操作。永真循环控制格式:DOWHILE.T.IFEXITENDIFENDDO功能:循环条件设为永真(.T.),只有当满足时,才由EXIT语句跳出循环。一般包含在分支语句中。该控制结构适合于各种循环控制,是一种“万能”框架。除EXIT以外,也可以用RETURN或CANCEL跳出循环。,4.1.3循环结构EXIT与LOOP,79,例15:输入一批学生的分数,统计不及格学生的人数,输入负数结束,解1:SETTALKOFFCLEARN=0DOWHILE.T.INPUT“X=”TOXIFX0EXITENDIFIFXA&求最高分。A=XENDIFIFXB&求最低分。B=XENDIFENDFORS=(S-A-B)/8?最后得分为:,SSETTALKON,81,整除性应用实例17:输入一个数,判断其是否为素数。3种思路:(1)2-n-1(2)2-n/2(3)2-sqrt(n),4.1.3循环结构几种算法应用,说明:素数问题的解决有以上3种方法,其中第(1)种方法使用最方便,第(3)种方法效率最高。,SETTALKOFFCLEARINPUTX=TOXFORN=2TOX-1IFX%N=0&第一个IF语句。EXITENDIFENDFORIFN=X&第一个IF语句。?STR(X)+是素数ELSE?STR(X)+不是素数ENDIFSETTALKON注意:两个IF语句,用1个IF语句可以吗?,82,4.1.3循环结构几种算法应用,数位截取框架:dowhilex0d=x%10&取个位x=int(x/10)&丢个位Enddo说明:在该循环框架中,循环条件为x0,即通过语句d=x%10截取该数的最后一位数字,并对这一位数字进行相应的处理,然后用x=int(x/10)语句将最后一位数字丢弃,如此循环,直到x=0为止。,例18:输入1个数,求各位数字之和。SETTALKOFFCLEARINPUT“X=”TOXS=0DOWHILEX0D=X%10&取个位S=S+DX=INT(X/10)&丢个位ENDDO?”S=”,SSETTALKON,83,例18:输入1个数,求各位数字之和。确定:循环条件和循环不变体,D=X%10S=S+DX=INT(X/10)12345%10=5S=0+5=5INT(12345/10)=12341234%10=4S=5+4=9INT(1234/10)=123123%10=3S=9+3=12INT(123/10)=1212%10=2S=12+2=14INT(12/10=11%10=1S=14+1=15INT(1/10)=0结束,循环不变式:D=X%10S=S+DX=INT(X/10)循环条件:X0,INPUT“X=”TOXS=0DOWHILEX0D=X%10&取个位S=S+DX=INT(X/10)&丢个位ENDDO,84,4.1.3循环结构多重循环,五、多种结构的嵌套格式:DOWHILEFORN=ATOBSTEPCIF.ELSE.ENDIFDOCASE.ENDCASEEXITLOOPENDFORENDDO功能:用于解决不能用一种控制结构实现的复杂问题,常用的是双重循环结构,85,五、多种结构的嵌套例19:利用循环嵌套控制结构,实现“百钱买百鸡”的计算(取自算经:鸡翁一,值钱五;鸡母一,值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、母、雏各几何?“)分析:设要买X只公鸡,Y只母鸡,Z只小鸡,可得到方程5*X+3*Y+Z/3=100X+Y+Z=100可用穷举法解决,4.1.3循环结构多重循环,86,4.1.3循环结构多重循环,87,4.1.3循环结构多重循环,例19:百钱买百鸡。程序代码:,settalkoffclearforx=0to20fory=0to33z=100-x-yif5*x+3*y+z/3=100?x=+str(x,2),y=+str(y,2),z=+str(z,2)endifendforendforsettalkon,88,4.1.3循环结构多重循环,应用于图形处理使用双重循环:外循环行内循环列例20:编写输出九九乘法表程序,输出格式:1*1=12*1=22*2=43*1=33*3=99*1=99*9=81,89,4.1.3循环结构多重循环,例20:输出九九乘法表,90,4.1.3循环结构多重循环,例20:输出九九乘法表,SETTALKOFFCLEARX=1?DOWHILEX=9Y=1DOWHILEY=X?STR(Y,1)+X+STR(X,1)+=+STR(X*Y,2)+y=y+1ENDDO?X=X+1ENDDOSETTALKONRETURN,91,4.1.3循环结构多重循环,应用于矩阵的二维数组处理。基本知识:主对角线i=j副对角线i+j=m+1上三角形i=j,123456789,主对角线,副对角线,上三角形,下三角形,例21:当M=3时,写出下列程序运行的结果:SETTALKOFFCLEARINPUTM=TOMDIMEA(M,M)FORI=1TOM?FORJ=1TOMIFI=JA(I,J)=1ELSEA(I,J)=0ENDIF?A(I,J)ENDFORENDFORSETTALKON,92,作业,写在作业本上,下次课交199页第2、3、4、5、9课前编写,上机调试,下课前提交。200页,2(1)(2),3(1),93,作业,写在作业本上,下次课交199页第7,8,10,11计算1-1/2+1/3-1/41/N,N值从键盘输入计算1-1/3+1/5-1/7的前N项之和,N值从键盘输入。计算1-1/3+1/5-1/7,直到最后一项的绝对值小于10-5为止。计算下列数列前n项之和。X-X2/2!+X3/3!-X4/4!+计算数据前n项之和,X-X3/3!+X5/5!-X7/7!+精确到10-5输入一个整数初始值,从该数开始到100之间(包括100),找出能被7或11整除的所有整数,显示其值以及个数。该程序实现字符串倒置。如字符串“ABCD”倒置后为“DCBA”。输入一批学生的分数,统计不及格学生的人数,输入负数结束评委评分程序,分数的范围是0-100,在10个分数中去掉一个最高分,去掉一个最低分,剩下的分数求平均为最后得分。课前编写,上机调试,下课前提交。200页,3(3),94,选择分支结构,是根据条件的测试结果执行不同的操作。用两条命令实现条件分支:二路选择分支结构:IFENDIF多路选择分支结构:DOCASEENDCASE1.二路选择分支结构格式:IFTHENELSEENDIF功能:根据的值控制执行或。,95,选择分支结构,2.多路选择分支结构:格式:DOCASECASECASEOTHERWISEENDCASE功能:根据的逻辑值控制执行对应的。,96,4.1程序控制的基本结构,4.1.3循环结构循环结构可以根据问题的需要任意次地重复执行一行或多行语句。循环结构要特别注意的是在重复执行语句过程中,要有控制条件的语句,以避免出现死循环现象。DOWHILEENDDOSCANENDSCANFORENDFOR,97,4.1程序控制的基本结构,4.1.3循环结构1.DOWHILEENDDO格式:DOWHILEEXITLOOPENDDO功能:当的值为真时,重复执行DOWHILEENDDO之间的,直到的值为假时结束。,结束当前循环操作,跳到ENDDO后面的语句,跳过LOOP后面的语句,直接回到循环起始语句DOWHILE,98,4.1程序控制的基本结构,4.1.3循环结构1.DOWHILEENDDO,99,4.1程序控制的基本结构,4.1.3循环结构(1)对循环次数不确定的程序段进行操作。格式:DOWHILE.T.&循环次数不确定时IFEXITENDIFENDDO功能:循环条件永远为真,只有满足IF语句的时,才跳出循环。注意:在这种使用方法中,EXIT选项是不可缺少的,且必须和IF语句或DOCASE语句连用。P169例4.6,P170例4.7。,100,4.1程序控制的基本结构,4.1.3循环结构(2)对表文件中的记录逐条进行操作。格式:DOWHILE.NOT.EOF()/BOF()SKIP/SKIP-1ENDDO功能:对当前打开的表文件中的记录自上而下或自下而上地逐条进行操作。注意:记录指针由SKIP语句控制,循环结束的条件由函数EOF()和BOF()控制。P171例4.8,P171例4.9。,101,4.1程序控制的基本结构,4.1.3循环结构(3)对已知循环次数的程序段进行顺计数操作。格式:N=初值(通常设为1)DOWHILENN=N+XENDDO功能:通过对循环变量N进行顺计数并与M相比较的方法完成循环操作。P172例4.10,P172例4.11。,102,4.1程序控制的基本结构,4.1.3循环结构(4)对已知循环次数的程序段进行倒计数操作。格式:DOWHILEMM=M-1ENDDO功能:已知循环次数M,通过对循环变量M进行倒计数并与0相比较的方法完成循环操作。P172例4.12。,103,4.1程序控制的基本结构,4.1.3循环结构(5)通过状态测试函数对程序段进行操作。格式:DOWHILE改变状态测试函数值的语句或键盘动作ENDDO功能:当的初始值为真时,进行循环操作;当的值在循环体中被改变时,便结束循环操作。P173例4.13,P173例4.14。,104,4.1程序控制的基本结构,4.1.3循环结构2.SCANENDSCAN格式:SCANNOOPTIMIZE范围FORWHILELOOPEXITENDSCAN功能:对当前打开的表文件在指定范围,满足条件的记录中进行自上而下逐个扫描操作,随着记录指针的移动,SCAN循环允许对指定的每条记录执行相同的操作。P174例4.15,P174例4.16。,105,4.1程序控制的基本结构,4.1.3循环结构3.FORENDFOR格式1:FOR循环变量=初值TO终值STEP步长EXITLOOPENDFOR/NEXT功能:当循环变量的值不大于终值时,执行循环操作。每循环一次,循环变量的值自动递增一个步长值。选项说明:LOOP:实现循环短路操作。EXIT:实现结束当前循环操作。,注意:(1)循环变量为任意一个内存变量,不需要事先定义。(2)初值、终值和步长均为数值表达式,且可正可负。(3)缺省STEP步长选项,步长默认为1。,106,4.1程序控制的基本结构,4.1.3循环结构3.FORENDFOR格式2:FOREACHIN/EXITLOOPENDFOR/NEXT功能:对/中的每个元素执行循环操作。P175例4.17,P174例4.18。,注意:(1)循环变量为任意一个内存变量,不需要事先定义。(2)/为已经定义的数组或集合。,107,4.1程序控制的基本结构,4.1.4多种结构的嵌套解决复杂问题时,仅仅靠一种控制结构是很难解决问题,因而需要使用多种控制结构的嵌套形式以及多重循环控制的嵌套形式来解决问题。一种结构嵌套的形式DOWHILEFORN=ATOBSTEPCDOWHILEENDDOIFELSEENDIFENDFORENDDO,注意:在使用多种结构嵌套时,各个控制结构不能出现交叉现象。,108,4.1程序控制的基本结构,4.1.4多种结构的嵌套例4.19利用循环嵌套控制结构,实现“百钱买百鸡”的计算(取自算经:“鸡翁一,值钱五;鸡母一,值钱三;鸡雏三值钱一。百钱买百鸡,问鸡翁、母、雏各几何?”)。分析:设:要买X只公鸡,Y只母鸡,Z只小鸡,可得到方程:5*X+3*Y+Z/3=100X+Y+Z=100可用穷举法解决。,109,4.1程序控制的基本结构,4.1.4多种结构的嵌套例4.19百钱买百鸡。,110,4.1程序控制的基本结构,4.1.4多种结构的嵌套例4.19百钱买百鸡。Forx=0to20fory=0to33z=100-x-yif5*x+3*y+z/3=100?x=+str(x,2),y=+str(y,2),z=+str(z,2)endifendforEndfor,111,4.2子程序与参数传递,4.2.1子程序定义:子程序是相对于主程序而言的一个独立的程序文件,其建立方法与建立程序文件的方法相同,扩展名为.PRG。子程序的调用与返回:调用:DOWITH返回:RETURNTOMASTER说明:RETURN返回到调用者的调用语句的下一行。TOMASTER选项表示返回到最高级调用者。选项表示将值返回到调用者。子程序执行时直到遇到以下情况时,自动结束返回:RETURN、RETRY、CANCEL、QUIT和子程序的末尾。,112,4.2子程序与参数传递,4.2.1子程序主、子程序的调用关系(递接调用关系),113,4.2子程序与参数传递,4.2.1子程序主、子程序的调用关系(跨接调用关系),114,4.2子程序与参数传递,4.2.2过程文件1.过程与过程文件的定义过程是一个由PROCEDURE开头,ENDPROC结尾的子程序段。过程可以将实现相对独立功能的常用代码集中在一起,供应用程序在需要时调用。过程文件:是由若干个过程构成的文件。PROCEDUREENDPROC注意:(1)过程必须存放在一个过程文件中。(2)不能把可执行的主程序代码放在过程之后。,115,4.2子程序与参数传递,4.2.2过程文件2.过程文件的建立与程序文件的创建方法相同,将过程文件的内容一行一行地输入。通过将分散的子程序加入项目管理器,再利用工具自动连编生成扩展名为APP或EXE的文件。3.过程文件的调用注意:调用过程文件之前必须要打开过程文件。调用结束后要关闭。过程文件。过程文件的打开:SETPROCEDURETO过程文件的关闭:SETPROCEDURETO或CLOSEPROCEDURE,116,4.2子程序与参数传递,4.2.3参数传递及作用域主程序与子程序之间或过程与过程之间通过互相传递参数来完成整体上的操作。主程序与子程序之间的参数传递可以通过下列方式进行:利用内存变量的作用域属性利用DOWITH。,117,4.2子程序与参数传递,4.2.3参数传递及作用域1.利用内存变量属性传递参数,定义格式作用范围传递方向变量寿命,118,4.2子程序与参数传递,4.2.3参数传递及作用域(1)自然属性自然属性的内存变量含义:是指在程序(.PRG)中出现的没有特别声明而只是通过赋值或数组定义的变量。自然属性的内存变量特点定义格式:STORE/=、DIMENSION、DECLARE、INPUT、SUM等。作用范围:该程序及其调用的下属子程序。传递方向:单向。变量寿命:所在程序运行结束后,该变量被自动删除。P181例4.21,119,4.2子程序与参数传递,4.2.3参数传递及作用域(2)公用属性公用属性的内存变量含义:是指能在所有的程序中使用,并通过这种方式共享的内存变量。公用属性的内存变量必须先特别声明和定义后方能使用。公用属性的内存变量特点定义格式:PUBLIC作用范围:整个系统的所有程序。传递方向:双向(由主程序到子程序,也可以由子程序到主程序)。变量寿命:程序运行结束后,内存中仍然保存该变量。P182例4.22,注意:不能用PUBLIC定义已经用其他方法定义过的变量,但是用PUBLIC定义过的变量还可以再用PUBLIC定义。用PUBLIC定义过的变量的初值为逻辑假(.F.)。,120,4.2子程序与参数传递,4.2.3参数传递及作用域(3)私有属性私有属性的内存变量含义:是指具有既类似自然属性又能屏蔽上级同名内存变量属性的内存变量。私有属性的内存变量也必须先特别声明后方能使用。私有属性的内存变量特点定义格式:PRIVATE/ALLLIKE/EXCEPT作用范围:该程序及其调用的下属子程序。传递方向:单向(由主程序到子程序)。变量寿命:程序运行结束后,该变量被自动删除。特殊作用:可屏蔽(隐藏)上级(主)程序中与当前程序同名的变量,即对当前程序中变量的操作,不影响上级(主)程序中与当前程序同名的变量值。P184例4.23,注意:PRIVATE并不定义变量,而只是声明上级(主)程序中哪些变量被屏蔽(隐藏),哪些变量不被屏蔽(隐藏),121,4.2子程序与参数传递,4.2.3参数传递及作用域(4)本地属性本地属性的内存变量含义:是指具有既类似私有属性又不影响下属子程序中同名内存变量属性的内存变量。本地属性的内存变量必须先特别定义后方能使用。本地属性的内存变量特点定义格式:LOCAL作用范围:该程序本身。传递方向:无。变量寿命:程序运行结束后,该变量被自动删除。特殊作用:可屏蔽(隐藏)上级(主)程序中与当前程序同名的变量,即对当前程序中变量的操作,不影响上级(主)程序中与当前程序同名的变量值。同时也不受下属子程序中同名内存变量值的影响。P186例4.24,注意:不能在一个子程序或过程中重复定义一个内存变量,但如果在上级主程序中用PUBLIC、PRIVATE定义过的内存变量可以在子程序或过程中再用LOCAL定义。用LOCAL定义过的变量的初值为逻辑假(.F.),122,4.2子程序与参数传递,4.2.3参数传递及作用域2.利用DOWITH传递参数优点:在不受变量名限制的情况下能达到传递参数的目的。传递参数命令格式:DOWITH接收参数命令格式:PARAMETERS,123,4.2子程序与参数传递,4.2.3参数传递及作用域2.利用DOWITH传递参数参数传递与接收规则:P188例4.25、P189例4.26。传递参数命令可以出现在调用程序(主程序)中的任何位置,而接收参数命令必须出现在被调用程序(子程序)中的第一行。引用方式:当WITH后的中是内存变量列表时,每个内存变量的值传给PARAMETERS中对应变量,而该调用程序中的内存变量被隐含起来,但其值随着被调用程序中相对应变量的值的变化而变化。传值方式:当WITH后的中是内存变量表达式列表或单个内存变量用圆括号括起来时,每个内存变量表达式的值传给PARAMETERS中对应变量,而该调用程序中出现在表达式中的内存变量不被隐含,其值也不随着被调用程序中相对应变量的值的变化而变化。,124,4.2子程序与参数传递,4.2.4自定义函数1.自定义函数的设计(1)定义:是一个子程序(.PRG),它可以返回一个值到调用程序。(2)建立:与一般的命令文件的建立方法相同。自定义函数在过程文件中的存在形式为:FUNCTION自定义函数名语句序列ENDFUNC(3)特点在自定义函数程序中首条命令一般为(如果没有参数传送可略):PARAMETERS在自定义函数程序中尾条命令必须为:RETURN,注意:自定义函数与过程很相似,可以是一个独立的命令文件,也可以在一个过程文件中。与过程不同的是自定义函数必须返回一个值。,125,4.2子程序与参数传递,4.2.4自定义函数2.自定义函数调用与参数传递(1)调用:自定义函数名()(2)参数传送:既可以用传值的方式,也可以用引用的方式。P190例4.27、P191例4.28、P191例4.29。,注意:系统缺省的传送方式是传值方式,可用SETUDFPARMSTOVALUE/REFERENCE来设置。但无论SETUDFPARMSTO设置如何,如果在参数变量前冠以,则将采用引用方式。,126,4.3综合程序设计范例,4.3.1数值运算许多数学上的数值运算问题,都可以通过编写程序,利用计算机来解决。这将涉及到以下的基本算法:整除、求余数、累加和累乘等。1.整除用于整除处理的函数或运算符:截尾函数INT()、求余函数MOD()或求余运算符%。判断整除的表达式(设X、Y均为整数型数值表达式,判断X是否能被Y整除):INT(X/Y)=X/YMOD(X,Y)=0X%Y=0,127,4.3综合程序设计范例,4.3.1数值运算2.求余数用于求余处理的函数或运算符:截尾函数INT()、求余函数MOD()或求余运算符%。求余数的表达式(设X、Y均为整数型数值表达式,求X被Y除后的余数):X-INT(X/Y)*YMOD(X,Y)X%Y,128,4.3综合程序设计范例,4.3.1数值运算3.累加累加的实现方法:采用累加变量加上循环控制。累加操作的步骤:S=(一般情况下初值为零)(可选用DOWHILEENDDO或FORENDFOR)S=S+A,129,4.3综合程序设计范例,4.3.1数值运算3.累加,SETTALKOFFCLEARS=0FORN=1TO10S=S+NENDFOR?1+2+3+.+10=,SSETTALKON,SETTALKOFFCLEARS=0N=1DOWHILEN=10S=S+NN=N+1ENDDO?1+2+3+.+10=,SSETTALKON,130,4.3综合程序设计范例,4.3.1数值运算4.累乘累乘的实现方法:采用变量累乘加上循环控制。累乘操作的步骤:T=(一般情况下初值为1)(可选用DOWHILEENDDO或FORENDFOR)T=T*A,131,4.3综合程序设计范例,4.3.1数值运算P193例4.30。编写一个自定义函数,返回给定的正整数数值表达式的值中包含指定数码的个数(如数值2345105中包含数码5的个数为2)。数值末位个数剩下值2345105512345102345100123451234511123452345522342344223233222220(结束),由数值除10取余得到,由数值除10取整得到,132,4.3综合程序设计范例,4.3.1数值运算P193例4.30。编写一个自定义函数,返回给定的正整数数值表达式的值中包含指定数码的个数(如数值2345105中包含数码5的个数为2)。,FUNCTIONNCTPARAMETERSX,YSETTALKOFFS=0M=XDOWHILE.T.ENDDORETURNSENDFUNC,DOWHILE.T.N

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论