结构化程序资料课件_第1页
结构化程序资料课件_第2页
结构化程序资料课件_第3页
结构化程序资料课件_第4页
结构化程序资料课件_第5页
已阅读5页,还剩56页未读 继续免费阅读

下载本文档

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

文档简介

第7章结构化程序设计程序文件的建立与运行7.1

顺序结构程序设计7.2

分支结构程序设计7.3

循环结构程序设计7.4

模块结构程序设计7.5

数组及其应用7.67.1程序文件的建立与运行

7.1.1程序文件的建立1.用菜单方式建立程序文件执行“文件/新建/程序/新建文件”菜单命令。2.用命令方式建立程序文件

格式:MODIFYCOMMAND<程序文件名>功能:新建或修改指定的程序文件。7.1.2程序文件的运行

1.用菜单方式运行程序文件执行“程序/运行”菜单命令。2.用命令方式运行程序文件格式:DO<程序文件名>功能:将指定的程序文件调入内存并运行。7.1.3程序中的辅助命令

1.程序注释命令格式1:NOTE<注释内容>格式2:*<注释内容>格式3:[<命令>]&&<注释内容>2.结束程序运行命令

格式1:RETURN功能:返回到上级程序模块。格式2:RETURNMASTER功能:返回到最上级主程序。格式3:CANCEL功能:停止程序执行,关闭所有文件,返回系统交互状态。格式4:QUIT功能:停止所有程序执行,关闭所有文件,退回到宿主操作系统。3.运行环境设置命令CLEAR 清屏幕CLEARALL 关闭所有文件、释放所有内存变量SETDEFAULTTO 设置文件访问时默认的驱动器SETPATHTO 设置文件访问时默认的路径SETTALKON/off 设置所有命令执行的结果显示与否7.1.4程序中的交互输入命令

1.字符串输入命令格式:ACCEPT[<提示信息>]TO<内存变量>功能:暂停程序的运行,等待用户键入一串字符赋给指定的内存变量。2.表达式输入命令

格式:INPUT[<提示信息>]TO<内存变量>功能:暂停程序运行,接受用户键入的表达式并将其值赋给指定的内存变量。3.等待或单字符输入命令

格式:WAIT[<提示信息>][TO<内存变量>]功能:暂停程序运行,若包含[TO<内存变量>]短语时,将用户所键入的一个字符赋给指定的内存变量;否则待用户按任一键后继续程序的执行。4.定位输出命令

格式:@<行,列>SAY<表达式>功能:在屏幕上指定的行、列位置输出指定表达式的值。7.2顺序结构程序设计7.2.1基本程序结构1.顺序程序结构2.分支程序结构3.循环程序结构7.2.2顺序结构程序设计

严格按照程序中各命令的先后排列顺序自上而下逐条执行。【例7-6】在职工档案表中查看指定职工的有关情况。USEzgdaACCEPT"请输入被查询者姓名:"TOxmLOCATEFOR姓名=xmCLEAR?"姓名:"+姓名?"性别:"+性别?"职称:"+职称?"出生日期:"+DTOC(出生日期)USERETURN7.3分支结构程序设计

7.3.1简单分支结构格式:IF<条件> <语句序列>ENDIF执行过程:当<条件>成立时,逐条执行IF与ENDIF之间的<语句序列>,然后执行ENDIF后的语句;当<条件>不成立时,不执行<语句序列>而直接执行ENDIF后的语句。【例7-8】某种商品一次购买100件以上时,可享受8%的优惠。试编程根据输入的单价和数量计算应付金额。CLEARINPUT"数量:"TOslINPUT"单价:"TOdjje=dj*slIFsl>=100 je=je*0.92ENDIF?"应付金额:"+STR(je,8,2)RETURN7.3.2选择分支结构

格式:IF<条件> <语句序列1>ELSE <语句序列2>ENDIF执行过程:若<条件>成立仅执行<语句序列1>,而后执行ENDIF后的语句;否则仅执行<语句序列2>,而后转去执行ENDIF后的语句。【例7-10】出租车不超过5公里时一律收费10元,超过时则超过部分每公里加收1.6元。试编程根据里程数计算并显示出应付车费。CLEARINPUT"里程:"TOlcIFlc<=5 ?"车费为:十元"ELSE cf=10+(lc-5)*1.6 ?"车费为:"+STR(cf,6,2)ENDIFRETURN7.3.3分支嵌套结构在分支结构的<语句序列>中,允许包括另一个合法的分支结构语句。【例7-12】设硅谷公司员工的工资计算方法如下:每工时按68元发放;工作时数超过120小时者,超过部分加发百分之十五;工作时数不到80小时者,扣发500元。试编程按输入的员工号和该号员工的工时数,计算并输出其应发工资。CLEARACCEPT"员工号:"TOyghINPUT"工时:"TOgsIFgs>120gz=gs*68+(gs-120)*68*0.15ELSE IFgs<80 gz=gs*68-500 ELSE gz=gs*68 ENDIFENDIF? &&输出一个空行?ygh+"号员工应发工资:"+STR(gz,8,2)RETURN7.3.4多路分支结构

用来解决在多种不同情况下的程序选择执行问题。格式:DOCASE CASE<条件1> <语句序列1> CASE<条件2> <语句序列2> …… CASE<条件n> <语句序列n> [OTHERWISE <语句序列n+1>]ENDCASE【例7-13】编程计算银行存款整存整取应得的利息。CLEARINPUT"本金(元):"TObjINPUT"存期(年):"TOcqDOCASE CASEcq>=5 rate=4.5 &&年利率为4.5% CASEcq>=3 rate=3.6 &&年利率为3.6% CASEcq>=2 rate=3.1 &&年利率为3.1% CASEcq>=1 rate=2.7 &&年利率为2.7% CASEcq>=0.5 rate=2.21 &&年利率为2.21% OTHERWISE rate=1.23 &&年利率为1.23%ENDCASElixi=bj*cq*rate/100? &&输出一个空行?"应得利息:"+STR(lixi,8,2)RETURN7.4循环结构程序设计

7.4.1当型循环结构格式:DOWHILE<条件> <语句序列>ENDDO执行过程:若<条件>成立,执行DOWHILE和ENDDO之间的<语句序列>;若<条件>不成立则不执行<语句序列>,直接转去执行ENDDO后的语句。每执行一遍后再对<条件>判断一次,一旦<条件>不成立就结束循环转去执行ENDDO后面的语句。【例7-14】求1+2+3+...+100的累计值。CLEARSTORE0TOn,sDOWHILEn<100 n=n+1 s=s+nENDDO?"累计值为:"+STR(s,6)RETURN7.4.2步长型循环结构

格式:FOR<循环变量>=<初值>TO<终值>[STEP<步长值>] <语句序列>ENDFOR|NEXT执行过程:首先将初值赋给指定的循环变量,然后判断其值是否超过终值,不超过即执行循环体,超过则不执行循环体。遇到ENDFOR(或NEXT)语句时自动给循环变量增加一个步长值,再判断循环变量的当前值是否超过终值,不超过再次执行循环体,超过则结束循环转去执行ENDFOR(或NEXT)后的语句。【例7-18】用步长型循环结构编程求1+2+3+...+100的累计值。CLEARs=0FORn=1TO100s=s+nENDFOR?"S="+STR(S,6)RETURN7.4.3扫描型循环结构

格式:SCAN[<范围>][FOR<条件1>][WHILE<条件2>] <语句序列>ENDSCAN执行过程:对当前数据表中指定范围内符合条件的记录,逐个进行<语句序列>所规定的操作;缺省范围和条件短语时,则对所有记录逐个进行<语句序列>所规定的操作。【例7-20】用扫描型循环结构编程,输出职工档案数据表中基本工资在800元以下的职工姓名及其基本工资数,并输出这些职工的人数。CLEARALLUSEzgdaCLEARSTORE0TOnSCANFOR基本工资<800?姓名,基本工资

n=n+1ENDSCAN?"基本工资在800元以下的职工共有:"+STR(n,3)+"人"CLOSEDATABASERETURN7.4.4循环嵌套结构

在一个循环结构的循环体内包含有其它循环结构,便形成了循环的嵌套。【例7-21】输出下图所示的乘法九九表。CLEARALLCLEARa=1DOWHILEa<=9 b=1 ? &&用于换行输出

DOWHILEb<=a ??SPACE(2)+STR(a,1)+"×"+STR(b,1)+"="+STR(a*b,2) b=b+1 ENDDO a=a+1ENDDORETURN7.5模块结构程序设计

一个应用程序通常可由多个相关的功能模块(Module)组成,这里所说的模块是指具有某种功能的一段相对独立的程序。采用模块结构程序设计的好处在于:整个程序结构清晰,易于分别编写与调试,便于维护与调用,并利于程序功能的进一步扩充与完善。7.5.1程序模块的建立与运行

【例7-26】采用主程序调用子程序的方法,对于任意输入的整数x、y、z的值,计算w=x!+y!+z!的值。**主程序main1.prgCLEARALLINPUT"x="TOxINPUT"y="TOyINPUT"z="TOzn=x &&将x的值赋给n,为计算x的阶乘做准备DOsubp1 &&调用subp1子程序计算x的阶乘a=t &&把子程序计算的结果存入变量an=yDOsubp1b=tn=zDOsubp1w=a+b+t?"w=x!+y!+z!=",wRETURN**子程序subp1.prgPUBLICt &&宣告t为全局变量,详见7.5.4节t=1FORi=1TOn t=t*iNEXTRETURN7.5.2应用程序的模块化设计

目前,各种基于数据库的事务管理应用程序的开发大都采用“自顶向下”的模块化程序设计方法,大大方便了整个程序的开发与调试,并极大地增加了程序的灵活性和可维护性。

例如,下图是一个简化的职工档案管理系统的程序模块结构,每个程序模块都对应一个磁盘上的.PRG文件。7.5.3带参模块的建立与调用

1.主模块的带参调用命令格式:DO<程序模块名>WITH<参数表>功能:调用指定名称的程序模块,并将<参数表>中各个参数的值分别传递给所调用模块中的对应参数。2.子模块的接受参数命令

格式:PARAMETERS<参数表>功能:接受主模块带参调用命令传递过来的各个参数。【例7-28】利用主模块带参调用子模块的方法计算圆柱的体积。***计算圆柱体积的主模块abc.prgCLEARINPUT"圆柱半径:"TOaINPUT"圆柱高:"TObSTORE0TOcDOrhvWITHa,b,c?"圆柱体积为:",cRETURN***计算圆柱体积的子模块rhv.prgPARAMETERSr,h,vs=3.14159*r*rv=s*hRETURN7.5.4内存变量作用域

内存变量的作用域是指该变量在各程序模块内发挥作用的有效范围。按作用域的不同,可将内存变量划分为全局变量、私有变量和局部变量。1.全局变量

全局变量又称公共变量,是指在任何命令语句以及任何嵌套层次的程序模块中均起作用的内存变量。定义全局变量的命令格式如下。格式:PUBLIC<内存变量表>功能:将<内存变量表>中指定的内存变量定义为全局变量。2.私有变量

在某个模块中创建的内存变量,只能在该模块及其下属模块中使用,而不与其它模块中的同名变量相关。定义私有变量的命令格式如下。格式1:PRIVATE<内存变量表>格式2:PRIVATEALL[LIKE/EXCEPT<统配符>]功能:指定某些变量只限于本模块及其下属模块使用,并使其上级模块或其他模块中的同名变量隐蔽起来直至本级模块运行结束为止。3.局部变量

在当前模块中定义并只有在当前模块中有效的内存变量,一旦当前模块执行完毕,此种变量便自动释放。定义局部变量的命令格式如下。格式:LOCAL<内存变量表>功能:将<内存变量表>所列的各个内存变量定义为局部变量。7.5.5过程与过程文件

1.过程的概念过程可以看作是以下形式的一个程序段:PROCEDURE<过程名>[PARAMETERS<参数表>] <语句序列>ENDPROC此种过程通常被包含在调用它的应用程序文件中,作为该程序的一个组成部分。一个应用程序文件可以包含多个这样的过程,习惯上把它们放在应用程序的最后面。2.过程文件

将某个应用程序系统所包含的多个子模块分别作为不同的过程保存在同一个程序文件中,这样的程序文件被称为过程文件。过程文件的结构形式如下。PROCEDURE<过程名1> <语句序列1>ENDPROCPROCEDURE<过程名2> <语句序列2>ENDPROC…………PROCEDURE<过程名n> <语句序列n>ENDPROC7.5.6用户自定义函数

1.自定义函数的概念自定义函数实际上是由用户自行编写的一个具有特定功能的程序段,其程序组成结构如下。[FUNCTION<函数名>][PARAMETERS<参数表>] <语句序列>RETURN<表达式>ENDFUNC2.自定义函数举例

【例7-33】编写一个计算阶乘的自定义函数包含在调用它的程序中,并调用此函数来计算组合数的值。**包含自定义函数的计算组合数程序zhs.prgCLEARINPUT"请输入m的值:"TOmINPUT"请输入n的值:"TOn**调用自定义函数jiech计算组合数:y=jiech(m)/(jiech(n)*jiech(m-n)) ?"组合数的计算结果是:"+str(y,8)RETURN**计算阶乘的自定义函数jiech:FUNCTIONjiech PARAMETERSk t=1 FORi=1TOk t=t*i ENDFOR RETURNtENDFUNC7.6数组及其应用

数组是一批相同名称不同下标的内存变量,数组中的每个元素用数组名及下标(表明在该数组中的排列顺序)表示,下标的个数决定了数组的维数。VisualFoxPro支持一维数组和二维数组。7.6.1数组的定义与使用

1.数组的定义格式1:DIMENSION<数组名>(<expN1>[,<expN2>])[,<数组名>(<expN1>[,<expN2>]),...格式1:DECLARE<数组名>(<expN1>[,<expN2>])[,<数组名>(<expN1>[,<expN2>]),...功能:建立指定的若干个一维或二维数组。2.数组的使用

在使用数组与数组元素时,应注意以下几点:在可以使用内存变量的地方,均可使用数组元素。可用各种对内存变量赋值的命令对数组元素赋值。若用赋值命令对数组名赋值时,则表示对该数组的所有元素赋予这同一个值。

可用LIST/DISPLAYMEMORY、RELEASE、CLEARMEMORY等命令查看、释放、清除已建立的数组变量。可用SAVE命令将数组存入指定的内存变量文件(.MEM),或用RESTORE命令将其恢复到内存中来。7.6.2一维数组应用举例

【例7-36】编程实现自动输出级数1、2、3、5、8、13、21、34、……的前20项。***pbnq.prgDIMENSIONx(20)x(1)=1x(2)=2?x(1),x(2)FORi=3TO20 x(i)=x(i-2)+x(i-1) ??x(i)ENDFORRETURN7.6.3二维数组应用举例

【例7-38】编程将下面表格中的数据读入计算机,并计算每行数据之和。1162787110585149886154657997484576644364512337891081357878787597***table.prgCLEAR

温馨提示

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

评论

0/150

提交评论