第8章结构化程序设计PPT课件_第1页
第8章结构化程序设计PPT课件_第2页
第8章结构化程序设计PPT课件_第3页
第8章结构化程序设计PPT课件_第4页
第8章结构化程序设计PPT课件_第5页
已阅读5页,还剩71页未读 继续免费阅读

下载本文档

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

文档简介

1、本章内容 程序设计基础(补充) 程序文件及其编辑环境 程序中几种常用命令 程序的基本控制结构 过程和用户自定义函数作业第1页/共76页程序设计基础(补充)程序的概念 程序是计算机完成一个预定任务而设计的一个指令序列。程序的特点 目的性 分步性 有限性 可操作性 有序性1.程序的概念和特点例如:求两个数的和。 Input “a=“ to a Input “b=“ to b C=a+b ?“a+b=“,c第2页/共76页 分析问题,确定处理方案 确定操作步骤 编写源程序 上机调试 整理资料2.程序设计的步骤如: 求二元一次方程AX2+BX+C=0的两个根。1.1.输入三个系数输入三个系数A A、B

2、 B、C C2.2.求求D=BD=B* *B-4B-4* *A A* *C C3.3.若若D0D0,输出两实根。,输出两实根。4.4.若若D=0D=0,输出相等的两实根。,输出相等的两实根。5.5.若若D0D0,输出两虚根。,输出两虚根。结束结束第3页/共76页评价程序质量标准:清晰第一,效率第二。按规范书写程序(锯齿型结构)。使用三种基本结构(顺序、选择、循环)。单入口、单出口、无死语句、无死循环。3.结构化程序设计的特点4.结构化程序设计的方法n自顶向下n模块化n逐步求精第4页/共76页8.1 程序文件及其编辑环境 程序文件介绍 程序文件的建立和运行 程序调试 VFP编程特点本节内容第5页

3、/共76页8.1.1 程序文件的建立和运行第6页/共76页n程序文件qVisual FoxPro系统将命令文件称为程序文件或程序。q 命令文件或程序文件的扩展名为.PRGn命令代码包括:q命令qVFP可理解的操作1.程序文件介绍第7页/共76页n命令格式:MODIFY COMMAND n菜单方式:选择“新建/程序”n功能:打开文本编辑窗口,用来建立或修改程序文件。n说明:qVisual FoxPro程序文件是一个扩展名为.PRG的文本文件。例8-1求当前日期和时间的长度,并显示。1.打开程序编辑器。2.输入程序代码。3.保存程序。建立步骤2.程序文件的建立第8页/共76页建立程序示例 例8-1

4、程序源代码如下:*-* 程序名称:E8_1.PRG* 功能:显示当前日期和时间*-a=DATE() & 求当前日期b=TIME() & 求当前时间a1=LEN(DTOC(a) & 求当前日期的长度b1=LEN(b) & 求当前时间的长度 ?当前日期和时间:,a,b & 显示日期和时间 ?日期和时间的长度:,a1,b1 * 显示日期和时间的字符串长度 第9页/共76页n命令格式:DO n菜单方式:选择“程序/运行”命令3.程序文件的执行注意:运行过程中,如果出现错误,可以重新进入编辑窗口进行编辑,然后再运行。上例运行结果:第10页/共76页8.1.2 调试

5、程序 调试就是为了发现程序中出现的问题及问题出现的位置并对其进行修正。1.打开“调试器”窗口n打开方式q选择“工具/调试器”命令q键入debug命令n调试方法q设置断点q单步执行q监视变量或表达式信息的变化第11页/共76页2.“调试器”窗口介绍监视窗口:显示表达式及它们的当前值,并能够在表达式上设置断点。跟踪窗口:代码运行时,用户可以利用该窗口观察到这些代码。局部窗口:用于显示给定的程序、过程或方法程序中的所有变量、数组、对象以及对象成员。调试输出窗口:用来显示活动程序、过程或方法程序代码的输出结果。调用堆栈窗口:可以显示正在执行的过程、程序和方法程序。第12页/共76页8.1.3 Visu

6、al FoxPro编程特点 1.变量不区分大小写n对于一般的变量,建议使用规则:TypeName。 建议的变量命名约定 第13页/共76页 可以直接赋值,根据赋值决定变量类型。 如nAge=25,表明nAge为整型变量,初始值为25。 如Flag=.F.表明lFlag为逻辑型变量,初始值是.F.。2.变量不需预先声明3.命令分行n程序中每条命令都以回车键结尾,一行只能写一条命令。若需分行书写,可以使用分号“;”表示续行。4.添加注释n系统可以对整行注释和行中部分注释。整行注释使用“*”,行中注释使用“&”。第14页/共76页8.2 程序中几种常用命令 基本输入命令 格式输入输出命令 程

7、序结尾命令本节内容 程序基本框架输入数据开始数据处理输出数据结束输入语句输出语句第15页/共76页8.2.1 基本输入命令 n格式:WAIT TO WINDOW AT , TIMEOUTn功能:暂停程序的执行并显示提示信息,按任意键或单击鼠标后继续执行程序。n说明:q使用TO 子句将把按下的键以字符形式保存到指定变量中,本命令只能接一个字符。若按下的是不可打印字符或是单击鼠标,则内存变量中存储空字符。1.WAIT命令第16页/共76页pWINDOW AT 指定显示的信息窗口在屏幕上的位置,若省略AT 则信息窗口显示在屏幕的右上角。省略该项,则在已显示内容之后显示信息。pTIMEOUT N 指定

8、自动等待键盘或鼠标输入的秒数,该项必须放在WAIT语句的最后。p缺省wait后的提示信息,将显示“按任意键继续”。n说明:例如,WAIT 继续查询吗?(Y/N)? TO JX WAIT 请选择(1/2/3):“ TO XZ WINDOW TIMEOUT 3 WAIT第17页/共76页n格式:ACCEPT TO n功能:从键盘上输入一个字符串常量给内存变量。n说明:q 是提示语,从键盘上输入的字符串不必用定界符括起来。q用来保存键盘上输入的字符串。2.ACCEPT命令例如,accept 请输入要查找的人名 TO name ?name第18页/共76页n格式:INPUT TO n功能:是提示语,可

9、通过键盘输入数值型、字符型、日期型、逻辑型、货币型等数据给。n说明:q若输入字符型数据,一定要加定界符(与ACCEPT不同)。 3.INPUT命令 例如,INPUT 请输入姓名: TO XM INPUT 请输入出生日期: TO RQ INPUT 请输入入学成绩: TO CJ INPUT 是团员吗? TO TY ? XM,RQ,TY,CJ第19页/共76页8.2.2 格式输入输出语句n格式: Say Picture n功能:在制定的行列位置按格式输出表达式的值。第20页/共76页8.2.3 程序结尾命令 格式:RUTURN 功能:能使程序执行结束,并返回到调用它的上级程序继续执行,若无上级程序则

10、返回到命令窗口。 说明:了解另两条程序结束命令: CANCEL:它可以中止程序运行,并返回到命令窗口。 QUIT:可以结束程序运行退出Visual FoxPro系统。第21页/共76页8.3 程序的基本控制结构 顺序结构 条件分支结构 循环结构本节内容 顺序结构 选择结构 循环结构第22页/共76页8.3.1 顺序结构 顺序结构的程序运行时按照语句序列的先后顺序,一条接一条地执行,它是程序中最基本的结构。例8-2计算圆的周长和面积。Clearinput 请输入圆的半径: TO r & 输入半径c=2*3.14*r & 计算圆的周长s=3.14*r*r & 计算圆的面积?

11、圆的周长:,c & 输出周长?圆的面积:,s & 输出面积第23页/共76页例8-3查找显示张宇飞的年龄。ClearUse student & 打开学生表Accept 请输入查询的姓名: to xm Locate for sname=xm & 定位要找的人?xm+“的年龄是:”+str(sage,2) & 输出年龄Use & 关闭表第24页/共76页8.3.2 条件分支结构 格式:IF ENDIF 功能:首先计算的值,若其值为真,对IF与ENDIF之间的语句顺序执行,然后执行ENDIF后面的语句;若其值为假,直接执行ENDIF后面的语句。1.简单

12、的条件语句 简单条件语句逻辑图逻辑表达式语句序列ENDIF后面的语句NY第25页/共76页简单条件查询示例例8-4求一个数的绝对值。Input 请输入一个数 TO x?xIF x0 x=-xENDIF? 的绝对值是: ,xX0 x=-xNY(该程序流程图)输入x输出x执行分支条件第26页/共76页简单条件查询示例例8-5将徐克老师的职称改为副教授。Use teacherLocate for tname=徐克 & 定位记录 If found() & 如果找到 display tname,ttitle & 显示记录 replace ttitle with 副教授 &

13、 替换职称字段的内容 displayendifuse思考:能不能用SQL语句解决该问题?Update teacher set ttitle=“副教授” where tname=“徐克”第27页/共76页 格式:IF ELSE ENDIF 功能:若的值为真,先执行,然后再执行ENDIF后面的语句;若其值为假,先执行,然后执行ENDIF后面的语句。 2.带ELSE的条件语句 带ELSE的条件语句逻辑图逻辑表达式语句序列1ENDIF后面的语句NY语句序列2第28页/共76页双分支条件查询示例例8-6上例考虑找不到记录的的情况,可以这样处理:Use teacherLocate for tname=徐克

14、If found() display tname,ttitle replace ttitle with 副教授 displayelse wait window 找不到徐克老师 at 10,10endifuse第29页/共76页 格式:DO CASE CASE CASE CASE OTHERWISE ENDCASE 功能:执行多重分支操作。 3.多分支语句第30页/共76页 多分支语句逻辑图第31页/共76页多分支条件示例例8-7显示当前季节。yue=MONTH(DATE()DO CASE CASE INLIST(yue,3,4,5) jj=春 CASE INLIST(yue,6,7,8) jj

15、=夏 CASE INLIST(yue,9,10,11) jj=秋 CASE INLIST(yue,12,1,2) jj=冬ENDCASEWAIT jj WINDOW第32页/共76页8.3.3 循环结构程序 循环结构 循环结构是指程序在执行的过程中,程序中的某段代码被重复执行若干次。被重复执行的代码段,通常称之为循环体。 VFP提供的循环语句 条件循环(WHILE) 步长循环(FOR) 扫描循环(SCAN)第33页/共76页 格式:DO WHILE ENDDO 功能:若的值为真,执行,一旦遇到ENDDO自动返回DO WHILE重新判断条件是否成立,以决定是否继续循环。1.条件循环逻辑表达式语句

16、序列1NY执行ENDDO后面的语句条件循环语句的执行流程第34页/共76页 说明: 注意设置正确的循环条件。 循环体内应有改变循环条件的语句。 例8-8编写一个能够多次查找某学生记录的程序,查找字段为姓名。操作步骤1.设置循环变量yes,当它的值为“Y”时,可以查询学生信息。2.每查询一名学生信息,询问用户是否继续,如果输入“Y”给yes变量继续查询,输入其它,停止查询。第35页/共76页yes=Y USE studentDO WHILE UPPER(yes)=Y clear accept “请输入查找姓名:” to xm LOCATE FOR sname=xm IF FOUND() DISP

17、LAY ELSE WAIT 查无此人 WINDOW ENDIF wait “继续查找吗?” to yesENDDOUse条件循环示例源代码循环条件改变循环条件第36页/共76页 格式: FOR = TO STEP ENDFOR|NEXT 功能:语句执行时,通过比较循环变量值与终值来决定是否执行。步长为正数时,若循环变量值不大于终值就执行循环体;步长为负数时,若循环变量不小于终值就执行循环体。一旦遇到ENDFOR或NEXT,循环变量值即加上步长,然后返回到FOR语句重新与终值比较。STEP 一项可以缺省,步长缺省值为1。2.步长循环第37页/共76页步长型循环语句执行流程循环体循环变量增加步长循

18、环变量获得初值FT循环变量在终值内第38页/共76页步长型循环示例例8-9 编写程序计算S=1+2+1000之和。clears=0for i=1 to 1000 s=s+inext? s=1+2+1000 =:,s也可以这样写:clears=0i=1Do while i=A and upper(ch)=0 and ch=A and upper(ch)=0 and ch=9 & 判断数字 num=num+1 otherwise others=others+1 endcaseENDFOR? 字符个数:+STR(alpa)+ 空格个数:+STR(kong)? 数字个数:+STR(num)+

19、其他字符个数:+STR(others)第42页/共76页 格式: SCAN FOR ENDSCAN 功能:SCAN 循环针对当前表进行循环,子句表示记录范围,缺省值为 ALL 。语句执行时在中依次寻找满足 FOR 条件的记录,并对找到的记录执行。3.扫描循环第43页/共76页Skip+1TEof( )循环体FScan 指针型循环语句的执行流程第44页/共76页扫描型循环示例例8-11显示年龄大于等于19的学生记录。CLEAR USE studentSCAN FOR sage=19 DISPLAY sname,sageENDSCANUSE也可以这样写:clearUSE xsqkDo while

20、not eof() if sage=19 DISPLAY sname,sage endif skipEnddoUse第45页/共76页实验作业批讲用三种循环语句统计xsqk表中入学分数超过570分的人数 。1.条件循环语句CLearUSE xsqkRs=0Do while not eof( ) if 入学分数=570 rs=rs+1 enddif skip Enddo?“超过570人数共:”,rsUSE2. 固定次数循环语句CLEAR USE xsqkjls=reccount()Rs=0For i=1 to jls if 入学分数=570 rs=rs+1 enddif skip Endfor?

21、“超过570人数共:”,rsUSEgo iif 入学分数=570 rs=rs+1enddif 第46页/共76页3.扫描型循环语句CLearUSE xsqkRs=0Scan for 入学分数=570 rs=rs+1Endscan?“超过570人数共:”,rsUSE三种循环语句比较:1. 条件循环语句是一种万能型循环语句,适合解决所有遇到的循环问题。2. 固定次数的循环语句适用已知循环次数的循环。3. 扫描型循环专门针对数据表操作,如果遍历数据表记录时,使用它最方便。第47页/共76页 在各种循环语句的循环体中可以插入LOOP和EXIT语句,前者能使执行转向循环语句头部继续循环;后者则用来立即退

22、出循环,转去执行ENDDO、ENDFOR或ENDSCAN后面的语句。 两个循环语句的转向功能示意图:4.辅助循环语句DO WHILE Loop ENDDODO WHILE EXIT ENDDOLOOP语句的转向 EXIT语句的转向 第48页/共76页LOOP语句转向示例例8-9输入任意10个整数,将所有正整数显示出来。CLEARFOR i=1 TO 10 INPUT 输入一个整数: TO a IF a0 ?a ENDIFENDFOR第49页/共76页EXIT语句转向示例例8-10输入任意个整数,分别统计偶数和奇数的个数,输入0结束。Store 0 to ou,jiDO WHILE .T. IN

23、PUT 输入一个整数: TO a Do case case a=0 exit case mod(a,2)=0 ou=ou+1 otherwise ji=ji+1 Endcase ENDDO?“奇数个数:”,ji ,偶数个数:,ou也可以这样写:Store 0 to ou,jiDO WHILE .T. INPUT 输入一个整数: TO a IF a=0 exit ENDIF IF INT(a/2)=a/2 ou=ou+1 ELSE ji=ji+1 ENDIFENDDO?“奇数个数:”,ji ,偶数个数:,ou第50页/共76页 多重循环也称循环的嵌套,所谓嵌套就是一个循环程序的循环体内又包含着另

24、一些循环。 嵌套要求:层数不限,但内层循环必须完全包含在外层循环之中,如右图:5.多重循环DO WHILE DO WHILE DO WHILE ENDDO ENDDO ENDDO 第51页/共76页下面的循环嵌套是正确的。下面的循环嵌套交叉,是错误的。多重循环注意事项第52页/共76页多重循环示例例8-11用筛选法找出2-50之间的所有素数。解题思路1.素数的概念:只能被1和它本身整除的数。2.判断一个数x是否为素数,只需判断该数不能整除2 到SQRT(x)之间的任意一个整数即可。第53页/共76页CLEARFOR i=2 TO 50 k=INT(SQRT(i) flag=.T. &

25、素数标志 For j=2 to k IF MOD(i,j)=0 flag=.F. & 标识i不是素数 EXIT & 退出DO WHILE 循环 ENDIF Endfor IF flag=.T. ?i & 输出素数 ENDIFENDFOR第54页/共76页8.4 过程和用户自定义函数 主程序和子程序 过程 自定义函数 变量的作用域本节内容第55页/共76页 调用子程序语句:DO 返回语句:RETURN 返回语句说明: TO MASTER 使返回时直接返回到最外层主程序,TO 强制返回到指定的程序文件。 RETURN返回到调用它的主程序。1.子程序的调用和返回8.4.1 主

26、程序和子程序对于两个具有调用关系的程序文件,常称调用程序为主程序,被调用程序为子程序。第56页/共76页子程序调用示例例8-12计算圆面积的主程序为e8_12.prg,子程序为sub.prg。*主程序:CLEAR DO WHILE .T. WAIT “要计算圆的面积(Y/N)?” ; TO cAnswer IF UPPER(cAnswer) =“Y” DO Sub.prg ELSE EXIT ENDIFENDDO*子程序sub.prgCLEARinput 请输入圆的半径: to rs=3. 14*r2? 圆的面积为: + STR(s,10,2)RETURN第57页/共76页 调用参数命令:DO

27、 WITH 子程序接受参数命令: PARAMETERS 说明: 调用命令的中的参数可以是表达式,但若为内存变量必须具有初值。 子程序接受参数命令中的参数表只能变量名。2.带参数子程序的调用第58页/共76页带参数子程序调用示例例8-13设计一个计算圆的面积的子程序sub.prg,要求在主程序中带参数调用。*主程序:CLEARymj=0 *初始化用于接收圆面积的变量input 请输入圆的半径: to bj DO sub WITH bj,ymj*带参数调用子程序?圆的面积为:+STR(ymj,10,2)RETURN*子程序sub.prgPARAMETERS r,s*参数接收语句s=3.14*r*2

28、RETURN第59页/共76页8.4.2 过程 过程也是一个具有一定功能的程序段,是子程序的另一种形式。 与子程序的区别: 子程序是一个独立的PRG文件。 过程可以和主程序放在一起,也可以和其他过程放在一个过程文件中,过程文件也是一个PRG文件。第60页/共76页1.过程的建立 格式:PROCEDURE PARAMETERS RETURN 功能:定义一个过程。 说明:过程作为程序的一部分时往往放在程序的最后。调用过程的方法和调用子程序类似。第61页/共76页过程调用示例例8-14编制过程,去除原始字符串中的非数字字符,返回只含数字的新串。CLEARcTest=(123)45-6789 0cSh

29、ow=do NumbersOnly with ; cTest,cShow?cShowPROCEDURE NumbersOnly PARAMETERS cMixedVal,cNumOnly FOR nCnt=1 TO LEN(cMixedVal) cCharacter=SUBSTR(cMixedVal,nCnt,1) IF ISDIGIT(cCharacter) cNumOnly=cNumOnly+cCharacter ENDIF ENDFORENDPROC 和子程序不同,过程和调用程序放在一起。第62页/共76页2.过程文件 过程文件:多个过程或自定义函数可以放在一起,组成过程文件,扩展名为.

30、PRG,其基本形式如下: PROCEDURE ENDPROCPROCEDURE ENDPROC第63页/共76页 过程文件的打开命令:SET PROCEDURE TO 过程的调用: DO IN 过程文件的关闭:SET PROCEDURE TO 例8-15主程序可用来计算圆的面积和周长,其中求圆面积和周长由过程proc1和proc2实现,过程定义在过程文件proc.prg中。第64页/共76页过程文件示例主程序:SET PROCEDURE TO proc*打开过程文件nSelect=0DO WHILE .T. CLEAR ?“请选择:” ?“1计算圆面积” ?“2计算圆周长” ?“0退出” In

31、put “请您选择的功能:” to nSelect DO CASE CASE nSelect=1 DO proc1 *调用计算圆面积过程 CASE nSelect=2 D O p r o c 2 *调用计算圆周长过程 CASE nSelect=0 EXIT ENDCASEENDDOSET PROCEDURE TO *关闭过程文件第65页/共76页过程文件源代码过程文件proc.prg:* 计算圆面积过程proc1PROCEDURE proc1CLEAR? “请输入圆的半径:” to bj s = 3.14*bj*2? “圆的面积为:” + STR(s,10,2)WAIT WINDOWRETUR

32、N* 计算圆周长过程proc2PROCEDURE proc2CLEAR?“请输入圆的半径:” to bjs = 2*3. 14*bj? “圆的周长为:” + STR(s,10,2)WAIT WINDOWRETURN第66页/共76页 格式:FUNCTION PARAMETERS RETURN 功能:定义一个用户自定义函数。 说明: 如果使用接收参数语句PARAMETERS ,必须放在FUNCTION后第一个语句。 RETURN用来返回函数值,若缺省,返回.T.。8.4.3 自定义函数第67页/共76页自定义函数示例调用函数的主程序:CLEARcTest= (123)45-6789 0 & 原始字符串? 转换前的串:,ctest? 转换前的串:, NumbersOnly(cTest) &调用函数例8-16编制函数,去除原始字符串中的非数字字符,返回只含数字的新串。第68页/共76页自定义函数源代码FUNCTION NumbersOnly(cMixedVal)cNumOnly= & 初始化新字符串FOR nCnt=1 TO LEN(cMixedVal) & 扫描整个字符串 cCharacter=SUBSTR(cMixedVal,nCnt,1)

温馨提示

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

评论

0/150

提交评论