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

下载本文档

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

文档简介

第8章结构化程序设计主讲教师:张琳制作时间:2013.05第8章结构化程序设计主讲教师:张琳教学安排教学目标掌握程序的建立、修改和运行掌握结构化程序设计的三种基本结构掌握过程和用户自定义函数的使用重点分析分支和循环结构、循环嵌套结构、过程的使用学时安排6学时(理论)+6学时(实践)结构化程序设计教学安排教学目标结构化程序设计本章内容程序设计基础(补充)程序文件及其编辑环境程序中几种常用命令程序的基本控制结构过程和用户自定义函数作业结构化程序设计本章内容程序设计基础(补充)作业结构化程序设计程序设计基础(补充)程序的概念程序是计算机完成一个预定任务而设计的一个指令序列。程序的特点目的性分步性有限性可操作性有序性1.程序的概念和特点例如:求两个数的和。

Input“a=“toaInput“b=“tobC=a+b?“a+b=“,c结构化程序设计程序设计基础(补充)程序的概念1.程序的概念和特点例如:求两分析问题,确定处理方案确定操作步骤编写源程序上机调试整理资料2.程序设计的步骤如:求二元一次方程AX2+BX+C=0的两个根。1.输入三个系数A、B、C2.求D=B*B-4*A*C3.若D>0,输出两实根。4.若D=0,输出相等的两实根。5.若D<0,输出两虚根。结束结构化程序设计分析问题,确定处理方案2.程序设计的步骤如:求二元一次方程评价程序质量标准:清晰第一,效率第二。按规范书写程序(锯齿型结构)。使用三种基本结构(顺序、选择、循环)。单入口、单出口、无死语句、无死循环。3.结构化程序设计的特点4.结构化程序设计的方法自顶向下模块化逐步求精结构化程序设计评价程序质量标准:清晰第一,效率第二。3.结构化程序设计的特8.1程序文件及其编辑环境程序文件介绍程序文件的建立和运行程序调试VFP编程特点本节内容结构化程序设计8.1程序文件及其编辑环境程序文件介绍本节内容结构化程序8.1.1程序文件的建立和运行VFP工作方式单步操作程序(多步)命令方式菜单方式结构化程序设计8.1.1程序文件的建立和运行VFP工作方式单步操作程程序文件VisualFoxPro系统将命令文件称为程序文件或程序。命令文件或程序文件的扩展名为.PRG命令代码包括:命令VFP可理解的操作1.程序文件介绍结构化程序设计程序文件1.程序文件介绍结构化程序设计命令格式:MODIFYCOMMAND<文件名>菜单方式:选择“新建/程序”功能:打开文本编辑窗口,用来建立或修改程序文件。说明:VisualFoxPro程序文件是一个扩展名为.PRG的文本文件。[例8-1]求当前日期和时间的长度,并显示。1.打开程序编辑器。2.输入程序代码。3.保存程序。建立步骤2.程序文件的建立结构化程序设计命令格式:MODIFYCOMMAND<文件名>[例8-1建立程序示例例8-1程序源代码如下:*----------------------------------*程序名称:E8_1.PRG*功能:显示当前日期和时间*----------------------------------a=DATE()&&求当前日期b=TIME()&&求当前时间a1=LEN(DTOC(a))&&求当前日期的长度b1=LEN(b)&&求当前时间的长度?"当前日期和时间:",a,b&&显示日期和时间?"日期和时间的长度:",a1,b1

**显示日期和时间的字符串长度结构化程序设计建立程序示例例8-1程序源代码如下:*-----------命令格式:DO<文件名>菜单方式:选择“程序/运行”命令3.程序文件的执行注意:运行过程中,如果出现错误,可以重新进入编辑窗口进行编辑,然后再运行。上例运行结果:结构化程序设计命令格式:DO<文件名>3.程序文件的执行注意:运行过程中8.1.2调试程序调试就是为了发现程序中出现的问题及问题出现的位置并对其进行修正。1.打开“调试器”窗口打开方式选择“工具/调试器”命令键入debug命令调试方法设置断点单步执行监视变量或表达式信息的变化结构化程序设计8.1.2调试程序调试就是为了发现程序中出现的2.“调试器”窗口介绍监视窗口:显示表达式及它们的当前值,并能够在表达式上设置断点。跟踪窗口:代码运行时,用户可以利用该窗口观察到这些代码。局部窗口:用于显示给定的程序、过程或方法程序中的所有变量、数组、对象以及对象成员。调试输出窗口:用来显示活动程序、过程或方法程序代码的输出结果。调用堆栈窗口:可以显示正在执行的过程、程序和方法程序。结构化程序设计2.“调试器”窗口介绍监视窗口:显示表达式及它们的当前值,并8.1.3VisualFoxPro编程特点

1.变量不区分大小写对于一般的变量,建议使用规则:TypeName。

建议的变量命名约定

结构化程序设计8.1.3VisualFoxPro编程特点1可以直接赋值,根据赋值决定变量类型。如nAge=25,表明nAge为整型变量,初始值为25。如Flag=.F.表明lFlag为逻辑型变量,初始值是.F.。2.变量不需预先声明3.命令分行程序中每条命令都以回车键结尾,一行只能写一条命令。若需分行书写,可以使用分号“;”表示续行。4.添加注释系统可以对整行注释和行中部分注释。整行注释使用“*”,行中注释使用“&&”。结构化程序设计可以直接赋值,根据赋值决定变量类型。2.变量不需预先声明3.8.2程序中几种常用命令基本输入命令格式输入输出命令程序结尾命令本节内容

程序基本框架输入数据开始数据处理输出数据结束输入语句输出语句结构化程序设计8.2程序中几种常用命令基本输入命令本节内容程序基本框8.2.1基本输入命令

格式:WAIT[<提示信息>][TO<内存变量名>][WINDOW[AT<行>,<列>][TIMEOUT<数值表达式>]功能:暂停程序的执行并显示提示信息,按任意键或单击鼠标后继续执行程序。说明:使用TO<内存变量>子句将把按下的键以字符形式保存到指定变量中,本命令只能接一个字符。若按下的是不可打印字符或是单击鼠标,则内存变量中存储空字符。1.WAIT命令结构化程序设计8.2.1基本输入命令

格式:WAIT[<提示信息>]WINDOW[AT<行,列>]指定显示的信息窗口在屏幕上的位置,若省略AT<行,列>则信息窗口显示在屏幕的右上角。省略该项,则在已显示内容之后显示信息。TIMEOUTN指定自动等待键盘或鼠标输入的秒数,该项必须放在WAIT语句的最后。缺省wait后的提示信息,将显示“按任意键继续…”。说明:例如,WAIT"继续查询吗?(Y/N)?"TOJXWAIT"请选择(1/2/3):“TOXZWINDOWTIMEOUT3WAIT结构化程序设计WINDOW[AT<行,列>]指定显示的信息窗口在屏格式:ACCEPT[<字符表达式>]TO<内存变量名>功能:从键盘上输入一个字符串常量给内存变量。说明:<字符表达式>是提示语,从键盘上输入的字符串不必用定界符括起来。<内存变量>用来保存键盘上输入的字符串。2.ACCEPT命令例如,accept"请输入要查找的人名"TOname?name结构化程序设计格式:ACCEPT[<字符表达式>]TO<内存变量名>格式:INPUT[<字符表达式>]TO<内存变量名>功能:<字符表达式>是提示语,可通过键盘输入数值型、字符型、日期型、逻辑型、货币型等数据给<内存变量>。说明:若输入字符型数据,一定要加定界符(与ACCEPT不同)。3.INPUT命令

例如,INPUT"请输入姓名:"TOXMINPUT"请输入出生日期:"TORQINPUT"请输入入学成绩:"TOCJINPUT"是团员吗?"TOTY?XM,RQ,TY,CJ结构化程序设计格式:INPUT[<字符表达式>]TO<内存变量名>38.2.2格式输入输出语句由于此语句在实际编程中格式:@<行,列>Say<表达式>[Picture<格式描述符>]功能:在制定的行列位置按格式输出表达式的值。结构化程序设计8.2.2格式输入输出语句由于此语句在实际编程中格式:8.2.3程序结尾命令格式:RUTURN功能:能使程序执行结束,并返回到调用它的上级程序继续执行,若无上级程序则返回到命令窗口。说明:了解另两条程序结束命令:CANCEL:它可以中止程序运行,并返回到命令窗口。QUIT:可以结束程序运行退出VisualFoxPro系统。结构化程序设计8.2.3程序结尾命令格式:RUTURN结构化程序设计8.3程序的基本控制结构顺序结构条件分支结构循环结构本节内容

顺序结构

选择结构

循环结构结构化程序设计8.3程序的基本控制结构顺序结构本节内容顺序结构选择8.3.1顺序结构顺序结构的程序运行时按照语句序列的先后顺序,一条接一条地执行,它是程序中最基本的结构。[例8-2]计算圆的周长和面积。Clearinput"请输入圆的半径:"TOr&&输入半径c=2*3.14*r&&计算圆的周长s=3.14*r*r&&计算圆的面积?"圆的周长:",c&&输出周长?"圆的面积:",s&&输出面积结构化程序设计8.3.1顺序结构顺序结构的程序运行时按照语句序列的先[例8-3]查找显示张宇飞的年龄。ClearUsestudent&&打开学生表Accept"请输入查询的姓名:"toxmLocateforsname=xm&&定位要找的人?xm+“的年龄是:”+str(sage,2)&&输出年龄Use&&关闭表结构化程序设计[例8-3]查找显示张宇飞的年龄。Clear结构化程序设计8.3.2条件分支结构格式:IF<条件表达式>

<语句系列>

ENDIF功能:首先计算<条件表达式>的值,若其值为真,对IF与ENDIF之间的语句顺序执行,然后执行ENDIF后面的语句;若其值为假,直接执行ENDIF后面的语句。1.简单的条件语句简单条件语句逻辑图逻辑表达式语句序列ENDIF后面的语句NY结构化程序设计8.3.2条件分支结构格式:IF<条件表达式>1.简单简单条件查询示例[例8-4]求一个数的绝对值。Input"请输入一个数"TOx?xIFx<0x=-xENDIF??"的绝对值是:",xX<0x=-xNY(该程序流程图)输入x输出x执行分支条件结构化程序设计简单条件查询示例[例8-4]求一个数的绝对值。Input"简单条件查询示例[例8-5]将徐克老师的职称改为副教授。UseteacherLocatefortname="徐克"&&定位记录

If

found()

&&如果找到displaytname,ttitle&&显示记录replacettitlewith"副教授"&&替换职称字段的内容displayendifuse思考:能不能用SQL语句解决该问题?Updateteachersetttitle=“副教授”wheretname=“徐克”结构化程序设计简单条件查询示例[例8-5]将徐克老师的职称改为副教授。Us格式:IF<逻辑表达式>

<语句系列1>

ELSE<语句系列2>

ENDIF功能:若<逻辑表达式>的值为真,先执行<语句系列1>,然后再执行ENDIF后面的语句;若其值为假,先执行<语句系列2>,然后执行ENDIF后面的语句。2.带ELSE的条件语句带ELSE的条件语句逻辑图逻辑表达式语句序列1ENDIF后面的语句NY语句序列2结构化程序设计格式:IF<逻辑表达式>2.带ELSE的条件语句双分支条件查询示例[例8-6]上例考虑找不到记录的的情况,可以这样处理:UseteacherLocatefortname="徐克"If

found()

displaytname,ttitlereplacettitlewith"副教授"displayelse

waitwindow"找不到徐克老师"at10,10endifuse结构化程序设计双分支条件查询示例[例8-6]上例考虑找不到记录的的情况,可格式:DOCASE

CASE<条件表达式1>

<语句序列1>

CASE<条件表达式2>

<语句序列2>…

CASE<条件表达式n>

<语句序列n>[OTHERWISE<语句序列n+1>]ENDCASE功能:执行多重分支操作。3.多分支语句结构化程序设计格式:DOCASE3.多分支语句结构化程序设计多分支语句逻辑图只能选择一个分支执行结构化程序设计多分支语句逻辑图只能选择一个分支执行结构化程序设计多分支条件示例[例8-7]显示当前季节。yue=MONTH(DATE())DOCASE

CASEINLIST(yue,3,4,5)jj="春"

CASEINLIST(yue,6,7,8)jj="夏"

CASEINLIST(yue,9,10,11)jj="秋"

CASEINLIST(yue,12,1,2)jj="冬"ENDCASEWAITjjWINDOW结构化程序设计多分支条件示例[例8-7]显示当前季节。yue=MONTH(8.3.3循环结构程序循环结构循环结构是指程序在执行的过程中,程序中的某段代码被重复执行若干次。被重复执行的代码段,通常称之为循环体。VFP提供的循环语句条件循环(WHILE)步长循环(FOR)扫描循环(SCAN)结构化程序设计8.3.3循环结构程序循环结构结构化程序设计格式:DOWHILE<条件表达式><语句系列>

ENDDO功能:若<条件表达式>的值为真,执行<语句系列>,一旦遇到ENDDO自动返回DOWHILE重新判断条件是否成立,以决定是否继续循环。1.条件循环逻辑表达式语句序列1NY执行ENDDO后面的语句条件循环语句的执行流程结构化程序设计格式:DOWHILE<条件表达式>1.条件循环逻辑表达式说明:注意设置正确的循环条件。循环体内应有改变循环条件的语句。[例8-8]编写一个能够多次查找某学生记录的程序,查找字段为姓名。操作步骤1.设置循环变量yes,当它的值为“Y”时,可以查询学生信息。2.每查询一名学生信息,询问用户是否继续,如果输入“Y”给yes变量继续查询,输入其它,停止查询。结构化程序设计说明:[例8-8]编写一个能够多次查找某学生记录的程序,查找yes="Y"USEstudentDOWHILE

UPPER(yes)="Y"clearaccept“请输入查找姓名:”toxmLOCATEFORsname=xm

IFFOUND()DISPLAYELSEWAIT"查无此人"WINDOWENDIF

wait“继续查找吗?”toyesENDDOUse条件循环示例源代码循环条件改变循环条件结构化程序设计yes="Y"条件循环示例源代码循环条件改变循环条件结构化格式:

FOR<内存变量>=<数值表达式1>TO<数值表达式2>[STEP<数值表达式3>]<语句序列>

ENDFOR|NEXT功能:语句执行时,通过比较循环变量值与终值来决定是否执行<语句序列>。步长为正数时,若循环变量值不大于终值就执行循环体;步长为负数时,若循环变量不小于终值就执行循环体。一旦遇到ENDFOR或NEXT,循环变量值即加上步长,然后返回到FOR语句重新与终值比较。STEP<数值表达式3>一项可以缺省,步长缺省值为1。2.步长循环用于固定次数的循环结构化程序设计格式:2.步长循环用于固定次数的循环结构化程序设计步长型循环语句执行流程循环体循环变量增加步长循环变量获得初值FT循环变量在终值内结构化程序设计步长型循环语句执行流程循环体循环变量增加步长循环变量获得初值步长型循环示例[例8-9]编写程序计算S=1+2+…+1000之和。clears=0fori=1to1000s=s+inext?"s=1+2+…+1000=:",s也可以这样写:clears=0i=1Dowhilei<=1000s=s+ii=i+1enddo?"s=1+2+…+1000=:",s结构化程序设计步长型循环示例[例8-9]编写程序计算S=1+2+…+10步长型循环示例[例8-10]输入一个字符串,分别统计出其中英文字母、空格、数字和其它字符个数。CLEARalpa=0kong=0num=0others=0accept“请输入一个字符串:”tocstrlen1=LEN(RTRIM(cstr))&&len1为字符串长度结构化程序设计步长型循环示例[例8-10]输入一个字符串,分别统计出其中英FORi=1TOlen1ch=SUBSTR(cstr,i,1)

IFupper(ch>="A"andupper(ch)<="Z“

*判断字符alpa=alpa+1ELSE

IFch=""&&判断空格kong=kong+1ELSE

IFch>="0"andch<="9"&&判断数字num=num+1ELSEothers=others+1

ENDIF

ENDIF

ENDIFENDFOR?"字符个数:"+STR(alpa)+"空格个数:"+STR(kong)?"数字个数:"+STR(num)+"其他字符个数:"+STR(others)结构化程序设计FORi=1TOlen1结构化程序设计FORi=1TOlen1ch=SUBSTR(cstr,i,1)

docase

caseupper(ch)>="A"andupper(ch)<="Z"&&判断字符alpa=alpa+1

casech=""&&判断空格kong=kong+1

casech>="0"andch<="9"&&判断数字num=num+1

otherwiseothers=others+1

endcaseENDFOR?"字符个数:"+STR(alpa)+"空格个数:"+STR(kong)?"数字个数:"+STR(num)+"其他字符个数:"+STR(others)或者用多分支语句实现:结构化程序设计FORi=1TOlen1或者用多分支语句实现:结构化程格式:

SCAN[<范围>][FOR<条件表达式1>]<语句序列>

ENDSCAN功能:SCAN循环针对当前表进行循环,<范围>子句表示记录范围,缺省值为ALL。语句执行时在<范围>中依次寻找满足FOR条件的记录,并对找到的记录执行<语句序列>。3.扫描循环结构化程序设计格式:3.扫描循环结构化程序设计Skip+1TEof()循环体FScan指针型循环语句的执行流程

结构化程序设计Skip+1TEof()循环体FScan指针型循环语句的扫描型循环示例[例8-11]显示年龄大于等于19的学生记录。CLEARUSEstudentSCANFOR

sage>=19DISPLAYsname,sageENDSCANUSE也可以这样写:clearUSExsqkDowhile

noteof()ifsage>=19DISPLAYsname,sageendif

skipEnddoUse结构化程序设计扫描型循环示例[例8-11]显示年龄大于等于19的学生记录。实验作业批讲用三种循环语句统计xsqk表中入学分数超过570分的人数。1.条件循环语句CLearUSExsqkRs=0Dowhilenoteof()if入学分数>=570rs=rs+1enddif

skipEnddo?“超过570人数共:”,rsUSE2.固定次数循环语句CLEARUSExsqkjls=reccount()Rs=0Fori=1tojlsif入学分数>=570rs=rs+1enddif

skipEndfor?“超过570人数共:”,rsUSEgoiif入学分数>=570rs=rs+1enddif结构化程序设计实验作业批讲用三种循环语句统计xsqk表中入学分数超过5703.扫描型循环语句CLearUSExsqkRs=0Scanfor入学分数>=570rs=rs+1Endscan?“超过570人数共:”,rsUSE三种循环语句比较:1.条件循环语句是一种万能型循环语句,适合解决所有遇到的循环问题。2.固定次数的循环语句适用已知循环次数的循环。3.扫描型循环专门针对数据表操作,如果遍历数据表记录时,使用它最方便。结构化程序设计3.扫描型循环语句CLear结构化程序设计在各种循环语句的循环体中可以插入LOOP和EXIT语句,前者能使执行转向循环语句头部继续循环;后者则用来立即退出循环,转去执行ENDDO、ENDFOR或ENDSCAN后面的语句。两个循环语句的转向功能示意图:4.辅助循环语句DOWHILE<条件表达式>…

Loop…ENDDODOWHILE<条件表达式>…

EXIT…ENDDOLOOP语句的转向

EXIT语句的转向

结构化程序设计在各种循环语句的循环体中可以插入LOOP和EXIT语句,前者LOOP语句转向示例[例8-9]输入任意10个整数,将所有正整数显示出来。CLEARFORi=1TO10INPUT"输入一个整数:"TOaIFa<0

loopELSE?aENDIFENDFOR也可以这样:(这样更精炼些)CLEARFORi=1TO10INPUT"输入一个整数:"TOaIFa>0?aENDIFENDFOR结构化程序设计LOOP语句转向示例[例8-9]输入任意10个整数,将所有正EXIT语句转向示例[例8-10]输入任意个整数,分别统计偶数和奇数的个数,输入0结束。Store0toou,jiDOWHILE.T.INPUT"输入一个整数:"TOa

Docasecasea=0

exitcasemod(a,2)=0ou=ou+1otherwiseji=ji+1Endcase

ENDDO?“奇数个数:”,ji,"偶数个数:",ou也可以这样写:Store0toou,jiDOWHILE.T.INPUT"输入一个整数:"TOa

IF

a=0

exit

ENDIF

IF

INT(a/2)=a/2ou=ou+1

ELSE

ji=ji+1

ENDIFENDDO?“奇数个数:”,ji,"偶数个数:",ou结构化程序设计EXIT语句转向示例[例8-10]输入任意个整数,分别统计偶多重循环也称循环的嵌套,所谓嵌套就是一个循环程序的循环体内又包含着另一些循环。嵌套要求:层数不限,但内层循环必须完全包含在外层循环之中,如右图:5.多重循环DOWHILE<条件表达式>

<语句行序列>

DOWHILE<条件表达式>

<语句行序列>

DOWHILE

<条件表达式>

<语句行序列>

ENDDO

<语句行序列>

ENDDO

<语句行序列>ENDDO

结构化程序设计多重循环也称循环的嵌套,所谓嵌套就是一个循环程序的循环体内又下面的循环嵌套是正确的。下面的循环嵌套交叉,是错误的。多重循环注意事项结构化程序设计下面的循环嵌套是正确的。下面的循环嵌套交叉,是错误的。多重循多重循环示例[例8-11]用筛选法找出2--50之间的所有素数。解题思路1.素数的概念:只能被1和它本身整除的数。2.判断一个数x是否为素数,只需判断该数不能整除2到SQRT(x)之间的任意一个整数即可。结构化程序设计多重循环示例[例8-11]用筛选法找出2--50之间的所有素CLEARFORi=2TO50k=INT(SQRT(i))flag=.T.&&素数标志Forj=2tok

IFMOD(i,j)=0flag=.F.&&标识i不是素数EXIT&&退出DOWHILE循环

ENDIFEndforIFflag=.T.?i&&输出素数ENDIFENDFOR结构化程序设计CLEAR结构化程序设计8.4过程和用户自定义函数主程序和子程序过程自定义函数变量的作用域本节内容结构化程序设计8.4过程和用户自定义函数主程序和子程序本节内容结构化程调用子程序语句:DO<子程序文件名>返回语句:RETURN返回语句说明:TOMASTER使返回时直接返回到最外层主程序,TO<程序文件名>强制返回到指定的程序文件。RETURN返回到调用它的主程序。1.子程序的调用和返回8.4.1主程序和子程序对于两个具有调用关系的程序文件,常称调用程序为主程序,被调用程序为子程序。结构化程序设计调用子程序语句:DO<子程序文件名>1.子程序的调用和返回子程序调用示例[例8-12]计算圆面积的主程序为e8_12.prg,子程序为sub.prg。*主程序:CLEARDOWHILE.T.WAIT“要计算圆的面积(Y/N)?”;TOcAnswerIFUPPER(cAnswer)=“Y”

DOSub.prgELSE

EXITENDIFENDDO*子程序sub.prgCLEARinput‘请输入圆的半径:’tors=3.14*r^2?'圆的面积为:'+STR(s,10,2)RETURN结构化程序设计子程序调用示例[例8-12]计算圆面积的主程序为e8_12.调用参数命令:DO<程序名1>[WITH<参数表>][子程序接受参数命令:PARAMETERS<参数表>说明:调用命令的<参数表>中的参数可以是表达式,但若为内存变量必须具有初值。子程序接受参数命令中的参数表只能变量名。2.带参数子程序的调用结构化程序设计调用参数命令:DO<程序名1>[WITH<参数表>][带参数子程序调用示例[例8-13]设计一个计算圆的面积的子程序sub.prg,要求在主程序中带参数调用。*主程序:CLEARymj=0 *初始化用于接收圆面积的变量input"请输入圆的半径:"tobjDOsubWITHbj,ymj*带参数调用子程序?"圆的面积为:"+STR(ymj,10,2)RETURN*子程序sub.prgPARAMETERSr,s

*参数接收语句s=3.14*r**2RETURN结构化程序设计带参数子程序调用示例[例8-13]设计一个计算圆的面积的子程8.4.2过程过程也是一个具有一定功能的程序段,是子程序的另一种形式。与子程序的区别:子程序是一个独立的PRG文件。过程可以和主程序放在一起,也可以和其他过程放在一个过程文件中,过程文件也是一个PRG文件。结构化程序设计8.4.2过程过程也是一个具有一定功能的程序段,是子程序1.过程的建立格式:PROCEDURE<过程名>[PARAMETERS<参数表>]<命令序列>[RETURN]功能:定义一个过程。说明:过程作为程序的一部分时往往放在程序的最后。调用过程的方法和调用子程序类似。结构化程序设计1.过程的建立格式:PROCEDURE<过程名>调用过程的过程调用示例[例8-14]编制过程,去除原始字符串中的非数字字符,返回只含数字的新串。CLEARcTest="(123)45-67890"cShow=""doNumbersOnlywith;cTest,cShow?cShowPROCEDURENumbersOnly

PARAMETERScMixedVal,cNumOnlyFORnCnt=1TOLEN(cMixedVal)cCharacter=SUBSTR(cMixedVal,nCnt,1)IFISDIGIT(cCharacter)cNumOnly=cNumOnly+cCharacterENDIFENDFORENDPROC和子程序不同,过程和调用程序放在一起。结构化程序设计过程调用示例[例8-14]编制过程,去除原始字符串中的非数字2.过程文件过程文件:多个过程或自定义函数可以放在一起,组成过程文件,扩展名为.PRG,其基本形式如下: PROCEDURE<过程名1> <命令序列> [ENDPROC] PROCEDURE<过程名2> <命令序列> [ENDPROC] …结构化程序设计2.过程文件过程文件:多个过程或自定义函数可以放在一起,组成过程文件的打开命令:SETPROCEDURETO<过程文件名>过程的调用:

DO<过程名>[IN<过程文件名>]过程文件的关闭:SETPROCEDURETO[例8-15]主程序可用来计算圆的面积和周长,其中求圆面积和周长由过程proc1和proc2实现,过程定义在过程文件proc.prg中。结构化程序设计过程文件的打开命令:[例8-15]主程序可用来计算圆的面积和过程文件示例主程序:SETPROCEDURETOproc

*打开过程文件nSelect=0DOWHILE.T.CLEAR ?“请选择:”?“1-计算圆面积”?“2-计算圆周长”?“0-退出”Input“请您选择的功能:”tonSelect

DOCASECASEnSelect=1

DOproc1

*调用计算圆面积过程CASEnSelect=2

DOproc2

*调用计算圆周长过程CASEnSelect=0EXITENDCASEENDDOSETPROCEDURETO

*关闭过程文件结构化程序设计过程文件示例主程序:DOCASE结构化程序设计过程文件源代码过程文件proc.prg:*计算圆面积过程proc1PROCEDUREproc1CLEAR?“请输入圆的半径:”tobjs=3.14*bj**2?“圆的面积为:”+STR(s,10,2)WAITWINDOW RETURN

*计算圆周长过程proc2PROCEDUREproc2CLEAR?“请输入圆的半径:”tobjs=2*3.14*bj?“圆的周长为:”+STR(s,10,2)WAITWINDOW RETURN结构化程序设计过程文件源代码过程文件proc.prg:*计算圆周长过程p格式:FUNCTION<函数名>[PARAMETERS<参数表>]<语句序列>

RETURN[<表达式>]功能:定义一个用户自定义函数。说明:如果使用接收参数语句PARAMETERS,必须放在FUNCTION后第一个语句。RETURN用来返回函数值,若缺省,返回.T.。8.4.3自定义函数结构化程序设计格式:FUNCTION<函数名>8.4.3自定义函数结自定义函数示例调用函数的主程序:CLEARcTest="(123)45-67890"&&原始字符串?"转换前的串:",ctest?"转换前的串:",

NumbersOnly(cTest)

温馨提示

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

评论

0/150

提交评论