第六章 程序设计基础_第1页
第六章 程序设计基础_第2页
第六章 程序设计基础_第3页
第六章 程序设计基础_第4页
第六章 程序设计基础_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

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

文档简介

第六章程序设计基础6.1结构化程序设计概述6.2程序控制结构6.3模块化程序设计结构化程序设计是根据不同的情况和条件,控制程序执行相应操作的语句序列。一般遵循四条原则:自顶向下、逐步求精、模块化和限制使用转移语句。6.1结构化程序设计概述结构化程序的本质是功能设计,即以功能为主进行设计,其方法是自顶向下、功能分解。开发过程通常是从“做什么”到“如何做”,优点是系统结构强、便于设计和理解。1.结构程序设计与算法程序的基本组成计算机是依靠程序工作的。利用计算机解决问题,首先要确定需要得到什么样的“输出”结果;其次,要想得到需要的结果,需要提供必要的数据,称为“输入”;最后,需要确定如何“处理”输入的数据,才能获得相应的“输出”结果。因此,程序的基本组成包括输入、处理和输出三部分。2025/1/18算法算法是解决某个问题或处理某个事件的方法和步骤。算法可以分为两大类:-数值计算方法,如求解超越方程的根等。-是非数值计算方法,如排序、查找、求总和等。算法的描述算法可以采用不同的方法来描述,如自然语言、伪代码、流程图或程序设计语言等。最常用的算法图形描述工具是流程图,它使用的图形符号表示算法中不同的处理。2025/1/18流程图中常用的图形符号:例如,根据三角形的三条边求三角形面积的算法步骤用流程图描述:2025/1/18注释语句有以下三种书写格式:①作为单独一行,以“*”开头,后跟注释信息。②作为单独一行,以NOTE语句开头,后跟注释信息。③与命令行同行,在命令行后加“&&”以及注释信息。-程序由若干个程序行组成,一行只能写一条命令。-在程序中命令书写应遵循命令书写规则。-可在程序中加入注释语句。2.程序的书写规则在VFP中,程序文件是一个利用命令语句和程序控制语句序列来表达算法功能的文本文件,其文件扩展名为.prg。3.程序的建立利用命令建立程序文件语法格式:MODIFYCOMMAND[文件名|?]功能:如果程序文件不存在,则建立一个程序文件,并自动打开程序代码编辑器,输入程序代码;若程序文件已存在,则自动打开该文件,进行编辑和修改。若选用“?”,则由用户选择程序文件进行修改。选择“文件”菜单中的“新建”命令,在“新建对话框”中选择“程序”选项,单击“新建文件”按钮,即可创建程序文件。利用菜单建立程序文件利用项目管理器建立程序文件在项目管理器上的“代码”选项卡中,选择“程序”,然后单击项目管理器上的“新建”按钮,也可以创建程序文件。例如,编写程序求一个圆的面积。在命令窗口执行语句:MODIFYCOMMANDarea4.程序的运行-执行“程序”菜单中的“运行”命令-单击工具栏上的“

”按钮-执行DO命令语句语法格式:DO程序文件名编写程序代码:

Input"请输入一个圆的半径"torS=3.14*r^2?"圆的面积是:",S输入语句语法格式:INPUT[提示信息]TO<内存变量>功能:等待用户从键盘输入数据,并赋给内存变量。

INPUT语句输入的数据可以是数值型、字符型等数据。如果是字符型数据或日期型等,必须加定界符。5.程序中常用命令语句在程序执行过程中,常常需要用到交互式的输入/输出语句以及其他命令语句。例如:执行语句Input"请输入一个数据"tox&&输入3?x

语法格式:ACCEPT[提示信息]TO<内存变量>功能:等待并提示用户从键盘输入一个字符串数据,并赋给内存变量。

ACCEPT语句注意:输入的字符型数据或日期型等,必须不需要加定界符。例如:执行语句Accept"请输入一个数据"tox&&输入abc?x例如:执行语句Input"请输入一个数据"toy&&输入"abc"?y

输出语句语法格式:

?|??<内存变量名表>功能:显示内存变量、常量或表达式的值。

?/??语句例如:执行语句Input"请输入一个数据"tox&&输入3?x Input"请输入一个数据"toy&&输入"abc"??y

说明:?表示在光标所在行的下一行开始显示;??表示在当前光标位置开始显示。6.1结构化程序设计概述语法格式WAIT["<提示信息>"][TO<内存变量名>]WINDOW功能:暂停程序运行,并在屏幕上显示提示信息,等待用户从键盘上输入一个字符,然后继续执行。

WAIT语句-<提示信息>用于提示用户进行操作的信息。-TO<内存变量名>表示输入的字符保存到指定的内存变量中。-WINDOW表示在屏幕右上角系统信息窗口中显示提示信息的内容。例如:执行语句Wait"请输入一个数据"tox?x Wait"请输入一个数据"toywindow?y

其他常用命令语句

CLEAR功能:清除VisualFoxPro主窗口工作区所显示的信息。

QUIT功能:关闭所有文件,释放所有变量,退出VisualFoxPro,返回Windows操作系统。

CLEARALL功能:关闭所有数据表文件,释放所有变量,清除所有用户自定义的菜单和窗口,并将当前工作区设置为1区。

SETTALKON|OFF功能:打开或关闭人机对话。说明:在SETTALKON状态下,程序执行时把一些非显示命令的执行结果显示出来;在OFF状态下,只有输出命令的结果才能显示。系统默认状态为ON状态。6.MESSAGEBOX消息框函数用途:用于信息提示,

并要求用户做出响应。格式为:m=MESSAGEBOX(cMessageText[,nDialogBoxType[,cTitleBarText]])参数说明:cMessageText:消息框中显示的文本信息。nDialogBoxType:一个数值表达式(缺省时为0),用于定义消息框中按钮的个数、类型和显示图标的样式。cTitleBarText:消息框的标题,缺省时为“MicrosoftVisualFoxPro”。m:变量,用于接收MESSAGEBOX函数的返回值。nDialogBoxType参数按钮的个数和类型取值

nDialogBoxType参数由三个数值常量组成,形式为n1+n2+n3。取值

按钮名称0 确定1 确定和取消2 终止、重试和忽略3 是、否和取消4 是和否5 重试和取消nDialogBoxType参数:4+n2+n3。取值

图标16 32 48 64 nDialogBoxType参数图标样式取值

nDialogBoxType参数:n1+n2+n3。nDialogBoxType参数:4+32+n3。取值

默认按钮0 第一个按钮

256 第二个按钮

512 第三个按钮

默认按钮取值nDialogBoxType参数:n1+n2+n3。nDialogBoxType参数:4+32+256。nDialogBoxType参数函数调用:m=MESSAGEBOX("是否退出系统?",4+32+256,"退出")取值

按钮名1 确定

2 取消

3 终止4 重试5 忽略6 是7 否m=MESSAGEBOX("是否退出系统?",4+32+256,"退出")?m &&m=7MESSAGEBOX函数返回值1.顺序结构6.2程序控制结构程序控制结构是指程序中命令或语句执行的流程结构。结构化程序设计的程序控制结构有顺序结构、分支结构和循环结构三种基本结构,每一种基本结构可以包含一个或多个语句。顺序结构是最简单、最常用的程序结构,是按程序中语句的书写顺序依次执行不同的控制结构。例6.1:求圆的面积。INPUT"请输入圆的半径"torS=3.14*r*r?"圆的面积是:",S2.分支结构分支结构是根据条件表达式的计算结果判定执行不同语句组的结构。VFP中提供了三种分支结构:单分支、双分支和多分支语句单分支语句IF<条件表达式><语句组>ENDIF执行流程:条件表达式的值为.T.,则执行语句组;条件表达式值为.F.,执行ENDIF后面的语句。2025/1/18例6.2:根据学号查找学生表(student.dbf)中的学生信息。CLEARUSEstudentACCEPT"请输入学生的学号"TOxhLOCATEFORstudent.stuno=xhIFFOUND()DISPLAYENDIFUSE双分支语句IF<条件表达式><语句组A>ELSE<语句组B>ENDIF执行流程:条件表达式的值为.T.,则执行语句组A;条件表达式值为.F.,执行执行语句组B。两个语句组执行且仅执行一个。例6.3:根据三条边求三角形的面积。CLEARINPUT"请输入第一条边"TOaINPUT"请输入第二条边"TObINPUT"请输入第三条边"TOcs=0p=(a+b+c)/2IFa+b>canda+c>bandb+c>aS=SQRT(p*(p-a)*(p-b)*(p-c))?"三角形的面积是",sELSEWAITWINDOW"输入的三条边a、b、c不能构成三角形"ENDIFIIF函数是根据条件成立与否返回不同的结果。条件函数IIFIIF(条件表达式,表达式1,表达式2)执行规则:如果条件表达式的值为.T.,函数返回表达式1的值;否则,返回表达式2的值。例6.4:从键盘输入两个自然数,输出两个数中的较大数。CLEARINPUT"请输入第一个数"TOaINPUT"请输入第二个数"TObmaxnum=IIF(a>b,a,b)?"较大数"+STR(maxnum)多分支语句CASECASE<条件表达式1><语句组1>CASE<条件表达式2><语句组2>……CASE<条件表达式N><语句组N>[OTHERWISE<语句组N+1>]ENDCASE执行规则:1)依次求解条件表达式,若某条件表达式的计算结果为.T.,则执行相应的语句组;2)否则继续求解下一个条件表达式。3)如果所有的条件表达式都为.F.,若有OTHERWISE,则执行语句组N+1,DOCASE语句执行结束,否则不执行任何语句,直接执行ENDCASE后面的语句。例6.5:实现百分制成绩的等级转换,若成绩>=90为优秀,成绩<90且成绩>=80为良好,成绩<80且成绩>=70为中等,成绩<70且成绩>=60为及格,成绩<60为不及格。DOCASECASEa>=90b="优秀"CASEa>=80b="良好"CASEa>=70b="中等"CASEa>=60b="及格"OTHERWISEb="不及格"ENDCASE3.循环结构编写程序时会遇到一些语句需要多次重复执行。例如,求1+2+3+…+n的累加和,需要重复执行n次加法运算。像这类问题可使用程序设计中的另一种结构,即循环结构。循环结构依据条件反复执行相同的语句组,这组被反复执行的语句组称为循环体,循环体被反复执行的次数称为循环次数。在VFP中常用的循环控制语句有三种:-DOWHILE…ENDDO-FOR…ENDFOR/NEXT-SCAN…ENDSCANDOWHILE…ENDDODOWHILE<条件表达式><语句组1>[LOOP][EXIT]<语句组2>ENDDO执行流程:当条件表达式的值为.T.时,执行循环体,直到条件表达式的值为.F.,结束循环体,执行ENDDO后面的语句。DOWHILE…ENDDO循环用于条件控制循环的执行。例6.6逐条显示学生表(student)中所有来自“上海”的学生信息。CLEARUSEstudentLOCATEFORbirthplace="上海"DOWHILEFOUND()DISPLAYWAITWINDOWCONTINUEENDDOUSEUSEstudentm=0n=0DOWHILENOTEOF()IFstudent.gender="男"m=m+1ELSEn=n+1ENDIFSKIPENDDO?"男生人数"+STR(m),"女生人数"+STR(n)USE例6.7统计学生表中男女学生的人数。FOR…ENDFOR/NEXTFOR<循环变量>=<初值>TO<终值>[STEP<步长>]<语句组1>[LOOP][EXIT]<语句组2>ENDFOR/NEXTs=0n=1DOWHILEn<=10s=s+nn=n+1ENDDO?s例6.8求1+2+3+4+…+10。s=0FORn=1TO10s=s+nENDFOR?s累加算法思考:如何求100!?字符操作算法思考:如果用DOWHILE…ENDDO是否可以实现?

例6.10求字符串逆序,如已知字符串“abcdef”,请输出逆序的结果。s="abcdef"sr=""FORi=LEN(s)TO1STEP-1sr=sr+SUBSTR(s,i,1)NEXT?"abcdef逆序的输出结果:"+srSCAN…ENDSCANSCAN[范围][FOR<条件表达式>]<语句组>ENDSCAN说明:(1)SCAN与ENDSCAN循环语句中隐含了EOF()和SKIP命令处理。(2)[范围]表示记录范围,默认值为ALL。(3)FOR<条件表达式>表示只扫描满足条件的记录。CLEARUSEteacherSTORE0TOmSCANFORcation="博士"DISPLAYm=m+1ENDSCAN?"博士人数"+STR(m)USE例6.11统计并显示具有博士学位的教师信息。USEstudentm=0n=0DOWHILENOTEOF()IFstudent.gender="男"m=m+1ELSEn=n+1ENDIFSKIPENDDO?"男生人数"+STR(m),"女生人数"+STR(n)USESCANENDSCAN思考:如何用SCAN…ENDSCAN实现统计学生男女人数?

6.3模块化程序设计循环结构可以实现同一个程序中某段程序反复执行多次,但常常需要在同一个程序的不同位置多次执行某段程序,或在不同程序中执行同一程序段。因此在程序设计中,常把完成一个功能的程序编写成一个单元,以便在其他程序中使用该功能时调用,这种为完成一个特定功能而编写的程序段称为自定义函数或过程。1.自定义函数函数定义FUNCTION<函数名>PARAMETERS<形参列表><命令语句序列>RETURN[<表达式>][ENDFUNC]不能与系统函数名以及内存变量名相同用来接收主程序中的实参数据用于返回函数值。若省略该语句或表达式,则自定义函数等同于过程。注意:实参与形参一一对应。函数调用格式:函数名([实参列表])例6.12编写一个求n!的函数。FUNCTIONfactPARAMETERSnp=1FORi=1TOnp=p*iNEXTRETURNpENDFUNC注意:函数不能单独执行。在命令窗口调用fact函数求5!

,执行过程:FUNCTIONfactPARAMETERSnp=1FORi=1TOnp=p*iNEXTRETURNpENDFUNC?fact(5)FUNCTIONfactPARAMETERSnp=1FORi=1TOnp=p*iNEXTRETURNpENDFUNC例6.13编写程序求1!+2!+3!+…+10!s=0FORi=1TO10s=s+fact(i) NEXT?s在主程序中调用自定义函数。主程序自定义函数1.自定义过程过程定义PROCEDURE<过程名>PARAMETERS<形参列表><命令语句序列>[RETURN][ENDPROC]不能与系统函数名以及内存变量名相同用来接收主程序中的实参数据无返回函数值注意:实参与形参一一对应。过程调用格式:DO<过程名>with<实参列表>例6.14编写一个过程求两个数据的和。CLEARx=25y=38z=0DOsmwithx,y,z?"两个数x,y的和是:",zPROCEDUREsmPARAMETERSX1,Y1,Z1Z1=X1+Y1ENDPROC注意:过程也不能单独执行。主程序自定义过程执行过程3.参数传递在自定义函数和过程时,如果函数或过程需要从主程序获取数据进行处理,则主程序调用函数或过程时会通过参数传递来完成。传递数据的称为实参,而接收数据称为形参。可作为实参对象:-常量-变量-表达式在参数传递过程中,实参传递数据给对应的形参,此时系统才会给形参分配存储空间,接收实参传递的数据,当过程调用结束后,形参的空间将被撤销。在参数传递过程中要注意以下几点:-

温馨提示

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

评论

0/150

提交评论