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

下载本文档

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

文档简介

1、会计学1第第8章结构化程序设计章结构化程序设计作业第1页/共76页n可操作性n有序性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 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页/

2、共76页3.结构化程序设计的特点4.结构化程序设计的方法n自顶向下n模块化n逐步求精第4页/共76页本节内容第5页/共76页第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、码。3.保存程序。建立步骤2.程序文件的建立第8页/共76页*-* 程序名称: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页1.打开“调

4、试器”窗口n打开方式q选择“工具/调试器”命令q键入debug命令n调试方法q设置断点q单步执行q监视变量或表达式信息的变化第11页/共76页2.“调试器”窗口介绍监视窗口:显示表达式及它们的当前值,并能够在表达式上设置断点。跟踪窗口:代码运行时,用户可以利用该窗口观察到这些代码。局部窗口:用于显示给定的程序、过程或方法程序中的所有变量、数组、对象以及对象成员。调试输出窗口:用来显示活动程序、过程或方法程序代码的输出结果。调用堆栈窗口:可以显示正在执行的过程、程序和方法程序。第12页/共76页1.变量不区分大小写n对于一般的变量,建议使用规则:TypeName。 建议的变量命名约定 第13页/

5、共76页2.变量不需预先声明3.命令分行n程序中每条命令都以回车键结尾,一行只能写一条命令。若需分行书写,可以使用分号“;”表示续行。4.添加注释n系统可以对整行注释和行中部分注释。整行注释使用“*”,行中注释使用“&”。第14页/共76页本节内容 程序基本框架输入数据开始数据处理输出数据结束输入语句输出语句第15页/共76页n格式:WAIT TO WINDOW AT , TIMEOUTn功能:暂停程序的执行并显示提示信息,按任意键或单击鼠标后继续执行程序。n说明:q使用TO 子句将把按下的键以字符形式保存到指定变量中,本命令只能接一个字符。若按下的是不可打印字符或是单击鼠标,则内存变量中存储

6、空字符。1.WAIT命令第16页/共76页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功能:是提示语,可通过键盘输入数值型、字符型、日期型、逻辑型、货币型等数据给。n说明:q若

7、输入字符型数据,一定要加定界符(与ACCEPT不同)。 3.INPUT命令 例如,INPUT 请输入姓名: TO XM INPUT 请输入出生日期: TO RQ INPUT 请输入入学成绩: TO CJ INPUT 是团员吗? TO TY ? XM,RQ,TY,CJ第19页/共76页n格式: Say Picture n功能:在制定的行列位置按格式输出表达式的值。第20页/共76页n统。第21页/共76页本节内容 顺序结构 选择结构 循环结构第22页/共76页例8-2计算圆的周长和面积。Clearinput 请输入圆的半径: TO r & 输入半径c=2*3.14*r & 计算圆的周长s=3.1

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

9、共76页例8-4求一个数的绝对值。Input 请输入一个数 TO x?xIF x0 x=-xENDIF? 的绝对值是: ,xX真,先执行,然后再执行ENDIF后面的语句;若其值为假,先执行,然后执行ENDIF后面的语句。2.带ELSE的条件语句 带ELSE的条件语句逻辑图逻辑表达式语句序列1ENDIF后面的语句NY语句序列2第28页/共76页例8-6上例考虑找不到记录的的情况,可以这样处理:Use teacherLocate for tname=徐克If found() display tname,ttitle replace ttitle with 副教授 displayelse wait

10、window 找不到徐克老师 at 10,10endifuse第29页/共76页CASE OTHERWISE ENDCASEn功能:执行多重分支操作。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=夏 CASE INLIST(yue,9,10,11) jj=秋 CASE INLIST(yue,12,1,2) jj=冬ENDCASEWAIT jj WINDOW第32页/共76页第33页/共76页1.条

11、件循环逻辑表达式语句序列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() DISPLAY ELSE WAIT 查无此人 WINDOW

12、 ENDIF wait “继续查找吗?” to yesENDDOUse循环条件改变循环条件第36页/共76页2.步长循环第37页/共76页循环体循环变量增加步长循环变量获得初值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=19 DISPLAY sname,sageENDSCANUSE也可以这样写:cl

13、earUSE xsqkDo while not eof() if sage=19 DISPLAY sname,sage endif skipEnddoUse第45页/共76页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?“超过570人数共:”,rsUS

14、Ego iif 入学分数=570 rs=rs+1enddif 第46页/共76页3.扫描型循环语句CLearUSE xsqkRs=0Scan for 入学分数=570 rs=rs+1Endscan?“超过570人数共:”,rsUSE三种循环语句比较:1. 条件循环语句是一种万能型循环语句,适合解决所有遇到的循环问题。2. 固定次数的循环语句适用已知循环次数的循环。3. 扫描型循环专门针对数据表操作,如果遍历数据表记录时,使用它最方便。第47页/共76页4.辅助循环语句DO WHILE Loop ENDDODO WHILE EXIT ENDDOLOOP语句的转向 EXIT语句的转向 第48页/共

15、76页例8-9输入任意10个整数,将所有正整数显示出来。CLEARFOR i=1 TO 10 INPUT 输入一个整数: TO a IF a0 ?a ENDIFENDFOR第49页/共76页例8-10输入任意个整数,分别统计偶数和奇数的个数,输入0结束。Store 0 to ou,jiDO WHILE .T. INPUT 输入一个整数: 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 W

16、HILE .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页5.多重循环DO WHILE DO WHILE DO WHILE ENDDO ENDDO ENDDO 第51页/共76页下面的循环嵌套是正确的。下面的循环嵌套交叉,是错误的。多重循环注意事项第52页/共76页多重循环示例例8-11用筛选法找出2-50之间的所有素数。解题思路1.素数的概念:只能被1和它本身整除的数。2.判断一个数x是否为素数,只需判断该

17、数不能整除2 到SQRT(x)之间的任意一个整数即可。第53页/共76页CLEARFOR i=2 TO 50 k=INT(SQRT(i) flag=.T. & 素数标志 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页本节内容第55页/共76页名强制返回到指定的程序文件。nRETURN返回到调用它的主程序。1.子程序的调用和返回对于两个具有调用关系的程序文件,常称调用程序为主程序,被调用程序为子程序。

18、第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页n子程序接受参数命令中的参数表只能变量名。2.带参数子程序的调用第58页/共76页例8-13设计一个计算圆的面积的子程序

19、sub.prg,要求在主程序中带参数调用。*主程序:CLEARy m j = 0 *初始化用于接收圆面积的变量input 请输入圆的半径: to bj DO sub WITH bj,ymj*带参数调用子程序?圆的面积为:+STR(ymj,10,2)RETURN*子程序sub.prgPARAMETERS r,s*参数接收语句s=3.14*r*2RETURN第59页/共76页第60页/共76页1.过程的建立调用过程的方法和调用子程序类似。第61页/共76页例8-14编制过程,去除原始字符串中的非数字字符,返回只含数字的新串。CLEARcTest=(123)45-6789 0cShow=do Num

20、bersOnly 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.过程文件ENDPROC第63页/共76页例8-15主程序可用来计算圆的面积和周长,其中求圆面积和

21、周长由过程proc1和proc2实现,过程定义在过程文件proc.prg中。第64页/共76页主程序:SET PROCEDURE TO proc*打开过程文件nSelect=0DO WHILE .T. C L E A R ?“请选择:” ?“1计算圆面积” ?“2计算圆周长” ?“0退出” Input “请您选择的功能:” to nSelect DO CASE CASE nSelect=1 DO proc1 *调用计算圆面积过程 CASE nSelect=2 D O p r o c 2 *调用计算圆周长过程 CASE nSelect=0 EXIT ENDCASEENDDOSET PROCEDU

22、RE TO *关闭过程文件第65页/共76页过程文件proc.prg:* 计算圆面积过程proc1PROCEDURE proc1CLEAR? “请输入圆的半径:” to bj s = 3.14*bj*2? “圆的面积为:” + STR(s,10,2)WAIT WINDOWRETURN* 计算圆周长过程proc2PROCEDURE proc2CLEAR?“请输入圆的半径:” to bjs = 2*3. 14*bj? “圆的周长为:” + STR(s,10,2)WAIT WINDOWRETURN第66页/共76页nn如果使用接收参数语句PARAMETERS ,必须放在FUNCTION后第一个语句。

23、nRETURN用来返回函数值,若缺省,返回.T.。第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) & 获取测试字符 IF ISDIGIT(cCharacter) & 判断字符是否为数字 cNumOnly=cNumOnly+

温馨提示

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

评论

0/150

提交评论