收藏 分享(赏)

VFP第6章2009 第6章 结构化程序设计.ppt

上传人:dreamzhangning 文档编号:3329883 上传时间:2018-10-14 格式:PPT 页数:21 大小:655KB
下载 相关 举报
VFP第6章2009  第6章 结构化程序设计.ppt_第1页
第1页 / 共21页
VFP第6章2009  第6章 结构化程序设计.ppt_第2页
第2页 / 共21页
VFP第6章2009  第6章 结构化程序设计.ppt_第3页
第3页 / 共21页
VFP第6章2009  第6章 结构化程序设计.ppt_第4页
第4页 / 共21页
VFP第6章2009  第6章 结构化程序设计.ppt_第5页
第5页 / 共21页
点击查看更多>>
资源描述

1、Visual Foxpro程序设计,上海交通大学出版社,07:29,2,第6章 结构化程序设计,程序设计概念,使用计算机解决实际问题,首先要对问题进行分析并建立数学模型,然后考虑数据的组织方式和算法,并用某一种程序设计语言编写程序,最后调试程序,使之运行后能产生预期的结果。,算法,算法是解决问题的逻辑步骤,是对特定问题求解步骤的一种描述。只有通过算法能够描述的问题,才能通过计算机求解。对同一个问题,可以有不同的解题方法和步骤,也就有不同的算法。,计算机算法:用程序解决问题的逻辑步骤,是指令的有限序列。可分为科学计算领域(处理数值数据)和数据处理领域(处理非数值领域)两大类。,算法的基本特征,输

2、入:有零个或多个数据的输入。,输出:有一个或多个数据的输出。,有穷性:一个算法应包含有限的操作步骤,而不能是无限的。,确定性:算法中每一个步骤应当是确定的,不应是含糊、模棱两可的。,可行性:算法中每一个步骤应当能有效地执行,并得到确定的结果。,07:29,3,第6章 结构化程序设计,算法的表示,用自然语言表示:自然语言可以是中文、英文、数学表达式等,通俗易懂但表达文字可能过长,表示不太严格,对分支和循环结构表示很不方便。,【例】求数列1+2+m的值N,当N10000时结束。算法可表示如下:,N=0; m=0; m加1; N加m 判断N是否大于10000,如果满足条件则结束,不满足条件则再从开始

3、继续执行。,【例】对于一个大于或等于n的正整数,判断它是不是一个素数,算法可表示如下:,输入n的值; i=2; n被i除,得余数r; 如果r=0,表示n能被i整除,则打印“n不是素数”,算法结束;否则执行; i+1i; 如果in-1,返回;否则打印“n是素数”;算法结束(或如果i ,返回;否则打印“n是素数”;算法结束) 。,07:29,4,第6章 结构化程序设计,用流程图表示:用一些符号来表示各种操作,形象直观、简单,易于理解、修改和交流。,【例】用框图描述 如下函数的求解过程:,start,Input x,X0 ?,y=5,y=-5,Output y,end,N,Y,用伪代码表示利用介于自

4、然语言和计算机语言之间的文字和符号来描述算法,它不用图形符号,这种表示方法书写方便,格式紧凑,容易理解,也便于向计算机语言算法转换。,【例】用伪代码表示计算10!的算法:,Begin(开始)置t的初值为1(1t)置i的初值为2(2i)当(while) i=10,执行(do),Begin使t=tI使i=i+1End 打印t 的值(print t) End(结束),07:29,5,6.1 程序文件 程序文件建立与修改:通过菜单、项目管理器或在命令窗口中输入命令,打开编辑命令的文本编辑窗口。 命令格式:MODIFY COMMAND 功能:打开文本编辑窗口,用来建立或修改程序文件,文件名由用户指定,缺

5、省的扩展名为.PRG。程序中每条命令都以回车键结尾,一行只能写一条命令。若命令需分行书写,应在一行终了时键入续行符“;”,然后按回车键。 程序的运行命令: 通过菜单、项目管理器或在命令窗口中输入命令,可以运行程序。 命令格式: DO DO命令默认运行.PRG程序(扩展名可省略),如要运行其它程序,文件名中须包括扩展名。 程序结尾的专用命令:RETURN &结束程序执行并返回到调用它的上级环境中继续。允许缺省。CANCEL &终止程序的运行并清除程序的私有变量,返回到命令窗口。QUIT &退出VFP系统,返回到操作系统状态。,第6章 结构化程序设计,07:29,6,第6章 结构化程序设计,非格式

6、输入命令: 命令格式:Input ”提示信息” To 功能:在屏幕上显示“提示信息”后,暂停程序运行,等待从键盘输入数据,一旦敲“Enter”键后,停止输入数据,并将之前输入的数据赋给“To” 后面指定的内存变量。输入的数据可以是常见的C、N、D、L类型,命令格式:Accept ”提示信息” To 功能:在屏幕上显示“提示信息”后,暂停程序运行,等待从键盘输入数据,一旦敲“Enter”键后,停止输入数据,并将之前输入的数据赋给“To” 后面指定的内存变量。输入的数据只能是字符型数据,因此不需加定界符。,非格式输出命令:命令格式:?|? 功能:一个问号是从屏幕下一行的第一列开始显示表达式表的结果

7、,二个问号是从屏幕当前行、当前列开始显示表达式表的结果。“表达式表”可以由一个或多个表达式组成的输出项,若多个表达式,则表达式之间用逗号“,”分隔。(建立p6-1.prg),程序注释命令:命令格式:note | * 注释& 注释 功能:第一个命令在程序中加注释行信息,第二个命令在命令语句的尾部加注释信息。注释是不可执行的部分,它对程序的运行结果不会产生任何影响。,07:29,7,信息对话框函数 函数格式: MESSAGEBOX(,),功能:供用户定义信息对话框,按下一次按钮即返回一个数值。用于指定在对话框中显示的信息文本。用于指定对话框标题栏的显示文本。用于根据表中的内容设定对话框中的按钮、图

8、标和默认按钮,缺省该参数表示取0。函数返回值是一个数值,用户将根据操作时点击的按钮来获得相应的返回值,编程时则根据返回值来设置动作。,第6章 结构化程序设计,Ans=messagebox(”是否确认删除文件?”,4+32+0,”删除文件”),07:29,8,6.2 程序的控制结构1.顺序结构这是最简单的一种结构,语句或基本结构的执行按照它们出现的先后顺序。A块执行完毕后,再执行B块,该结构只有一个入口,只有一个出口。A块、B块可以是一条语句,也可以是一个基本结构。 (建立p6-2.prg),分支语句格式: IF ELSE (建立p6-3.prg) ENDIF,该结构的特点是根据条件真假,选择两

9、个或两个以上分支中的一个分支来执行。选择结构有两种变形;一是没有B2块,条件成立时执行B1块,条件不成立时直接转到B处;二是多重选择,即有三个以上的分支供选择。,第6章 结构化程序设计,2.选择结构,07:29,9,【例】试编一程序,删除磁盘上任一文件。,【例】试编一程序,根据输入的三角形边长,求三角形面积。,第6章 结构化程序设计,*p4-4.prgcleaaccept ”请输入文件名(包括扩展名):” to bm bm=allt(bm)If file(“&bm”)delete file &bmElsemessagebox(”你要删除的文件不存在,是否输入有误!”)Endifretu,*p4

10、-5.prgcleainput ”请输入边长a:” to ainput ”请输入边长b:” to binput ”请输入边长c:” to cif a+bc or b+ca or c+abmessagebox(”输入的三个边长不能组成三角形”)retuendif l=(a+b+c)/2? ”三角形面积s=”,sqrt(l*(l-a)*(l-b)*(l-c)retu,07:29,10,多分支语句格式: DO CASECASE CSAE CASE OTHERWISE ENDCASE (建立p6-6.prg),3. 循环结构该结构的特点是根据条件,重复执行一个语句块。当给定条件满足时,执行B块,执行B

11、块后再返回测试条件是否满足,如此循环反复执行B块,直到条件测试不满足为止。B块可以是单个语句,也可以是基本块。该结构只有一个入口,只有一个出口。,第6章 结构化程序设计,07:29,11,第6章 结构化程序设计,条件循环语句格式,DO WHILE EXIT语句序列2LOOP语句序列3ENDDO,【例】编程计算S=1+2+3+100,并求1100之间奇数之和。,【例】编程逐行显示学生表中入学成绩大于600分的学生学号、姓名、性别和入学成绩。,clear use studentsgo topdo while not eof()if rxcj600? xh,xm,xb,rxcjendifskipen

12、ddouse,*p6-11.prg clea store 0 to i,s,t do while i100i=i+1s=s+iif int(i/2)=i/2loopendift=t+1 enddo ? “1+2+3+100=“,s ? “1100奇数和为:“,t retu,07:29,12,第6章 结构化程序设计,FOR循环语句格式,FOR = TO STEP EXIT语句序列2LOOP语句序列3ENDFOR|NEXT,*p6-9 clea s=0 for i=1 to 100 s=s+i next ? “s=“,s retu,【例】编程求s=1+2+3+100。,【例】编程输出如右侧图案。,

13、clea for i=1 to 4? space(4-i)for j=1 to 2*i-1? “*“next next for i=1 to 3? space(i)for j=1to 6-(2*i-1)? “*“next next retu,【例】编程输出如下图乘法口诀表。,note 打印乘法口诀表 clear for a=1 to 9? for b=1 to ap=a*b? str(a,1)+“+str(b,1)+“=“+str(p,2)+space(2)next next retu,07:29,13,第6章 结构化程序设计,扫描循环语句格式,SCAN FOR EXIT语句序列2LOOP语句

14、序列3 ENDSCAN,【例】在Students.DBF中找出所有入学成绩在590至600的学生的学号、姓名、性别、入学成绩,并要求在各输出行下显示一行虚线。,*p6-12.prg clea use students ? replicate(“-“,30) ? “ 学 号 “,“ 姓名 “,“性别“,“入学成绩“ ? replicate(“-“,30) scanif between(rxcj,590,600)? xh,xm,xb,rxcj? replicate(“-“,30)endif endscan use retu,【例】在逐行输出Students表中女团员的姓名、性别、出生日期、是否团员

15、和班号的信息。,* p6-11.prgclea USE students? “姓 名“ ,“性别“,“出生日期“,“是否团员“,“班号“? replicate(“-“,32)SCAN FOR xb=“女“ and ynty? xm,xb,csrq,ynty,bhENDSCANUSEretu,07:29,14,多模块程序模块是可以命名的一个程序段,可指主程序、子程序或自定义函数。对于两个具有调用关系的程序文件,常称调用程序为主程序,被调用程序为子程序,子程序的末尾中返回处必须有返回语句。,*MAIN.PRG DO B RETURN,*B.PRG DO C1 DO C2 RETURN,*C1.PR

16、G RETURN,*C2.PRG RETURN TO MASTER,第6章 结构化程序设计,07:29,15,第6章 结构化程序设计,【例】设计一个计算圆面积的子程序,并要求在主程序中带参数调用它,*js.prg parameters r,s s=pi()*r*r retu,*p6-13.prg clea ymj=0 input “请输入半径:“ to bj do js with bj,ymj ? “ymj=“,ymj retu,07:29,16,变量的作用域,第6章 结构化程序设计,07:29,17,第6章 结构化程序设计,*qmj.prgif a+bc or b+ca or c+ab l=

17、(a+b+c)/2s=sqrt(l*(l-a)*(l-b)*(l-c)elsemessagebox(“不能构成三角形”) endif return,*main.prgcleas=0input ”请输入边长a:” to ainput ”请输入边长b:” to binput ”请输入边长c:” to cDo qmj? ”三角形面积s=”,sretu,调用子程序时的数据传递,利用变量的作用域实现数据传递,在主程序中定义的变量,如果在子程序中没有被屏蔽,就可以直接使用,并且如果在子程序中被改变,改变的结果将带回到主程序中。,【例】编程通过调用子程序,使用变量传递三角形边长数据,求三角形面积。,07:2

18、9,18,第6章 结构化程序设计,利用参数实现数据传递,在主程序调用子程序时,通过Do命令所携带的With参数表来提供输入值和接收输出结果,在编写子程序时,将这些要输入、输出的变量用PARAMETERS命令来说明。充当传递数据的主程序中Do命令里With所携带的参数称为实际参数,子程序中Parameters后面与之对应的参变量称为形式参数,实参的个数必须和形参的个数相等,一一对应,各参数之间用逗号隔开,最多能传递24个参数。,*qmj.prgparameters a,b,c,sprivate lif a+bc or b+ca or c+ab l=(a+b+c)/2s=sqrt(l*(l-a)*

19、(l-b)*(l-c)elsemessagebox(“不能构成三角形”) endif return,*main.prgcleaarea=0input ”请输入边长x:” to xinput ”请输入边长y:” to yinput ”请输入边长z:” to zDo qmj with x,y,z,area? ”三角形面积area=”,arearetu,参数传递有值传递和地址传递两种方式,使用值传递,则子程序中参数变化后的值不回传给上级调用程序,使用地址传递,则子程序中参数变化后的值要回传给上级调用程序。,07:29,19,在计算机程序设计技术中,“错误”是指程序的功能不正常,而检测、定位并排除程序

20、中的错误称“调试”。程序调试目的是对程序运行中出现的某些错误进行修改,并通过调试来发现可能隐藏的错误。程序中常见的错误有语法错误、逻辑错误两类。语法错误相对容易发现和修改,当程序运行遇到这类错误时,VFP会自动中断程序的执行,并弹出编辑窗口,显示出错的命令行,给出出错信息,这时可以方便地修改错误。逻辑错误发现较难,这类错误系统是无法确定的,只有由用户自己来查错,此时往往需要跟踪程序的执行,在动态执行过程中监视并找出程序中的错误。,第6章 结构化程序设计,程序调试,查错技术可分为在计算机上执行程序来发现其中的错误的动态检查和用阅读程序的方法来发现其中的错误静态检查。动态检查可通过设置断点、单步执

21、行、跟踪和设置错误陷阱的方法来检测。VFP提供了一个“调试器”的程序调试工具,在调试器窗口中,用户选择“窗口”菜单中的相应命令可有选择地打开“跟踪窗口”、“监视窗口”、“局部窗口”、“调用堆栈窗口”和“调试输出窗口”共5个子窗口,通过调试设置、执行程序和修改程序来完成程序的调试。调试设置包括为程序设置断点,设置监视表达式,设置要显示的、数组等;执行程序有多种方式,用于观察各种设置的动态执行结果;发现错误,允许立即切入程序修改。,07:29,20,第6章 结构化程序设计,结构化程序设计方法,结构化程序设计采用自顶向下、逐步求精和模块化的分析方法。,自顶向下是指对设计的系统要有一个全面的理解,从问

22、题的全局入手,把 一个复杂问题分解成若干个相互独立的子问题,然后对每个子问题再做进一步的分解,如此重复,直到每个问题都容易解决。,逐步求精是指程序设计的过程是一个渐进的过程,先把一个子问题用一个程序模块来描述,再把每个模块的功能逐步分析细化为一系列的具体步骤,以致能用某种程序设计语言的基本控制语句来实现,模块化是把大程序按照功能分为较小的程序。通常一个程序是由一个主控模块和若干个子模块组成,主控模块用来完成某些公用操作及功能的选择,而子模块用来完成某项特定的功能。作为一个子模块,它也可以控制更下一层的子模块。,典型的数据库应用系统通常含有输入、修改、查询、统计、打印报表等功能模块,它是一个多模块系统,一般通过菜单来管理这些模块。例6-19是用传统的结构化程序设计方法编写的程序。(建立p6-19.prg),07:29,21,谢谢使用!,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报