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

下载本文档

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

文档简介

第7章结构化程序设计7.1程序文件7.2程序方式下的几个基本命令7.3程序控制结构7.4*

多模块程序7.5*

程序的调试第7章结构化程序设计7.1程序文件7.2程序方式下的几个基本命令7.3程序控制结构7.4*

多模块程序7.5*

程序的调试7.1程序文件7.1.1VFP的三种工作方式7.1.2程序文件的建立7.1.3程序的运行7.1.1VFP的三种工作方式1.单命令方式2.菜单方式3.程序文件方式7.1程序文件7.1.1VFP的三种工作方式7.1.2程序文件的建立7.1.3程序的运行7.1.2程序文件的建立1.菜单方式2.命令方式格式:MODIFYCOMMAND[FileName|?]功能:打开程序编辑窗口,从中可以修改或创建程序文件。说明:(1)FileName:程序文件名称。若省略程序文件名,将打开程序编辑窗口。(2)如果用MODIFYCOMMAND?,则打开Open对话框,可在程序编辑窗口修改以前的程序或输入新程序。7.1.2程序文件的建立2.命令方式一个简单程序示例:程序编辑窗口7.1程序文件7.1.1VFP的三种工作方式7.1.2程序文件的建立7.1.3程序的运行7.1.3程序的运行VFP中运行正在编辑的程序,三种方式:(1)单击工具栏上的运行快捷按钮“!”。(2)单击菜单Program→Do。(3)按Ctrl+D快捷键。运行已存盘的程序,二种方式:(1)菜单方式。单击菜单Program→Do,打开Do对话框,选定要执行的程序文件,单击Do按钮。(2)命令方式。利用运行程序命令(Do),其命令格式及用法如下:格式:DOProgramName功能:将指定的程序文件调入内存并运行。第7章结构化程序设计7.1程序文件7.2程序方式下的几个基本命令7.3程序控制结构7.4多模块程序7.5程序的调试7.2程序方式下的几个基本命令一般地,VFP中一个程序由三部分组成:(1)初始化部分。程序运行环境设置和变量初始化,如一系列CLEAR语句和SET语句。(2)主体部分。(3)系统环境恢复部分。在结束程序运行之前,将系统环境恢复到原设置状态,常用的命令有关闭文件、一系列SET语句、程序结束语句等。上述很多操作都可以通过相关的命令来完成。7.2程序方式下的几个基本命令7.2.1运行环境设置命令7.2.2键盘输入命令7.2.3消息窗口函数7.2.4其他命令和语句7.2程序方式下的几个基本命令7.2.1运行环境设置命令7.2.2键盘输入命令7.2.3消息窗口函数7.2.4其他命令和语句7.2.1运行环境设置命令1.设置默认路径命令格式:SETDEFAULTTOPath功能:设置VFP用户此次上机的缺省路径,参数Path为要设置的缺省路径。示例:SETDEFAULTTOd:\vfp90\programs2023/1/1514/737.2.1运行环境设置命令2.设置检查日期(时间)常量格式命令格式:SETSTRICTDATETO[0|1|2]功能:设置对有歧义的日期常量(如:10/10/10)和日期时间常量是否产生错误信息与提示。0-表示在输入日期常量时,不检查日期常量的歧义性和有效性,编译时不产生错误提示,运行时对无效输入产生空日期输出:

//。1-表示实施严格的检查。编译时,对非严格的日期常量产生错误提示。2-表示实施严格的检查,并且要求使用DATE(nYear,nMonth,nDay)函数代替CTOD()函数进行字符串到日期数据的转换。2023/1/1515/737.2.1运行环境设置命令例如,在命令窗口输入下面语句:RELEASEALLSETDATETOYMDSETSTRICTDATETO1&&设置严格日期格式检查A={2010-10-1}&&编译时,提示日期常量格式错误

,不分配新的变量?A&&提示变量不存在错误A={^2010-10-1}&&严格的日期常量?A2023/1/1516/73(续)SETSTRICTDATETO0&&关闭严格日期格式检查B={2020-10-1}&&不提示日期常量格式错误?B&&输出为:2020/10/01SETSTRICTDATETO2&&与设置为1同,且在代码中使

用CTOD(),CTOT()时提示错误C={2030-10-1}&&提示日期常量格式错误C=CTOD(“2030-10-1”)&&提示用DATE()代CTOD()

,或将STRICTDATE设置为小

于2的值C=DATE(2030,10,1)?A,B,C2023/1/1517/737.2.1运行环境设置命令3.设置会话状态命令VFP中有些命令(如对表操作的命令)会在VFP主窗口中或状态栏上返回它们执行后的状态信息,这个过程称为“会话(TALK)”,可以通过SETTALK来设置或关闭会话功能。格式:SETTALKON|OFF|WINDOW[WindowName]|NOWINDOW说明:ON为缺省值,允许将会话设置到VFP窗口、系统信息窗口、图形状态栏或者用户自定义的窗口。设为OFF时,则在上述窗口中关闭会话。2023/1/1518/737.2.1运行环境设置命令4.设置系统保护命令格式:SETSAFETYON|OFF功能:当用户向VFP发出修改、清除表文件等涉及到文件安全的命令时,系统是否弹出文件操作提示窗口。默认为ON。ON表示需要,OFF表示不需要。2023/1/1519/737.2程序方式下的几个基本命令7.2.1运行环境设置命令7.2.2键盘输入命令7.2.3消息窗口函数7.2.4其他命令和语句7.2.2键盘输入命令1.字符型数据输入命令ACCEPT2.表达式输入命令INPUT3.单字符输入命令WAIT2023/1/1521/737.2.2键盘输入命令字符型数据输入命令ACCEPT格式:ACCEPT[<cMessageText>]TO<VarName>功能:暂停程序的执行,等待用户输入一个字符串给变量。说明:(1)cMessageText是为想要在屏幕上输出的信息。它可以是字符串常量或字符型内存变量,若为内存变量,则该变量必须预先赋值。(2)程序运行时,从键盘输入的数据都被赋值给内存变量VarName,作为字符型数据处理,不需要定界符括起来,如果输入了定界符,则定界符也被作为输入字符的一部分。(3)输入完需要的信息后,按回车键结束本命令的输入。如果没有输入任何信息,只按回车键,将把一个空字符串赋值给VarName。2023/1/1522/737.2.2键盘输入命令查找student数据库中的Students表并显示任意一个学生信息SETTALKOFFCLEAROPENDATABASEstudentUSEstudentsaccept"请输入学生的姓名:"toXMLOCATEFOR姓名=XM?"学生"+XM+"的基本情况如下:"?"学号:"+Sno?"性别:"+Ssex?"出生日期:"+DTOC(Birthday)CLOSEDATABASESSETTALKONRETURN2023/1/1523/737.2.2键盘输入命令编程从键盘输入某表名,要求打开该表并显示其内容。SETTALKOFFCLEARaccept"请输入表名:"totablenameUSE&tablename&&其中&为宏替换LISTUSESETTALKONRETURN2023/1/1524/737.2.2键盘输入命令2.表达式输入命令INPUT格式:INPUT[<cMessageText>]TO<VarName>功能:暂停程序的执行,接受用户输入合法的表达式,并将表达式的值赋值给内存变量。说明:(1)cMessageText、VarName同“ACCEPT”命令。(2)用户可输入任何一个合法的数值型、字符型、日期型或逻辑型表达式,系统先计算表达式的值,然后将该值赋值给内存变量VarName。(3)如果要输入字符串数据,则必须加上双引号或单引号定界符,如"ABC"。(4)如果输入非法表达式,系统将提示重新输入。2023/1/1525/737.2.2键盘输入命令已知圆半径为r,编程求圆面积s。(提示:半径r从键盘输入,结果保留3位小数;计算圆面积的VisualFoxPro表达式为:PI()*r^2)。SETDECIMALSTO3SETFIXEDON&&固定小数显示CLEAR?"本程序根据用户输入半径,计算圆面积。"INPUT"请输入圆半径r="TOrs=PI()*r^2?"圆面积S=",sSETFIXEDOFF&&恢复启动时的默认值SETDECIMALSTO2&&假设此前为两位小数显示,现恢复RETURN2023/1/1526/737.2.2键盘输入命令3.单字符输入命令WAIT格式:WAIT[cMessageText][TOVarName][WINDOW[ATnRow,nColumn]][NOWAIT][CLEAR|NOCLEAR][TIMEOUTnSeconds]功能:暂停程序,用户按任意键或者时间超过等待的秒数后,程序继续执行。如果包含[TO<VarName>]短语,将用户所按键盘字符(单个字符)赋值给指定的内存变量。2023/1/1527/737.2.2键盘输入命令例如,在命令窗口输入以下语句:WAIT“这是一个使用示例”WINDOWSAT20,20TIMEOUT8将在屏幕20行、20列处显示一个含有“这是一个使用示例”提示信息的小窗口,若单击鼠标按键、或按下键盘上任意一个按键、或小窗口在屏幕上停留8秒后,该提示信息从屏幕上消失。2023/1/1528/737.2程序方式下的几个基本命令7.2.1运行环境设置命令7.2.2键盘输入命令7.2.3消息窗口函数7.2.4其他命令和语句7.2.3消息窗口函数格式:MESSAGEBOX(

eMessageText&&对话窗口中要出现的提示信息

[,nDialogBoxType]&&对话窗口类型

[,cTitleBarText]&&对话框标题

[,nTimeout]&&信息窗口的显示时间(以毫秒计))功能:显示一个消息窗口,并根据所选择的按钮返回一个对应的数值,含义为:1-确定、2-取消、3-终止、4-重试、5-忽略、6-是、7-否、-1-未击任何键而超时退出。2023/1/1530/737.2.3消息窗口函数2023/1/1531/73n1n2n3n4取值按钮形式取值图标类型取值默认按钮取值窗口类型0确定0无0第一个按钮0非模式窗口1确定、取消16终止(×)256第二个按钮4096模式窗口2终止、重试、忽略32提问(?)512第三个按钮3是、否、取消48警告(!)4是、否64信息(i)5重试、取消nDiaIogBoxType的各个分量的取值及含义nDialogBoxType:设定出现在对话框中的按钮和图标、缺省按钮及对话框模式特性。它由四部分组成,即:nDialogBoxType

=nl+n2+n3+n4

(即:按钮+图标+默认按钮+窗口模式)。MessageBox()应用示例eMessageTitle='报告'eMessageText='记录未找到,您还要重新查找吗?'nDialogType=4+16+256&&4=YesandNobuttons &&16=Stopsignicon &&256=Secondbuttonisdefault&&若将右式改为:4+16+256+4096,又

会如何?nAnswer=MESSAGEBOX(eMessageText,nDialogType,eMessageTitle)DOCASECASEnAnswer=6WAITWINDOW'您选择的按钮是:是'CASEnAnswer=7WAITWINDOW'您选择的按钮是:否'ENDCASE2023/1/1532/737.2程序方式下的几个基本命令7.2.1运行环境设置命令7.2.2键盘输入命令7.2.3消息窗口函数7.2.4其他命令和语句7.2.4其他命令和语句1.程序结束与调用返回命令2.注释命令(语句)2023/1/1534/737.2.4其他命令和语句程序结束与调用返回命令一个独立的VFP程序,可以不用程序结束语句,当执行完最后一条语句时,程序会自动结束。但一个实用的程序往往由多个模块构成,各个模块根据需要可互相调用,这时就必须返回到相应的上层模块,而不是直接结束整个实用程序。通常有以下几种情形:(1)返回到其上一级调用模块(RETURN);(2)直接返回到顶级模块(RETURNTOMASTER);(3)返回到指定过程(RETURNTOProcedureName)(4)返回到VFP交互命令状态(命令窗口)(CANCEL);(5)直接关闭VisualFoxPro而返回到操作系统(QUIT)。2023/1/1535/737.2.4其他命令和语句2.注释命令(语句)在程序中加入必要的注释命令(也称为注释语句),可增强程序的可读性,便于日后的修改。程序执行时,注释命令不被执行。VisualFoxPro提供了3种注释命令。格式1:NOTE[Comments]格式2:*[Comments]功能:使NOTE或*后面的内容成为注释内容,又称为整行注释,常用来解释其后一个语句块的功能。格式3:[<Command>]&&[Comments]功能:Comments

对&&左面的命令做出解释或给出运行结果,又称为行尾注释命令。2023/1/1536/73第7章结构化程序设计7.1程序文件7.2程序方式下的几个基本命令7.3程序控制结构7.4多模块程序7.5程序的调试7.3程序控制结构7.3.1顺序结构7.3.2分支结构7.3.3循环结构7.3.4.混合嵌套(结构)7.3程序控制结构7.3.1顺序结构7.3.2分支结构7.3.3循环结构7.3.4.混合嵌套(结构)7.3.1顺序结构顺序结构是程序设计中最基本的结构,它按命令在程序中出现的先后顺序依次执行。如:?"本程序根据用户输入半径,计算圆面积。"INPUT"请输入圆半径r="TOrs=PI()*r^2?“圆面积S=”,sRETURN但是,绝大多数问题仅用顺序结构是无法解决的,还要用到分支(选择)和循环结构。2023/1/1540/737.3程序控制结构7.3.1顺序结构7.3.2分支结构7.3.3循环结构7.3.4.混合嵌套(结构)7.3.2分支结构分支结构(又称选择结构)能根据指定的逻辑条件进行判断并控制程序的执行方式,这正是计算机具有逻辑判断能力的原因之一。按该结构中执行路径的多少,可分为简单分支结构、双分支结构和多分支结构。无论是哪种类型的分支结构,都是根据所给条件是否为真,选择执行某一分支上的语句序列。2023/1/1542/737.3.2分支结构1.简单分支结构2.双分支选择结构3.多分支选择结构2023/1/1543/737.3.2分支结构1.简单分支结构2.双分支选择结构3.多分支选择结构2023/1/1544/731.简单分支结构格式:IFlExpression[THEN]CommandsENDIF2023/1/1545/73执行流程:1.简单分支结构例:求一元二次方程AX2+BX+C=0的实根。CLEARinput"请输入二次项系数:"toA

input"请输入一次项系数:"toBinput"请输入常数项:"toCdelta=B^2-4*A*CIFdelta>=0 X1=(-B+SQRT(delta))/(2*A) X2=(-B-SQRT(delta))/(2*A) ?"一元二次方程的两个实根为:" ?"X1=",X1 ?"X2=",X2ENDIF2023/1/1546/737.3.2分支结构1.简单分支结构2.双分支选择结构3.多分支选择结构2023/1/1547/732.双分支选择结构格式:IFlExpression[THEN]

Commands1ELSE

Commands2ENDIF2023/1/1548/73执行流程:2.双分支选择结构例:求AX2+BX+C=0实根。当B2-4AC<0时,显示“方程无实根”。input"请输入二次项系数:"toAinput"请输入一次项系数:"toBinput"请输入常数项:"toCdelta=B^2-4*A*CIFdelta>=0

X1=(-B+SQRT(delta))/(2*A) X2=(-B-SQRT(delta))/(2*A) ?"一元二次方程的两个实根为:" ?"X1=",X1 ?"X2=",X2ELSE

?"方程无实根"ENDIF2023/1/1549/732.双分支选择结构例:在student数据库的students表中任意查找某学生,查到则显示该学生的基本信息,无则显示“查无此人!”。OPENDATABASEstudentUSEstudentsaccept"请输入待查学生的姓名"tostuNameLOCATEFORSName=stuNameIFFOUND()

?"学号:"+SNo ?"姓名:"+SName ?"出生日期:"+SBirthdayELSE

MESSAGEBOX("查无此人!",0+64,"提示信息")ENDIFCLOSEDATABASES2023/1/1550/73分支嵌套例:设收入(P)与个人所得税(R)的计算关系如下列关系式所示,请编写计算个人所得税的程序。

0P≤2000R=0.052000<P≤5000

0.10P>50002023/1/1551/73程序如下:R0=0R1=0.05R2=0.10INPUT"请输入收入:"TOPIF

P<=2000Tax=0ELSE&&2000元以上又分两种

IFP<=5000Tax=(P-2000)*R1

ELSETax=(P-5000)*R2+3000*R1

ENDIFENDIF?“应收所得税

Tax=”,Tax7.3.2分支结构1.简单分支结构2.双分支选择结构3.多分支选择结构2023/1/1552/733.多分支选择结构格式:

DOCASECASElExpression1 [Commands][CASElExpression2

[Commands]]...[CASElExpressionN

[Commands]][OTHERWISE [Commands]]ENDCASE2023/1/1553/73执行流程3.多分支选择结构CLEARR0=0R1=0.05R2=0.10INPUT"请输入收入:"TOPDOCASE

CASEP<=2000 Tax=0

CASEP<=5000 Tax=(P-2000)*R1

OTHERWISE Tax=(P-5000)*R2+3000*R1ENDCASE?"应收所得税

Tax=",Tax2023/1/1554/73例:设收入(P)与个人所得税(R)的计算关系如下列关系式所示,请编写计算个人所得税的程序。

0P≤2000R=0.052000<P≤5000

0.10P>50007.3程序控制结构7.3.1顺序结构7.3.2分支结构7.3.3循环结构7.3.4.混合嵌套(结构)7.3.3循环结构在顺序和分支结构中,它们的每一条语句最多执行一次。然而,在实际问题中,某些语句或程序段可能需要重复运行多次才能达到目的。循环结构就是用来完成这类需要重复执行的操作的。在VisualFoxPro中,提供了“条件(DOWHILE-ENDDO)”、“步长型(FOR-ENDFOR)”和“表扫描型(SCAN-ENDSCAN)”三类循环结构。2023/1/1556/737.3.3循环结构1.条件循环结构2.步长型循环结构3.表扫描循环结构4.循环嵌套2023/1/1557/731.条件循环结构格式:DOWHILElExpression

Commands[LOOP][EXIT]ENDDO2023/1/1558/73流程:1.条件循环结构一个循环结构一般应具备以下几个部分:

(1)循环的初始条件:给循环控制变量赋初值的语句;(2)循环头:循环语句的起始,即设置、判断循环条件的语句;(3)循环尾:循环结尾语句;(4)循环体:位于循环头与循环尾之间被重复执行的语句。2023/1/1559/73例:求N!,要求N从键盘输入INPUT"请输入数值N:"TOni=1f=1DOWHILE

i<=n

f=f*ii=i+1ENDDO?“N!=”,f1.条件循环结构逐条显示student数据库students表中所有男学生记录,并统计男学生个数。OPENDATABASEstudentUSEstudentsN=0DOWHILE.not.EOF()&&记录指针控制循环

IF

性别='男' DISPLAY N=N+1

ENDIF SKIP &&如果没有SKIP会怎么样?ENDDOCLOSEDATABASES?”男学生个数N=”,N2023/1/1560/731.条件循环结构求N!(用EXIT退出循环)。INPUT"请输入数值N:"TOni=1f=1DOWHILE.t.&&注意此处与上述求N!例子的区别 f=f*i i=i+1 IFi>N

EXIT &&退出循环体 ENDIFENDDO?“N!=”,f2023/1/1561/731.条件循环结构逐条显示student数据库的students表中除“李”姓以外的所有学生记录,并统计“李”姓学生的个数。SETEXACTOFF&&设置不精确比较OPENDATABASEstudentUSEstudentsN=0DOWHILE.not.EOF()&&记录指针控制循环 IF姓名='李' N=N+1&&统计李姓学生人数 SKIP

LOOP ENDIF

DISPLAY&&显示非李姓学生 SKIPENDDOCLOSEDATABASES?“李姓学生个数N=”,N2023/1/1562/737.3.3循环结构1.条件循环结构2.步长型循环结构3.表扫描循环结构4.循环嵌套2023/1/1563/732.步长型循环结构格式:FORVarName=nInitialValue

TO

nFinalValue[STEP

nIncrement]

CommandsENDFOR|NEXT2023/1/1564/73流程:2.步长型循环结构方式1:INPUT"请输入数值N:"TOnf=1FORi=1TOn f=f*iENDFOR?“N!=”,f2023/1/1565/73方式2:INPUT"请输入数值N:"TOnf=1FOR

i=nTO

1

STEP-1f=f*iENDFOR?"N!=",f*求N!,用FOR循环实现7.3.3循环结构1.条件循环结构2.步长型循环结构3.表扫描循环结构4.循环嵌套2023/1/1566/733.表扫描循环结构格式:SCAN[Scope][FORlExpression1][WHILElExpression2][Commands]ENDSCAN功能:在当前打开的数据表中的指定范围(Scope)内查找符合条件的记录,若找到,将记录指针指向该记录,然后执行循环体,到达ENDSCAN语句时返回循环头,再次查找符合条件的记录,直到在指定范围内找不到满足条件的记录为止。如果不指定范围Scope,则对整个表中的所有记录进行扫描处理。对于FOR条件语句,将对Scope所限定的范围内的每一条记录进行一一判断,满足条件则执行循环体;对于WHILE条件语句,若下一条记录不满足条件,则停止循环。2023/1/1567/733.表扫描循环结构说明:(1)使用该结构必须先打开要扫描的数据表。(2)当每次循环执行到ENDSCAN或LOOP语句时,记录指针自动下移,如果已到文件尾,则退出循环,否则继续循环。因此,循环体中不需要SKIP语句。2023/1/1568/733.表扫描循环结构用表扫描循环实现前述中逐条显示除“李”姓以外的所有学生记录,并统计“李”姓学生的个数的程序(方式一)。SETEXACTOFF&&设置不精确比较OPENDATABASEstudentUSEstudentsN=0SCAN IF姓名='李' N=N+1

*SKIP(SCAN循环会自动移动记录指针) LOOP ENDIF DISPLAY

*SKIP(同上)ENDSCANCLOSEDATABASES?“李姓学生个数N=”,N2023/1/1569/733.表扫描循环结构用表扫描循环实现前述中逐条显示除“李”姓以外的所有学生记录,并统计“李”姓学生的个数的程序(方式二)。SETEXACTOFF&&设置不精确比较OPENDATABASEstudentUSEstudentsN=0SCAN

FOR.NOT.姓名='李'&&扫描条件 DISPLAY N=N+1&&累加不姓李的学生数ENDSCANGOBOTTOMN=RECNO()-N&&姓李学生数=总学生数-不姓李学生数CLOSEDATABASES?“李姓学生个数N=”,N2023/1/1570/737.3.3循环结构1.条件循环结构2.步长型循环结构3.表扫描循环结构4.循环嵌套2023/1/1571/734.循环嵌套循环嵌套是指在一个循环结构的循环体中又含有循环结构,也称为多重循环。同一种类型的循环结构可以嵌套,不同类型的循环结构也可以嵌套。但要注意,同层循环的循环头语句和循环结束语句须配对出现;内、外层循环层次分明,不得交叉。2023/1/1572/734.循环嵌套编程输出九九乘法表。CLEARFORa=1TO9&&控制输出行数

FORb=1TO9&&控制输出每行列数 p=a*b ??STR(a,1)+"×"+STR(b,1)+"="+STR(p,2)+""

ENDFOR ?&&注意??和?的区别ENDFOR2023/1/1573/734.循环嵌套编程输出上三角形九九乘法表。CLEARFORa=1TO9

FORb=1TOa&&注意与上例的不同 p=a*b ??STR(a,1)+"×"+STR(b,1)+"="+STR(p,2)+""

ENDFOR ?ENDFOR2023/1/1574/737.3程序控制结构7.3.1顺序结构7.3.2分支结构7.3.3循环结构7.3.4.混合嵌套(结构)7.3.4.混合嵌套(结构)如前所述,无论是分支结构还是循环结构,都可以进行嵌套从而组成更复杂的程序结构。单纯的循环嵌套称为多重循环,单纯的分支嵌套称为多重分支;循环结构中嵌入分支结构或者分支结构内包含循环结构,从而构成混合嵌套结构。这些嵌套形式统称为基本结构的嵌套。事实上,不管是分支结构还是循环结构,都自然而然地嵌套了顺序结构。而且,不管是哪一种嵌套,都应遵循下面的规则:①嵌套只能包含而不得交叉。②基本结构的开始与结束语句就近配对。③控制只能由内层转出而不能由外层转入。2023/1/1576/737.3.4.混合嵌套(结构)由男人、女人、小孩搬36块砖,男人每次搬4块,女人每次搬3块,两个小孩抬一块。问男人、女人、小孩各多少时一次可全搬完,请求出所有可能的方案。(分析:X表示男人,最多9人,Y表示女人,最多12人,小孩最多72人)。?SPACE(9)+"男"+SPACE(9)+"女"+SPACE(9)+"小孩"lines=0&&用于控制滚屏的变量x=0DOWHILEx<=9 y=0

DOWHILEy<=12 z=0

DOWHILEz<=72

IF4*x+3*y+z/2=36 ?x,y,z lines=lines+1

IFlines>30&&输出满30行暂停 WAIT lines=0

ENDIF

ENDIF z=z+2

ENDDO y=y+1

ENDDO x=x+1ENDDO2023/1/1577/737.3.4.混合嵌套(结构)上例中增加人数限制:即36块砖,36人搬,其它不变。即求不定方程:4X+3Y+(36–X–Y)/2=36整数解。?SPACE(9)+"男"+SPACE(9)+"女"+SPACE(9)+"小孩"x=1DOWHILEx<=9 y=1

DOWHILEy<=12

IF4*x+3*y+(36-x-y)/2=36ANDx+y+(36-x-y)=36&&后一条件恒为真,可省去 ?x,y,(36-x-y)

ENDIF y=y+1

ENDDO x=x+1ENDDO2023/1/1578/737.3.4.混合嵌套(结构)排序问题:从键盘任意输入10个数,然后将它们从小到大排序后输出。CLEARDIMENSIONx(10)*--------数据输入部分-----------------FORi=1TO10 x(i)=0 @i,2say"请输入第"+ALLTRIM(STR(i,2))+"个数据:"getx(i) readNEXT@12,2say"排序之前的数据顺序是:"FORi=1TO10 @13+i,5sayx(i)NEXT2023/1/1579/737.3.4.混合嵌套(结构)排序问题(续)*--------数据处理(排序)部分---------FORi=1TO9 &&控制比较轮次 FORj=i+1TO10 &&控制每轮比较次数 IFx(j)<x(i)&&控制是否要互换位置 a=x(i) x(i)=x(j) x(j)=a ENDIF ENDFORENDFOR2023/1/1580/737.3.4.混合嵌套(结构)排序问题(续)*--------排序后数据输出部分---------@26,2say"排序之后的数据顺序是:"FORi=1TO10 @26+i,5sayx(i)ENDFORRETURN2023/1/1581/737.3.4.混合嵌套(结构)在窗口中画同心圆、矩形或三角形的程序。CLEAR?"这是一个在窗口中画同心圆、矩形或三角形图案的程序。"input"请选择(1.圆,2.矩形,3.三角形):"toM*----------------取屏幕中心点坐标(a,b)a=_screen.Width/2&&_screen是系统变量,表示当前系统窗口对象b=_screen.height/22023/1/1582/737.3.4.混合嵌套(结构)在窗口中画同心圆、矩形或三角形的程序(续)。DOCASE CASEM=1 _screen.ForeColor=RGB(255,0,0)&&设置屏幕前景色为红色 FORi=0TO150STEP3 _screen.Circle(i,a,b)&&以屏幕中心为圆心、i为半径画同心圆 ENDFOR CASEM=2 _screen.ForeColor=RGB(0,255,0)&&设置屏幕前景色为绿色 FORi=0TO150STEP3 _screen.box(a-i,b-i,a+i,b+i)&&画矩形 ENDFOR CASEM=3 _screen.ForeColor=RGB(0,0,255)&&设置屏幕前景色为蓝色 FORi=0TO150STEP3 _screen.Line(a-i,b+i,a+i,b+i)&&画线,由多条线堆成三角状 ENDFOR OTHERWISE ?"请输入数字1,2或者3。"ENDCASE_screen.ForeColor=RGB(0,0,0)2023/1/1583/73第7章结构化程序设计7.1程序文件7.2程序方式下的几个基本命令7.3程序控制结构7.4多模块程序(略)7.5程序的调试(略)实验7结构化程序设计实验目的熟悉VFP面向过程程序设计方法,重点在于通过实验掌握面向过程程序设计中的常用输入输出语句和三种基本程序结构。建议学时:4学时2023/1/1585/73实验7结构化程序设计实验要求掌握结构化程序设计的基本方法,结构化程序设计的算法表示。掌握命令文件(.PRG)的建立、修改和运行,并了解程序调试方法。熟练掌握和运用程序设计的基本输入(INPUT、ACCEPT、WAIT等)、输出语句(?、??)以及环境设置语句(CLEAR、SET等);掌握结构化程序设计的三种基本结构(顺序、选择、循环),熟练运用三种控制结构编制程序。程序设计基本算法:掌握数值运算算法(整除、求余、累加、累乘等),掌握字符处理算法(字符比较、字符转换、字符串拆合等),掌握表检测函数(BOF、EOF、RECCOUNT、RECNO、FCOUNT、FIELD、FOUND等),掌握表内容输入、查询和显示输出的基本算法。了解环境检测函数(INKEY、FILE、IIF等),了解宏替换、名字表达式和值表达式的综合运用。子程序、自定义函数设计与参数传递:了解子程序、过程和自定义函数的设计方法,以及调用与返回规则;了解参数传递(传值和引用)规则;了解内存变量的作用域及其对参数传递的影响。2023/1/1586/73实验7结构化程序设计实验内容1.编写一个求圆面积的程序,圆的半径要求提示用户从键盘输入。2.编写一个程序,要求任意输入3个数,找出其中的最大值和最小值。3.编写一个求任意数N累加和的程序。然后将其修改成求任意数N阶乘的程序。最后再修改成求1!+2!+......+N!的程序。4.编写程序,要求任意输入10个数,统计其中正数、负数和零的个数。5.用扫描循环(SCAN...ENDSCAN)输出student表中男同学的记录。2023/1/1587/73实验7结构化程序设计实验内容6.编写一个程序,其功能是:把student表的记录按照从最后一个到第一个的顺序依次显示出来,而且每一屏只能显示5个记录。显示的内容是:记录号、学号、姓名、性别、出生日期、党员否。其中,是党员的要求显示为“党员”,否则为“非党员”。2023/1/1588/737.6本章小结本章介绍了程序及程序文件的概念、如何建立和运行程序文件,以及程序方式下常用的环境设置与输入/输出命令等;重点介绍了结构化程序设计中的顺序结构、选择结构和循环结构,以及在这三种基本控制结构上的复合嵌套。理论上,利用这三种基本结构可构成任意复杂的模块或应用程序。本章中的一些基本概念体现了结构化程序设计的核心思想,是模块化程序设计的基石,并且结构化程序设计中的三种基本控制结构及其复合嵌套形式也

温馨提示

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

评论

0/150

提交评论