欢迎来到课桌文档! | 帮助中心 课桌文档-建筑工程资料库
课桌文档
全部分类
  • 党建之窗>
  • 感悟体会>
  • 百家争鸣>
  • 教育整顿>
  • 文笔提升>
  • 热门分类>
  • 计划总结>
  • 致辞演讲>
  • 在线阅读>
  • ImageVerifierCode 换一换
    首页 课桌文档 > 资源分类 > PPT文档下载  

    VFP结构化程序设计.ppt

    • 资源ID:245752       资源大小:1.11MB        全文页数:85页
    • 资源格式: PPT        下载积分:10金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    VFP结构化程序设计.ppt

    第九章,结构化程序设计,2023/3/20,2,9.1 程序设计基础9.2 顺序结构程序9.3 分支结构程序9.4 循环结构程序9.5 程序的模块化,2023/3/20,3,使用计算机解决实际问题,通常是先要对问题进行分析并建立数学模型,然后考虑数据的组织方式和算法,并用某一种程序设计语言编写程序,最后调试程序,使之运行后能产生预期的结果。这个过程称为程序设计。,9.1 程序设计基础,9.1.1 程序设计的概念,2023/3/20,4,9.1.2 结构化程序设计方法,结构化程序设计采用自顶向下、逐步求精和模块化的分析方法。,自顶向下是指对设计的系统要有一个全面的理解,从问题的全局入手,把一个复杂问题分解成若干个相互独立的子问题,然后对每个子问题再作进一步的分解,如此重复,直到每个问题都容易解决为止。,逐步求精是指程序设计的过程是一个渐进的过程,先把一个子问题用一个程序模块来描述,再把每个模块的功能逐步分解细化为一系列的具体步骤,以致能用某种程序设计语言的基本控制语句来实现。,在编制一个较复杂的程序时,大致可分为5个步骤:1审题 2划分处理模块 3数据库结构的设计 4画流程图 5编写程序,2023/3/20,5,任何复杂的程序都由3种基本控制结构组成。它们是顺序结构、选择结构和循环结构。,图9.1程序的控制结构,9.1.3结构化程序的控制结构,2023/3/20,6,9.1.4 程序文件的建立与执行,VF程序文件又称命令文件,其扩展名为.prg。,(1)命令方式格式1:MODIFY COMMAND 命令文件名|?格式2:MODIFY FILE 文件名|?功能:调用内嵌文本编辑器,建立或修改一个指定的命令文件。,2菜单方式建立编辑程序文件,1命令方式建立或修改程序文件,(2)菜单方式操作步骤:从“文件”菜单中选择“新建”菜单选项。在“新建”对话相中选择“程序”单选按钮。单击“新建文件”按钮。说明:修改命令文件时,首先从FILE菜单中选择OPEN菜单选项,然后在文件名的文本框中键入待修改的命令文件名,再单击打开按钮即可在编辑窗口打开该文件。,2023/3/20,7,(1)命令方式 格式:DO 程序文件名 功 能:将程序文件从磁盘调入内存,编译成.FXP目标文件后并执行。说明:当命令文件名的扩展名缺省时,系统按如下顺序搜索并执行的这些程序:可执行文件(.EXE)、应用程序(.APP)、编译后的目标程序文件(.FXP)和程序文件(.PRG)。,2.程序文件的执行,(2)菜单方式操作步骤:在“程序”/“运行”,出现对话框。在“执行文件”的文件名输入框中直接键入命令文件名,或在文件列表中单击所需命令文件名。单击“运行”按钮。终止程序运行:.CANCEL:终止程序运行,清除所有的私有变量,返回命令窗口。.RETURN:结束程序执行,返回调用它的上级程序,若无上级程序则返回命令窗口。.QUIT:结束程序执行并退出Visual.FoxPro系统,返回操作系统。,2023/3/20,8,9.2 顺序结构程序,顺序结构是最简单、最基本的一种程序结构。在顺序结构程序中,各命令按照各自出现的先后顺序,依次执行。,例92 在学生.dbf表中显示第一条记录的姓名、性别、出生日期、数学、外语成绩,*FILENAME E9_2.PRGSET TALK OFFCLEARUSE 学生DISPLAY 姓名,性别,出生日期,数学,外语USE SET TALK ONRETURN,2023/3/20,9,其流程图如右图所示。,A,B,C,N,图中箭头表示程序执行的方向,方框代表不同的可执行语句。,2023/3/20,10,9.2.1 程序文件中的辅助命令,1、程序注释命令格式1:NOTE|*注释 开头代码注释行格式2:&注释 命令行后代码注释行功能:对程序进行说明,对运行结果不会产生任何影响。,2、清屏命令,格式:CLEAR功能:清除屏幕上所有显示内容,将光标置于屏幕左上角。,3、常用状态设置命令,(1)置会话状态命令格式:SET TALK ON|OFF,2023/3/20,11,说明:在会话状态开通时,Visual FoxPro在执行命令时会向用户提供大量的反馈信息。程序调试时,一般置“会话”于开通状态,而在执行程序时则通常要求置“会话”于断开状态。,(2)置打印状态命令格式:SET PRINT ON|OFF 说明:系统默认打印机置于断开状态,执行结果只送到屏幕,不送往打印机。反之,则在屏幕上显示的执行结果被同时打印。,(3)置屏幕状态命令格式:SET CONSOLE ON|OFF说明:在系统的默认状态下,用户从键盘输入的内容都在屏幕上显示,然而有时却要求键入的内容保密而不被显示,这只需使用命令SET CONSOLE OFF便可。,2023/3/20,12,(4)置缺省驱动器和目录命令格式:SET DEFAULT TO 盘符:路径说明:用于设置进行输入输出操作时的缺省驱动器和缺省目录,9.2.2 交互式输入命令,1.字符串接收命令格式:ACCEPT TO 功能:暂停程序执行,将键盘输入的字符串送入指定内存变量后再继续运行。,说明:若给出提示信息选项,将输出提示信息,否则不输出任何信息。其中可以是字符型内存变量、字符串常量或合法的字符表达式。本命令只接收字符串,输入时该字符串不需要使用定界符,其长度不能超过254个字符。本命令以回车作为结束符。,2023/3/20,13,例9.3 在学生表中,从键盘上输入任意一个学生的学号查询学生的姓名、性别、出生日期、数学、外语成绩。,*FILENAME E9_3.PRGCLEARSET TALK OFFUSE 学生ACCEPT 请输入待查学生的学号:TO xhLOCATE FOR 学号=xhDISP 学号,姓名,性别,出生日期,数学,外语USESET TALK ONRETURN,2023/3/20,14,2任意数据输入命令格式:INPUT TO 功能说明:提示信息选项同ACCEPT命令。INPUT命令可以接收字符型、数值型、日期型及逻辑型数据。字符串的输入必须用定界符括起来,输入数值或表达式,不加任何定界符;输入日期型数据,除使用日期型的格式外,还要用大括号将其括起来。本命令以回车作为结束符。INPUT命令不允许在没有输入任何内容的情况下直接按回车。,2023/3/20,15,例9.4 输入圆半径计算圆面积。,*FILENAME E9_4.PRGNOTE 已知半径求圆面积SET TALK OFFCLEARSTORE 3.14 TO PINPUT 请输入圆的半径:TO PSP*R2?半径是+LTRIM(STR(P)+的圆面积是:?SSET TALK ON,2023/3/20,16,3.单个字符接收命令格式:WAIT TO WINDOW NOWAIT TIMEOUT 功能:暂停程序执行,等待用户键入任何一个字符后继续。,*Filename E9_5.prgSET TALK 0FFUSE 学生CLEARLIST NEXT 10SKIP WAIT WINDOW&在屏幕右上角的窗口内显示提示信息LIST NEXT l0USESET TALK ON,例9.5 学生表学生.DBF中含20条记录,分两屏输出,2023/3/20,17,4.三种键盘输入命令的比较,5.基本输出命令格式:?|?,功能:在屏幕上输出表达式的信息,?与?的区别在于:?在当前光标的下行首列输出信息,?在当前光标当前位置输出。,2023/3/20,18,1.格式输出命令格式:SAY 功能:在屏幕指定的行列处显示表达式的值。说明:指定了输出的位置。屏幕左上角为0,0,有下角为屏幕最大行数-1,屏幕最大列行数-1,行、列都可为表达式,还可为小数。,9.2.3 格式输入输出命令,2.格式输入命令格式:SAY GET READ功能:SAY命令与READ命令结合,在屏幕上指定行列处显示并允许修改一个内存变量或字段变量的值。,2023/3/20,19,说明:SAY子句用于显示提示信息,GET子句用于为变量输入新值。GET子句中的变量必须有确定的初值。初值决定了该变量的类型和宽度。激活CET变量是指使该变量进入编辑状态,让光标自动跳到该变量值所在位置上等待编辑修改。,2023/3/20,20,例:9.7 从键盘上任意输入两个数据,要求用格式化语句完成。,*FILENAME E9_7.PRGSET TALK OFFCLEARA=0&表示变量A仅仅可以输入整数B=0.00&表示变量B仅仅可以输入实数,小数位为两位4,10 SAY“请输入第一个整数:”GET A6,10 SAY“请输入第二个实数:”GET BREADC=A+B8,10 SAY STR(A)+”+”+ALLT(STR(B,10,2)+”=”+ALLT(STR(C,10,2)SET TALK ONRETURN,2023/3/20,21,根据逻辑条件是否满足来转向不同的程序去执行,这就构成了分支结构。,9.3 分支结构程序,.F.,1单分支语句(IFENDIF)简单分支语句的格式:IF ENDIF功能说明:若条件为真则执行IF到ENDIF中间的语句为假,则从ENDIF下条语句执行。,2023/3/20,22,例9.8 从键盘上输入任意两个数据,请按照从大到小的顺序输出,*FILENAME E9_8.PRGSET TALK OFFCLEARINPUT“请输入第一个数据:”TO AINPUT“请输入第二个数据:”TO BIF AB&满足条件两个数据发生交换,否则不执行条件语句 C=A A=B B=CENDIF?A,BSET TALK ONRETURN,2023/3/20,23,ACCEPT“输入要查询学生的学号:”TO XHCJ=“该生数学成绩低于60分”&变量CJ用于存放是否及格的信息 USE 学生表 LOCATE FOR 学号=XH IF 数学=60 CJ=“该生数学成绩60分以上”ENDIF?CJ USE(演示:利用MODI COMM命令生成一个.PRG文件,用DO命令执行),例:在“学生表.DBF”表文件中,按学号查询某个学生平时成绩是否及格。,2023/3/20,24,格式:IF ELSE ENDIF 功能说明:若条件为真,执行命令序列1,然后执行ENDIF的后继命令。如果条件为假,且有ELSE子句,执行命令序列2,然后执行ENDIF的后续命令,若无ELSE子句,则直接转到ENDIF之后。,2双分支结构(IFELSEENDIF),注:(1)IF和ENDIF必须配对使用,而ELSE可选。(2)IF、ELSE、ENDIF必须各占一行。(3)可以为关系表达式、逻辑表达式。(4)在语句序列1和语句序列2中可以嵌套IF语句。,2023/3/20,25,例9.9 从键盘接收一个字符,如果是小写字母,将其以大写字母后输出,其他字符直接输出。,*FILENAME E9_9.PRGSET TALK OFFCLEARWAIT 请输入一个字符:TO LIF L=a AND L=z?UPPER(L)ELSE?LENDIFSET TALK ON,2023/3/20,26,ACCEPT“输入要查询学生的学号:”TO XH USE 学生表 LOCATE FOR 学号=XH IF 数学=60 CJ=“数学成绩60分以上”ELSE CJ=“数学成绩低于60分”ENDIF?CJ USE,例:用选择分支语句,重新编写上例的程序。,2023/3/20,27,SET TALK OFFINPUT“请输入所用电量:TO DLIF DL=50DF=DL*0.5ELSEDF=50*0.5+(DL-50)*0.8ENDIF?“应缴电费为:”+LTRIM(STR(DF,10,2)+元SET TALK ONRETURN,*FILENAME E9_11.PRGSET TALK OFFINPUT“请输入所用电量:TO DLDF=IIF(DL=50,0.5*DL,0.5*50+0.8*(DL-50)?“应缴电费为:”+LTRIM(STR(DF,10,2)+元SET TALK ONRETURN,例9.10 请用分支结构语句编程计算电费:不超过50度,每度0.5元;超过50度时,超出部分每度0.8元。,结论:条件函数IIF同样具有逻辑判断功能,2023/3/20,28,SET TALK OFF INPUT 请输入行李重量:TO WIF 1 YF=0.22*W ELSE YF=0.22*40+1ENDIF?应交托运费为:+LTRIM(STR(YF,10,2)+元SET TALK ONRETURN,例 火车托运行李:每人不超过40公斤,每公斤0.22元;超过40公斤时,超出部分每公斤0.40元。填空完成以下程序。,W 40,(W-40)*0.4,2023/3/20,29,9.3.3多分支结构,DO CASECASE 条件表达式1 语句序列1CASE 条件表达式2 语句序列2 CASE 条件表达式n语句序列n OTHERWISE 语句序列n+1 ENDCASE,2023/3/20,30,功能:系统依次测试语句中各个条件表达式的值:若为真,即执行相应条件表达式后的语句序列,然后脱离情况语句,执行ENDCASE的下一语句。若所有的条件表达式的值均为假,则执行OTHERWISE后面的语句序列,然后脱离情况语句,执行ENDCASE下一语句。,说明:DO CASE和第一个CASE子句之间不能插入任何语句。DO CASE和ENDCASE必须配对使用,且DO CASE,CASE,OTHERWISE和ENDCASE各子句必须各占一行。在语句序列中可嵌套情况语句。,2023/3/20,31,例 9.12 输入任意一个百分制成绩,输出对应的5分制成绩,其对应关系如下:优(100百分成绩90)、良(90百分成绩80)、中(80百分成绩70)、及格(70百分成绩60)或不及格(百分成绩60)。,CLEARSET TALK OFFINPUT 请输入百分制成绩:TO CJDO CASE CASE CJ=90 dj=优 CASE CJ=80 dj=良 CASE CJ=70 dj=中 CASE CJ=60 dj=及格 OTHERWISE dj=不及格ENDCASE?5成绩等级为:+djSET TALK ON,2023/3/20,32,例9.13 在学生表中,从输入键盘上输入任意一个学生的学号,查找该学生,如有则显示他的数学成绩所属的等级,否则显示没有该学生。,*FILENAME E9_13.PRGSET TALK OFFCLEARUSE 学生ACCEPT“请输入需要查询学生的学号:”TO ALOCATE FOR 学号=AIF FOUND()DO CASECASE 数学=90?学号,姓名,数学,“优秀”CASE 数学=80?学号,姓名,数学,“良好”CASE 数学=70?学号,姓名,数学,“中等”CASE 数学=90?学号,姓名,数学,“及格”OTHER,?学号,姓名,数学,“不及格”ENDCASE ELSE?”无该学号的学生!”ENDIF USE SET TALK ONRETURN,2023/3/20,33,例9.14 从键盘上任意输入一个字符,判断所输入的字符类型(数字字符、大写英文字符、小写英文字符、空格字符或其他字符),*FILENAME E9_14.PRGSET TALK OFFCLEARWAIT“请输入任意一个字符:”TO A DO CASE CASE A=”0”AND A=”A”AND A=”a”AND A=”z”WAIT“小写英文字符”+A+”!”CASE A=”WAIT“空格字符”+A+”!”OTHERWISE WAIT“其他字符”+A+”!”ENDCASESET TALK ONRETURN,2023/3/20,34,例 阅读下列程序段,写出运行结果:,A=3000DO CASECASE A=1000B=ACASE A=2000B=2*ACASE A=3000B=3*AENDCASE?B,2023/3/20,35,循环,就是按给定的条件连续地重复执行一段特定功能的程序。循环结构也称为重复结构。,9.4 循环结构程序,Visual FoxPro给出了三种循环结构:条件循环(DO WHILEENDDO)计算循环(FORENDFOR)扫描循环(SCANENDSCAN),2023/3/20,36,DO WHILE LOOP EXIT ENDDO,循环体,ENDDO后的语句,条件,.T.,.F.,条件循环结构流程图,9.4.1 DO WHILE循环,循环体,条件,2023/3/20,37,(1)系统执行该语句时,先判断循环开始DO WHILE的条件是否成立,如果条件为真,则执行循环体中的语句序列。当执行到ENDDO时,返回到DO WHILE,再次判断条件是否为真,以确定是否再次执行循环体。若条件为假,则结束循环,执行ENDDO后面的语句。如果第一次判断条件时,条件即为假,则循环体一次都不执行,这就是称为“先判断后执行”的语句。(2)循环体中的LOOP是可选项。遇到LOOP时,不再执行后面的语句,转回DO WHILE处重新判断。其作用相当于一个特殊的“短路”返回控制。(3)循环体中的EXIT也是可选项。遇到它时便无条件地退出循环,转到ENDDO后面的语句。其作用相当于一个紧急出口。(4)通常LOOP或EXIT出现在循环体内嵌套的分支语句中,根据条件来决定是LOOP回去,还是EXIT出去。,功能说明:,2023/3/20,38,在以循环变量作为循环控制参数的条件循环中,循环体内一定要有修改循环变量的语句,否则 就会出现死循环。,注意,2023/3/20,39,例 求自然数1至4的和。,分析算法:,1.i=1,s=0;,2.累加第 i 个数,3.累加次数加1,4.当 i=4 重复做2;,5.?s。,2023/3/20,40,例 求自然数1至4的和。,SET TALK OFF,S=0,&定义一个变量表示和,并初始化,&指定以循环次数作判断条件,S=S+i,&把S的值加上i后再赋给S,即求和,&修改循环变量,?S,&输出求和的结果,SET TALK ON,RETURN,&设置循环变量的初值,2023/3/20,41,S=0,i=1,1=4,S=0+1,i=1+1,.T.,2=4,S=1+2,i=2+1,3=4,S=3+3,i=3+1,4=4,S=6+4,i=4+1,5=4,.F.,?10,SET TALK OFFS=0i=1DO WHILE i=4 S=S+i i=i+1ENDDO?SSET TALK ONRETURN,2023/3/20,42,若求自然数1至N的和呢?,程序:求自然数1至4的和,SET TALK OFF,S=0,i=1,INPUT 请输入N的值:TO N,DO WHILE i=4,S=S+i,i=i+1,ENDDO,?S,SET TALK ON,RETURN,i=N,推广1,2023/3/20,43,若求自然数1至N的积呢?,程序:求自然数1至N的和,SET TALK OFF,S=0,i=1,INPUT 请输入N的值:TO N,DO WHILE i=N,S=S+i,i=i+1,ENDDO,?S,SET TALK ON,RETURN,推广2,S=1,S=S*i,2023/3/20,44,例 阅读程序,并说出程序的运行结果,程序结果,2,3,4,5,6,程序结果,2,4,5,6,E,E,2023/3/20,45,例 求1100以内所有奇数的和。,SET TALK OFFS=0I=0Do while I100 I=I+1 If int(I/2)=I/2 Loop endif S=S+IEnddo?“1到100的奇数和 S=”,SSET TALK ONReturn,以循环变量作为控制参数控制循环。,S=0I=1Do while I100 S=S+I I=I+2Enddo?s,程序改进:,2023/3/20,46,例9.17 求数学常量的近似值,精确到10-6。,SET TALK OFFCLEART=1 S=1 I=1DO WHILE.T.S=S+1/TI=I+1 T=T*IIF 1/T1E-6 EXITENDIF ENDDO?E=,STR(S,8,6)SET TALK ONRETURN,2023/3/20,47,例:显示“学生表.DBF”文件中性别为“男”的学生记录。要求用DO WHILE循环编写程序。程序文件内容如下:,SET TALK OFF CLEAR USE 学生表 DO WHILE.NOT.EOF()IF 性别=“女”SKIP LOOP ENDIF DISPLAY FIELDS 学号,姓名,性别,专业 SKIP WAIT ENDDO USE SET TALK ON RETURN,2023/3/20,48,例9.18 在学生表中,输出所有学生的数学成绩所属的等级。,*FILENAME E9_18.PRGSET TALK OFFCLEARUSE 学生DO WHILE NOT EOF()DO CASECASE 数学=90?学号,姓名,数学,“优秀”CASE 数学=80?学号,姓名,数学,“良好”CASE 数学=70?学号,姓名,数学,“中等”CASE 数学=90?学号,姓名,数学,“及格”OTHER?学号,姓名,数学,“不及格”ENDCASE SKIP ENDDO USE SET TALK ON,2023/3/20,49,例 求连乘数1*2*3*4*,当积大于720时退出程序。,Set talk offClearS=1I=1Do while.T.S=S*I I=I+1Enddo?“S=”,S Set talk onReturn,循环控制条件恒为真,要使用EXIT语句结束循环,2023/3/20,50,例:读下面程序,分析该程序实现的功能。SET TALK OFFCLEARUSE GZDO WHIL!EOF()IF 基本工资=800 SKIP LOOPENDIFDISPLAYSKIPENDDOUSERETURN,2023/3/20,51,语句格式:FOR XA TO B STEP C LOOP EXIT ENDFOR|NEXT,9.4.2 FOR循环,循环体,功能说明:重复执行FORNEXT(或ENDFOR)之间的N次。其中:N=(-+1)/若为1,则STEP 可以省略。,循环变量,循环初值,步长值,循环终值,2023/3/20,52,例 求1100之和。,SET TALK OFFClear S=0for I=1 to 100 S=S+IEndfor?“S=”,SSET TALK ONReturn,若求100的阶乘呢?,思考1,2023/3/20,53,例 求1100之奇数和。,SET TALK OFFClear S=0for I=1 to 100 step 2 S=S+INext?“S=”,SSET TALK ONReturn,若求1100的偶数和呢?,思考2,2023/3/20,54,例 阅读程序,写出程序运行结果,思考3若改成EXIT?,2023/3/20,55,例9.21 求水仙花数。所谓水仙花数是指一个三位数,其各位数字的立方和等于该数本身。如153=13+53+33,*求任意三位数I是否是水仙化数,如是输出 A=I%10&求个位 B=INT(I/10%10)&求十位 C=INT(I/100)&求百位 IF I=A3+B3+C3?I ENDIF,CLEAR FOR I=100 TO 999 A=I%10 B=INT(I%100/10)C=INT(I/100)IF I=A3+B3+C3?I ENDIFENDFORRETURN,CLEARSET TALK OFFFOR I=1 TO 9 FOR J=10 TO 9 FOR K=0 TO 9 IF 100*I+10*J+K=I3+J3+K3?100*I+10*J+K ENDIF ENDFOR ENDFORENDFORSET TALK ONRETURN,2023/3/20,56,循环嵌套(多重循环),循环体内又设置循环的情况称为多重循环,又称为循环嵌套。内外循环的层次必须分明,不允许有交叉现象出现。循环结构可以与分支结构嵌套,同样不允许有交叉现象出现。,以下交叉情形不允许出现:,2023/3/20,57,语句格式:SCAN FOR LOOP EXIT ENDSCAN,9.4.3 SCAN循环,循环体,功能:在指定的范围内,依次对满足条件的记录执行相应的操作。,2023/3/20,58,2023/3/20,59,例9.23 在学生表中,输出所有学生的数学成绩所属的等级。用SCANENDSCAN循环,*FILENAME E9_23.PRGSET TALK OFFCLEARUSE 学生SCANDO CASECASE 数学=90?学号,姓名,数学,“优秀”CASE 数学=80?学号,姓名,数学,“良好”CASE 数学=70?学号,姓名,数学,“中等”CASE 数学=90?学号,姓名,数学,“及格”OTHER?学号,姓名,数学,“不及格”ENDCASE ENDSCAN USE SET TALK ONRETURN,2023/3/20,60,CLEAR STORE 0 TO x,y USE 学生 SCAN FOR 少数民族否 IF 性别=男 x=x+1 ELSE y=y+1 ENDIF ENDSCAN?少数民族男生有:+STR(x,2)+人?少数民族女生有:+STR(y,2)+人 USE RETURN,例9.23 对学生表统计少数民族男、女生人数。,2023/3/20,61,9.4.4 程序举例,SET TALK OFFCLEARDO WHILE.T.INPUT“请输入一个数据:”TO A IF A=0 AND A=20 EXIT ENDIFENDDOS=1FOR J=1 TO A S=S*JENDFOR?A,”的阶乘为”,SSET TALK ONRETURN,例9.25 从键盘上输入任意一个大于0而小于等于20的整数,求该数的阶乘。,2023/3/20,62,例:判断一个数是否是素数,INPUT“N=“to NFLAG=.T.K=INT(SQRT(N)J=2DO WHILE J=K AND FLAG IF N%J=0 FLAG=.F.ENDIFJ=J+1ENDDOIF FLAG?N,”是素数!”ELSE?N,”不是素数!”ENDIF,2023/3/20,63,例9.26:求21000中所有的素数,SET TALK OFFCLEARFOR N=2 TO 1000FLAG=.T.&假设该数为素数,FLAG标志为.T.K=INT(SQRT(N)J=2DO WHILE J=K AND FLAG IF N%J=0FLAG=.F.&2K之间的任何整数整除N,则N不是素数,FLAG=.F.ENDIFJ=J+1ENDDOIF FLAG?NENDIFENDFORSET TALK ONRETURN,2023/3/20,64,9.5 程序的模块化,结构化程序设计方法通常将一个复杂的规模较大的程序系统划分为若干个功能相关又相对独立的一个个较小的模块,再把这些模块划分为更小的用几十行语句实现的简单模块。将一个应用程序划分成一个个功能简单、单一的模块程序,不仅便于程序的开发,也利于程序的阅读和维护。,模块是一个相对独立的程序段,它可以被其他模块所调用,也可以去调用其他模块。通常,把被其他模块调用的模块称为子程序或叫过程。把调用其他模块而没有被其他模块调用的模块称为主程序。在Visual FoxPro中,模块可以是命令文件,也可以是过程。,2023/3/20,65,9.5.1 子程序、过程和自定义函数,1、子程序 子程序的调用格式:DO|WITH 功能:在命令文件中调用执行指定的子程序。其中,WITH 子句指定传递到程序或过程的参数,在中列出的参数可以是表达式、内存变量、常量、字段名或用户定义函数。可把参数放在圆括号中,各参数用逗号分隔。传递给一个程序的参数最多为24个。,(2)返回主程序语句,格式:RETURN TO MASTER|TO 功能:中止该子程序的执行,返回到调用它的程序,从调用该子程序的下一条语句继续执行。,2023/3/20,66,说明:若程序是被另一个程序调用的,遇到RETURN时,则自动返回到上级调用程序。选用TO MASTER子句时,则返回到最高一级调用程序,即在命令窗口下,调用的第一个主程序。在程序最后,如果没有RETURN命令,则程序运行完后,将自动默认执行一个RETURN命令,但过程文件除外。执行RETURN命令时,释放本程序所建立的局部变量,恢复用PRIVATE隐藏起来的内存变量。TO 表示将控制权交给指定的程序。RETURN 表示将表达式的值返回调用程序,用于自定义函数。,2023/3/20,67,例9.27 求1!+2!+3!+.+10!=?,*主程序,E9_27.PRGSET TALK OFFCLEARS=0 FOR I=1 TO 10T=1 DO SUBS=S+TENDFOR?1!+2!+3!+.+10!=,SSET TALK ON,*以下为子程序,文件名为SUB.PRGFOR J=1 TO I T=T*JENDFORRETURN,2023/3/20,68,2.自定义函数,(1)自定义函数的结构格式:FUNCTION PARAMETERS RETURN,用户自定义函数是除系统提供的函数外,用户自己定义的某些具有特殊功能的函数,它能增强用户编程的灵活性和通用性。,(3)子程序的嵌套调用,主程序可以调用子程序,子程序还可以调用另外的子程序,这就是子程序的嵌套调用。每个被调用程序的末尾或返回处都要加上RETURN命令。,2023/3/20,69,说明:FUNCTION 表示一个函数定义的开始,同时给函数命名。自定义函数不能作为一个独立的程序文件,而只能放在某程序中。不能用内部函数名来命名自定义函数。若自定义函数中包含自变量,程序的第一行必须是参数定义命令PARAMETERS。自定义函数除了可以作为一个函数被其它程序调用外,还可用DO 的形式来执行。自定义函数的数据类型取决于RETURN语句中的数据类型。如果省略,则返回.T.。,(2)自定义函数的调用,调用形式:(),自变量可以是任何合法的表达式,自变量的个数必须与自定义函数中PARAMETERS语句里的变量个数相等,自变量的数据类型也应符合自定义函数的要求。,2023/3/20,70,*MAIN.PRG 调用PR函数求1100内所有的素数SET TALK OFFCLEARFOR I=1 TO 100IF PR(I)?IENDIFENDFORRETURN,例9.28 定义一个判断n是否素数的函数,然后调用该函数求21000内的全部素数。,FUNCTION PR&判断n是否素数的函数PARAMETERS nflag=.T.k=INT(SQRT(n)j=2DO WHILE j=k.AND.flagIF n%j=0flag=.F.ENDIFj=j+1ENDDORETURN flag,调用函数,2023/3/20,71,2.过程及过程文件(1)过程过程是以PROCEDURE语句开头,以RETURN语句结束的一段程序。,形式:PROCEDURE PARAMETER RETURN TO MASTER|TO 过程名,说明:每个过程实际上是一个独立的子程序或一个用户定义函数。PROCEDURE 用于过程的第一条语句,它标识了每个过程的开始,同时定义了过程名。过程如果以RETURN 作为结束语句,那么该过程既可用DO 的形式执行,又可当做一个合法的自定义函数,可供随时调用。含有PARAMETER选项的过程称为“有参过程”,该项缺省的过程称为“无参过程”。,2023/3/20,72,(2)过程文件,将多个过程放在一个文件中,这个文件就叫过程文件。PROCEDURE RETURNPROCEDUBE RETURN,说明:过程文件的扩展名为.PRG它的建立方法与命令文件的建立方法相同。一个过程文件可包含的过程数不限,且过程的排列顺序任意。过程文件中的每个过程必须以PROCEDURE开头,其后是过程名。过程可以放在过程文件中,也可以放在调用它的程序末尾。,2023/3/20,73,(3)过程文件的打开与关闭,调用过程之前应当先打开该过程所在的过程文件,使用完毕则关闭过程文件。格式:SET PROCEDURE TO,功能:打开指定的过程文件说明:Visual FoxPro规定,一次只能打开一个过程文件。当用户使用本命令打开一个过程文件时,系统将自动关闭在此之前已经打开的过程文件。过程文件使用完后,要及时关闭,以释放它们占用的内存空间。关闭过程文件可以使用下列两条命令:SET PROCEDURE TOCLOSE PROCEDURE,(4)过程的调用格式:DO WITH 参数表功能;调用指定的过程。,2023/3/20,74,SET TALK OFFAREA=0REP=.T.DO WHILE REP&限制所输入的三边一定能够组成一个三角形CLEARINPUT 请输入第一边大小:TO XINPUT 请输入第二边大小:TO YINPUT 请输入第三边大小:TO ZIF X=0.OR.Y=0.OR.Z=0.OR.X+Y=Z.OR.Y+Z=X.OR.X+Z=Y?不能构成一个三角形,请重新输入!LOOPENDIFREP=.F.ENDDODO SUB WITH X,Y,Z,AREA?AREA=,AREARETURNPROCEDURE SUBPARAMETER A,B,C,SP=(A+B+C)/2S=SQRT(P*(P-A)*(P-B)*(P-C)RETURN,例9.31 使用带传递参数的过程调用方式计算三角形面积。,2023/3/20,75,9.5.2 内存变量的作用域,变量的作用域指的是变量在什么范围内有效或能够被访问的。在Visual FoxPro中,若以变量的作用域来分,内存变量可分为全局变量,局部变量和隐藏内存变量三类。,1.全局内存变量,在任何模块中都可以使用的变量。若欲清除这种变量,必须用RELEASE命令。,格式1:PUBLIC 格式2:PUBLIC ARRAY(,),(,),功能:定义全局内存变量或数组,并为它们赋默认初值逻辑假.F.。,2023/3/20,76,任何全局内存变量或数组必须先定义,后赋值。全局变量在程序结束时不释放,若欲清除这种变量,必须用RELEASE命令。当进入下一级子程序时,已在上级由PUBLIC说明过的与之同名的内存变量可以用PRIVATE命令暂时隐藏起来,作为本级程序的局部变量使用。待本级子程序结束返回上一级程序后,便释放它们作为本级程序的局部变量特性,恢复它们全局变量的特性和内容。在命令窗口中建立的所有内存变量或者数组自动定义为全局型。命令窗口中输入的变量没有声明的变量都是全局变量。,2.局部变量,局部内存变量只能在定义它的程序及其下级程序中使用,一旦定义它的程序运行结束,它便自动被清除,2023/3/20,77,*主程序main.prgr=100DO sub?pRETURN proce sub&过程SUBp=2*3.14*rRETURN,例9.32 分析下列程序的执行情况。,PUBLIC P,得到什么结果,为什么?,2023/3/20,78,3隐藏内存变量,格式:PRIVATE,命令功能:隐藏当前程序中指定的内存变量或数组。,说明:指出需要隐藏的内存变量。对PRIVATE中内存变量的修改并不影响上级程序中与之同名的内存变量的值。此命令只对本级程序及以下各级子程序有效,当返回到上级程序时,被PRIVATE隐藏的当前程序中的内存变量自动被删除。在它们被隐藏期间,程序就不能再调用这些被隐藏的上级内存变量,但实际上它们仍然存在,一旦含有PRIVATE内存变量的程序结束后,被隐藏起来的上级内存变量自动恢复以前的内容和状态。,2023/3/20,79,r=100p=10DO sub?pRETURNPROCEDURE subPRIVATE pp=2*3.14*rRETURN,例9.33 写出下列程序的输出结果。,PUBLIC P,2023/3

    注意事项

    本文(VFP结构化程序设计.ppt)为本站会员(夺命阿水)主动上传,课桌文档仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知课桌文档(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-1

    经营许可证:宁B2-20210002

    宁公网安备 64010402000986号

    课桌文档
    收起
    展开