结构化程序设计PPT课件

上传人:痛*** 文档编号:181899855 上传时间:2023-01-18 格式:PPT 页数:77 大小:558.51KB
返回 下载 相关 举报
结构化程序设计PPT课件_第1页
第1页 / 共77页
结构化程序设计PPT课件_第2页
第2页 / 共77页
结构化程序设计PPT课件_第3页
第3页 / 共77页
点击查看更多>>
资源描述
第8章 结构化程序设计主讲教师:张琳主讲教师:张琳制作时间:制作时间:2013.052Visual FoxPro程序设计结构化程序设计教学安排n教学目标教学目标q掌握程序的建立、修改和运行掌握程序的建立、修改和运行q掌握结构化程序设计的三种基本结构掌握结构化程序设计的三种基本结构q掌握过程和用户自定义函数的使用掌握过程和用户自定义函数的使用n重点分析重点分析q分支和循环结构、循环嵌套结构、过程的使用分支和循环结构、循环嵌套结构、过程的使用n学时安排学时安排q6学时(学时(理论理论)+6学时(学时(实践实践)3Visual FoxPro程序设计结构化程序设计本章内容n程序设计基础(程序设计基础(补充补充)n程序文件及其编辑环境程序文件及其编辑环境n程序中几种常用命令程序中几种常用命令n程序的基本控制结构程序的基本控制结构n过程和用户自定义函数过程和用户自定义函数作业作业4Visual FoxPro程序设计结构化程序设计程序设计基础(补充)n程序的概念程序的概念q程序是计算机完成一个预定任务而设计的一个指令序列。程序是计算机完成一个预定任务而设计的一个指令序列。n程序的特点程序的特点q目的性目的性 q分步性分步性q有限性有限性 q可操作性可操作性 q有序性有序性1.程序的概念和特点例如:求两个数的和。例如:求两个数的和。Input“a=“to a Input“b=“to b C=a+b?“a+b=“,c5Visual FoxPro程序设计结构化程序设计 分析问题,确定处理方案分析问题,确定处理方案 确定操作步骤确定操作步骤 编写源程序编写源程序 上机调试上机调试 整理资料整理资料2.程序设计的步骤如:求二元一次方程AX2+BX+C=0的两个根。1.1.输入三个系数输入三个系数A A、B B、C C2.2.求求D=BD=B*B-4B-4*A A*C C3.3.若若D0D0,输出两实根。,输出两实根。4.4.若若D=0D=0,输出相等的两实根。,输出相等的两实根。5.5.若若D0D0,输出两虚根。,输出两虚根。结束结束6Visual FoxPro程序设计结构化程序设计 评价程序质量标准:评价程序质量标准:清晰第一,效率第二清晰第一,效率第二。按规范书写程序(按规范书写程序(锯齿型结构锯齿型结构)。)。使用三种基本结构(使用三种基本结构(顺序、选择、循环顺序、选择、循环)。)。单入口、单出口、无死语句、无死循环。单入口、单出口、无死语句、无死循环。3.结构化程序设计的特点4.结构化程序设计的方法n自顶向下自顶向下n模块化模块化n逐步求精逐步求精7Visual FoxPro程序设计结构化程序设计8.1 程序文件及其编辑环境n程序文件介绍程序文件介绍n程序文件的建立和运行程序文件的建立和运行n程序调试程序调试nVFP编程特点编程特点本节内容8Visual FoxPro程序设计结构化程序设计8.1.1 程序文件的建立和运行VFP工作方式工作方式单步操作单步操作程序(多步)程序(多步)命令方式命令方式菜单方式菜单方式9Visual FoxPro程序设计结构化程序设计n程序文件程序文件qVisual FoxPro系统将命令文件称为程序文件或程序系统将命令文件称为程序文件或程序。q 命令文件或程序文件的扩展名为命令文件或程序文件的扩展名为.PRGn命令代码包括:命令代码包括:q命令命令qVFP可理解的操作可理解的操作1.程序文件介绍10Visual FoxPro程序设计结构化程序设计n命令格式:命令格式:MODIFY COMMAND n菜单方式:选择菜单方式:选择“新建新建/程序程序”n功能功能:打开文本编辑窗口:打开文本编辑窗口,用来建立或修改程序文件用来建立或修改程序文件。n说明:说明:qVisual FoxPro程序文件是一个扩展名为程序文件是一个扩展名为.PRG的文本文件。的文本文件。例例8-18-1 求当前日期和时间的长度,并显示。求当前日期和时间的长度,并显示。1.1.打开程序编辑器。打开程序编辑器。2.2.输入程序代码。输入程序代码。3.3.保存程序。保存程序。建立步骤2.程序文件的建立11Visual FoxPro程序设计结构化程序设计建立程序示例n例例8-1程序源代码如下:程序源代码如下:*-*程序名称:程序名称:E8_1.PRGE8_1.PRG*功能:显示当前日期和时间功能:显示当前日期和时间*-a=DATE()&求当前日期求当前日期b=TIME()&求当前时间求当前时间a1=LEN(DTOC(a)&求当前日期的长度求当前日期的长度b1=LEN(b)&求当前时间的长度求当前时间的长度?当前日期和时间:当前日期和时间:,a,b&显示日期和时间显示日期和时间?日期和时间的长度:日期和时间的长度:,a1,b1 *显示日期和时间的字符串长度显示日期和时间的字符串长度 12Visual FoxPro程序设计结构化程序设计n命令格式:命令格式:DO n菜单方式:选择菜单方式:选择“程序程序/运行运行”命令命令3.程序文件的执行注意:运行过程中,如果出现错误,可以重新进入编辑窗口进行编辑,然后再运行。上例运行结果:13Visual FoxPro程序设计结构化程序设计8.1.2 调试程序 调试就是为了发现程序中出现的问题及问题出现的位置并对调试就是为了发现程序中出现的问题及问题出现的位置并对其进行修正。其进行修正。1.打开“调试器”窗口n打开方式打开方式q选择选择“工具工具/调试器调试器”命令命令q键入键入debug命令命令n调试方法调试方法q设置断点设置断点q单步执行单步执行q监视变量或表达式信息的变化监视变量或表达式信息的变化14Visual FoxPro程序设计结构化程序设计2.“调试器”窗口介绍监视窗口:显示表达式及它们的当前值,并能够在表达式上设置断点。跟踪窗口:代码运行时,用户可以利用该窗口观察到这些代码。局部窗口:用于显示给定的程序、过程或方法程序中的所有变量、数组、对象以及对象成员。调试输出窗口:用来显示活动程序、过程或方法程序代码的输出结果。调用堆栈窗口:可以显示正在执行的过程、程序和方法程序。15Visual FoxPro程序设计结构化程序设计8.1.3 Visual FoxPro编程特点 1.变量不区分大小写n对于一般的变量,建议使用规则:对于一般的变量,建议使用规则:TypeName。建议的变量命名约定 16Visual FoxPro程序设计结构化程序设计n可以直接赋值,根据赋值决定变量类型。可以直接赋值,根据赋值决定变量类型。q如如nAge=25,表明,表明nAge为整型变量,初始值为为整型变量,初始值为25。q如如Flag=.F.表明表明lFlag为逻辑型变量,初始值是为逻辑型变量,初始值是.F.。2.变量不需预先声明3.命令分行n程序中每条命令都以回车键结尾,一行只能写一条命令。程序中每条命令都以回车键结尾,一行只能写一条命令。若需分行书写,可以使用分号若需分行书写,可以使用分号“;”表示续行。表示续行。4.添加注释n系统可以对整行注释和行中部分注释。整行注释使用系统可以对整行注释和行中部分注释。整行注释使用“*”,行中注释使用行中注释使用“&”。17Visual FoxPro程序设计结构化程序设计8.2 程序中几种常用命令n基本输入命令基本输入命令n格式输入输出命令格式输入输出命令n程序结尾命令程序结尾命令本节内容 程序基本框架程序基本框架输入数据开始数据处理输出数据结束输入语句输出语句18Visual FoxPro程序设计结构化程序设计8.2.1 基本输入命令 n格式:格式:WAIT TO WINDOW AT,TIMEOUTn功能:暂停程序的执行并显示提示信息,按任意键或单击功能:暂停程序的执行并显示提示信息,按任意键或单击鼠标后继续执行程序。鼠标后继续执行程序。n说明:说明:q使用使用TO 子句将把按下的键以字符形式保存到指定子句将把按下的键以字符形式保存到指定变量中,本命令只能接一个字符。若按下的是不可打印字符变量中,本命令只能接一个字符。若按下的是不可打印字符或是单击鼠标,则内存变量中存储空字符。或是单击鼠标,则内存变量中存储空字符。1.WAIT命令19Visual FoxPro程序设计结构化程序设计pWINDOW AT 指定显示的信息窗口在屏幕上的位指定显示的信息窗口在屏幕上的位置,若省略置,若省略AT 则信息窗口显示在屏幕的右上角。省则信息窗口显示在屏幕的右上角。省略该项,则在已显示内容之后显示信息。略该项,则在已显示内容之后显示信息。pTIMEOUT N 指定自动等待键盘或鼠标输入的秒数,该项必指定自动等待键盘或鼠标输入的秒数,该项必须放在须放在WAIT语句的最后。语句的最后。p缺省缺省wait后的提示信息,将显示后的提示信息,将显示“按任意键继续按任意键继续”。n说明说明:例如,例如,WAIT 继续查询吗继续查询吗?(Y/N)?TO JX WAIT 请选择请选择(1/2/3):“TO XZ WINDOW TIMEOUT 3 WAIT20Visual FoxPro程序设计结构化程序设计n格式格式:ACCEPT TO n功能功能:从键盘上输入一个字符串常量给内存变量。从键盘上输入一个字符串常量给内存变量。n说明说明:q 是提示语是提示语,从键盘上输入的字符串不必用定从键盘上输入的字符串不必用定界符括起来界符括起来。q用来保存键盘上输入的字符串。用来保存键盘上输入的字符串。2.ACCEPT命令例如,例如,accept 请输入要查找的人名请输入要查找的人名 TO name?name21Visual FoxPro程序设计结构化程序设计n格式格式:INPUT TO n功能功能:是提示语是提示语,可通过键盘输入数值型、可通过键盘输入数值型、字符型、日期型、逻辑型、货币型等数据给字符型、日期型、逻辑型、货币型等数据给。n说明说明:q若输入字符型数据,一定要加定界符(若输入字符型数据,一定要加定界符(与与ACCEPT不同不同)。)。3.INPUT命令 例如,例如,INPUT 请输入姓名:请输入姓名:TO XM INPUT 请输入出生日期:请输入出生日期:TO RQ INPUT 请输入入学成绩:请输入入学成绩:TO CJ INPUT 是团员吗?是团员吗?TO TY?XM,RQ,TY,CJ22Visual FoxPro程序设计结构化程序设计8.2.2 格式输入输出语句n格式格式:Say Picture n功能功能:在制定的行列位置按格式输出表达式的值。:在制定的行列位置按格式输出表达式的值。23Visual FoxPro程序设计结构化程序设计8.2.3 程序结尾命令n格式:格式:RUTURNn功能:能使程序执行结束,并返回到调用它的上级程序继功能:能使程序执行结束,并返回到调用它的上级程序继续执行,若无上级程序则返回到命令窗口。续执行,若无上级程序则返回到命令窗口。n说明:了解另两条程序结束命令说明:了解另两条程序结束命令:qCANCEL:它可以中止程序运行,并返回到命令窗口。:它可以中止程序运行,并返回到命令窗口。qQUIT:可以结束程序运行退出:可以结束程序运行退出Visual FoxPro系统。系统。24Visual FoxPro程序设计结构化程序设计8.3 程序的基本控制结构n顺序结构顺序结构n条件分支结构条件分支结构n循环结构循环结构本节内容 顺序结构 选择结构 循环结构25Visual FoxPro程序设计结构化程序设计8.3.1 顺序结构n顺序结构的程序运行时按照语句序列的先后顺序,一条接顺序结构的程序运行时按照语句序列的先后顺序,一条接一条地执行,它是程序中最基本的结构。一条地执行,它是程序中最基本的结构。例例8-28-2 计算圆的周长和面积。计算圆的周长和面积。Clearinput 请输入圆的半径:请输入圆的半径:TO r&输入半径输入半径c=2*3.14*r&计算圆的周长计算圆的周长s=3.14*r*r&计算圆的面积计算圆的面积?圆的周长:圆的周长:,c&输出周长输出周长?圆的面积:圆的面积:,s&输出面积输出面积26Visual FoxPro程序设计结构化程序设计 例例8-38-3 查找显示张宇飞的年龄。查找显示张宇飞的年龄。ClearUse student&打开学生表打开学生表Accept 请输入查询的姓名:请输入查询的姓名:to xm Locate for sname=xm&定位要找的人定位要找的人?xm+“的年龄是:的年龄是:”+str(sage,2)&输出年龄输出年龄Use&关闭表关闭表27Visual FoxPro程序设计结构化程序设计8.3.2 条件分支结构n格式:格式:IF ENDIFn功能:首先计算功能:首先计算的值,若其值为真,对的值,若其值为真,对IF与与ENDIF之间的语句顺序执行,之间的语句顺序执行,然后执行然后执行ENDIF后面的语句;后面的语句;若 其 值 为 假,直 接 执 行若 其 值 为 假,直 接 执 行ENDIF后面的语句。后面的语句。1.简单的条件语句 简单条件语句逻辑图逻辑表逻辑表达式达式语句序列语句序列ENDIFENDIF后面的语句后面的语句NY28Visual FoxPro程序设计结构化程序设计简单条件查询示例 例例8-48-4 求一个数的绝对值。求一个数的绝对值。Input 请输入一个数请输入一个数 TO x?xIF x0 x=-xENDIF?的绝对值是:的绝对值是:,xX0 x=-xNY(该程序流程图)(该程序流程图)输入输入x x输出输出x x执行分支条件29Visual FoxPro程序设计结构化程序设计简单条件查询示例 例例8-58-5 将徐克老师的职称改为副教授。将徐克老师的职称改为副教授。Use teacherLocate for tname=徐克徐克&定位记录定位记录 If found()&如果找到如果找到 display tname,ttitle&显示记录显示记录 replace ttitle with 副教授副教授&替换职称字段的内容替换职称字段的内容 displayendifuse思考:能不能用能不能用SQLSQL语句解决该问题?语句解决该问题?Update teacher set ttitleUpdate teacher set ttitle=“=“副教授副教授”where tnamewhere tname=“=“徐徐克克”30Visual FoxPro程序设计结构化程序设计n格式:格式:IF ELSE ENDIFn功能:若功能:若的值的值为真,先执行为真,先执行,然后再执行然后再执行ENDIF后面的语后面的语句;若其值为假,先执行句;若其值为假,先执行,然后执行,然后执行ENDIF后面的语句。后面的语句。2.带ELSE的条件语句 带ELSE的条件语句逻辑图逻辑表逻辑表达式达式语句序列语句序列1 1ENDIFENDIF后面的语句后面的语句NY语句序列语句序列2 231Visual FoxPro程序设计结构化程序设计双分支条件查询示例 例例8-68-6 上例考虑找不到记录的的情况,可以这样处理:上例考虑找不到记录的的情况,可以这样处理:Use teacherLocate for tname=徐克徐克If found()display tname,ttitle replace ttitle with 副教授副教授 displayelse wait window 找不到徐克老师找不到徐克老师 at 10,10endifuse32Visual FoxPro程序设计结构化程序设计n格式:格式:DO CASE CASE CASE CASE OTHERWISE ENDCASEn功能:执行多重分支操作。功能:执行多重分支操作。3.多分支语句33Visual FoxPro程序设计结构化程序设计 多分支语句逻辑图34Visual FoxPro程序设计结构化程序设计多分支条件示例 例例8-78-7 显示当前季节。显示当前季节。yue=MONTH(DATE()DO CASE CASE INLIST(yue,3,4,5)jj=春春 CASE INLIST(yue,6,7,8)jj=夏夏 CASE INLIST(yue,9,10,11)jj=秋秋 CASE INLIST(yue,12,1,2)jj=冬冬ENDCASEWAIT jj WINDOW35Visual FoxPro程序设计结构化程序设计8.3.3 循环结构程序n循环结构循环结构q循环结构是指程序在执行的过程中,程序中的某段代码被重循环结构是指程序在执行的过程中,程序中的某段代码被重复执行若干次。被重复执行的代码段,通常称之为循环体。复执行若干次。被重复执行的代码段,通常称之为循环体。nVFP提供的循环语句提供的循环语句q条件循环(条件循环(WHILE)q步长循环(步长循环(FOR)q扫描循环(扫描循环(SCAN)36Visual FoxPro程序设计结构化程序设计n格式:格式:DO WHILE ENDDOn功能:若功能:若的值为真,执行的值为真,执行,一,一旦遇到旦遇到ENDDO自动返回自动返回DO WHILE重新判断条件是否成重新判断条件是否成立,以决定是否继续循环。立,以决定是否继续循环。1.条件循环逻辑表达逻辑表达式式语句序列语句序列1 1NY执行执行ENDDOENDDO后面的语句后面的语句条件循环语句的执行流程37Visual FoxPro程序设计结构化程序设计n说明:说明:q注意设置正确的注意设置正确的循环条件循环条件。q 循环体内应有循环体内应有改变循环条件改变循环条件的语句。的语句。例例8-88-8 编写一个能够多次查找某学生记录的程序,查找字编写一个能够多次查找某学生记录的程序,查找字段为姓名。段为姓名。操作步骤1.1.设置循环变量设置循环变量yesyes,当它的值为,当它的值为“Y”Y”时,可以查询时,可以查询学生信息。学生信息。2.2.每查询一名学生信息,询问用户是否继续,如果每查询一名学生信息,询问用户是否继续,如果输入输入“Y”Y”给给yesyes变量继续查询,输入其它,停止查询。变量继续查询,输入其它,停止查询。38Visual FoxPro程序设计结构化程序设计yes=Y USE studentDO WHILE UPPER(yes)=Y clear accept“请输入查找姓名:请输入查找姓名:”to xm LOCATE FOR sname=xm IF FOUND()DISPLAY ELSE WAIT 查无此人查无此人 WINDOW ENDIF wait“继续查找吗?继续查找吗?”to yesENDDOUse条件循环示例源代码循环条件改变循环条件39Visual FoxPro程序设计结构化程序设计n格式:格式:FOR=TO STEP ENDFOR|NEXTn功能:语功能:语句执行时,通过比较循环变量值与终值来决定是否执句执行时,通过比较循环变量值与终值来决定是否执行行。步长为正数时,若循环变量值不大于终值就执。步长为正数时,若循环变量值不大于终值就执行循环体;步长为负数时,若循环变量不小于终值就执行循环行循环体;步长为负数时,若循环变量不小于终值就执行循环体。一旦遇到体。一旦遇到ENDFOR或或NEXT,循环变量值即加上步长,然,循环变量值即加上步长,然后返回到后返回到FOR语句重新与终值比较。语句重新与终值比较。STEP 一一项可以缺省,步长缺省值为项可以缺省,步长缺省值为1。2.步长循环40Visual FoxPro程序设计结构化程序设计步长型循环语句执行流程循环体循环体循环变量增加步长循环变量增加步长循环变量获得初值循环变量获得初值FT循环变量在终循环变量在终值内值内41Visual FoxPro程序设计结构化程序设计步长型循环示例 例例8-98-9 编写程序计算编写程序计算S=1+2+S=1+2+1000+1000之和。之和。clears=0for i=1 to 1000 s=s+inext?s=1+2+1000=:,s也可以这样写:clears=0i=1Do while i=A and upper(ch)=0 and ch=A and upper(ch)=0 and ch=9&判断数字判断数字 num=num+1 otherwise others=others+1 endcaseENDFOR?字符个数:字符个数:+STR(alpa)+空格个数:空格个数:+STR(kong)?数字个数:数字个数:+STR(num)+其他字符个数:其他字符个数:+STR(others)45Visual FoxPro程序设计结构化程序设计n格式:格式:SCAN FOR ENDSCANn功能:功能:SCAN 循环针对当前表进行循环,循环针对当前表进行循环,子句表示记录子句表示记录范围,缺省值为范围,缺省值为 ALL。语句执行时在。语句执行时在中依次寻找满足中依次寻找满足 FOR 条件的记录,并对找到的记录执行条件的记录,并对找到的记录执行。3.扫描循环46Visual FoxPro程序设计结构化程序设计Skip+1TEof()循环体循环体FScan 指针型循环语句的执行流程47Visual FoxPro程序设计结构化程序设计扫描型循环示例 例例8-118-11 显示年龄大于等于显示年龄大于等于1919的学生记录。的学生记录。CLEAR USE studentSCAN FOR sage=19 DISPLAY sname,sageENDSCANUSE也可以这样写:也可以这样写:clearUSE xsqkDo while not eof()if sage=19 DISPLAY sname,sage endif skipEnddoUse48Visual FoxPro程序设计结构化程序设计实验作业批讲用三种循环语句统计用三种循环语句统计xsqk表中入学分数超过表中入学分数超过570分的人数分的人数。1.条件循环语句CLearUSE xsqkRs=0Do while not eof()if 入学分数入学分数=570 rs=rs+1 enddif skip Enddo?“超过超过570人数共:人数共:”,rsUSE2.固定次数循环语句CLEAR USE xsqkjls=reccount()Rs=0For i=1 to jls if 入学分数入学分数=570 rs=rs+1 enddif skip Endfor?“超过超过570人数共:人数共:”,rsUSEgo iif 入学分数入学分数=570 rs=rs+1enddif 49Visual FoxPro程序设计结构化程序设计3.扫描型循环语句扫描型循环语句CLearUSE xsqkRs=0Scan for 入学分数入学分数=570 rs=rs+1Endscan?“超过超过570人数共:人数共:”,rsUSE三种循环语句比较:三种循环语句比较:1.条件循环语句是一种万能型循条件循环语句是一种万能型循环语句,适合解决所有遇到的循环语句,适合解决所有遇到的循环问题。环问题。2.固定次数的循环语句适用已知循固定次数的循环语句适用已知循环次数的循环。环次数的循环。3.扫描型循环专门针对数据表操作,扫描型循环专门针对数据表操作,如果遍历数据表记录时,使用它最如果遍历数据表记录时,使用它最方便。方便。50Visual FoxPro程序设计结构化程序设计n在各种循环语句的循环体中可以插入在各种循环语句的循环体中可以插入LOOP和和EXIT语句,前者语句,前者能使执行转向循环语句头部继续循环;后者则用来立即退出循能使执行转向循环语句头部继续循环;后者则用来立即退出循环,转去执行环,转去执行ENDDO、ENDFOR或或ENDSCAN后面的语句。后面的语句。n两个循环语句的转向功能示意图:两个循环语句的转向功能示意图:4.辅助循环语句DO WHILE Loop ENDDODO WHILE EXIT ENDDOLOOP语句的转向 EXIT语句的转向 51Visual FoxPro程序设计结构化程序设计LOOP语句转向示例 例例8-98-9 输入任意输入任意1010个整数,将所有正整数显示出来。个整数,将所有正整数显示出来。CLEARFOR i=1 TO 10 INPUT 输入一个整数:输入一个整数:TO a IF a0?a ENDIFENDFOR52Visual FoxPro程序设计结构化程序设计EXIT语句转向示例 例例8-108-10 输入任意个整数,分别统计偶数和奇数的个数,输入任意个整数,分别统计偶数和奇数的个数,输入输入0 0结束。结束。Store 0 to ou,jiDO WHILE.T.INPUT 输入一个整数:输入一个整数:TO a Do case case a=0 exit case mod(a,2)=0 ou=ou+1 otherwise ji=ji+1 Endcase ENDDO?“奇数个数奇数个数:”,ji ,偶数个数:偶数个数:,ou也可以这样写:也可以这样写:Store 0 to ou,jiDO WHILE.T.INPUT 输入一个整数:输入一个整数:TO a IF a=0 exit ENDIF IF INT(a/2)=a/2 ou=ou+1 ELSE ji=ji+1 ENDIFENDDO?“奇数个数奇数个数:”,ji ,偶数个数:偶数个数:,ou53Visual FoxPro程序设计结构化程序设计n多重循环也称循环的嵌多重循环也称循环的嵌套,所谓嵌套就是一个套,所谓嵌套就是一个循环程序的循环体内又循环程序的循环体内又包含着另一些循环。包含着另一些循环。n嵌套要求:层数不限,嵌套要求:层数不限,但内层循环必须完全包但内层循环必须完全包含在外层循环之中,如含在外层循环之中,如右图:右图:5.多重循环DO WHILEDO WHILE DO WHILEDO WHILE DO WHILEDO WHILE ENDDOENDDO ENDDOENDDO ENDDOENDDO 54Visual FoxPro程序设计结构化程序设计下面的循环嵌套是正确的。下面的循环嵌套是正确的。下面的循环嵌套交叉,是错误的。下面的循环嵌套交叉,是错误的。多重循环注意事项55Visual FoxPro程序设计结构化程序设计多重循环示例 例例8-118-11 用筛选法找出用筛选法找出2-502-50之间的所有素数。之间的所有素数。解题思路1.1.素数的概念:只能被素数的概念:只能被1 1和它本身整除的数。和它本身整除的数。2.2.判断一个数判断一个数x x是否为素数,只需判断该数不能整除是否为素数,只需判断该数不能整除2 2 到到SQRT(xSQRT(x)之间的任意一个整数即可。之间的任意一个整数即可。56Visual FoxPro程序设计结构化程序设计CLEARFOR i=2 TO 50 k=INT(SQRT(i)flag=.T.&素数标志素数标志 For j=2 to k IF MOD(i,j)=0 flag=.F.&标识标识i i不是素数不是素数 EXIT&退出退出DO WHILE DO WHILE 循环循环 ENDIF Endfor IF flag=.T.?i&输出素数输出素数 ENDIFENDFOR57Visual FoxPro程序设计结构化程序设计8.4 过程和用户自定义函数n主程序和子程序主程序和子程序n过程过程n自定义函数自定义函数n变量的作用域变量的作用域本节内容58Visual FoxPro程序设计结构化程序设计n调用子程序语句:调用子程序语句:DO n返回语句:返回语句:RETURN 返回语句说明:返回语句说明:qTO MASTER 使返回时直接返回到最外层主程序,使返回时直接返回到最外层主程序,TO 强制返回到指定的程序文件。强制返回到指定的程序文件。qRETURN返回到调用它的主程序。返回到调用它的主程序。1.子程序的调用和返回8.4.1 主程序和子程序对于两个具有调用关系的程序文件,常称调用程序为主程对于两个具有调用关系的程序文件,常称调用程序为主程序,被调用程序为子程序。序,被调用程序为子程序。59Visual FoxPro程序设计结构化程序设计子程序调用示例 例例8-128-12 计算圆面积的主程序为计算圆面积的主程序为e8_12.prge8_12.prg,子程序为,子程序为sub.prgsub.prg。*主程序:主程序:CLEAR DO WHILE.T.WAIT“要计算圆的面积要计算圆的面积(Y/N)?”;TO cAnswer IF UPPER(cAnswer)=“Y”DO Sub.prg ELSE EXIT ENDIFENDDO*子程序子程序sub.prgsub.prgCLEARinput 请输入圆的半径:请输入圆的半径:to rs=3.14*r2?圆的面积为:圆的面积为:+STR(s,10,2)RETURN60Visual FoxPro程序设计结构化程序设计n调用参数命令:调用参数命令:DO WITH n子程序接受参数命令:子程序接受参数命令:PARAMETERS n说明:说明:q调用命令的调用命令的中的参数可以是表达式,但若为内存变中的参数可以是表达式,但若为内存变量必须具有初值。量必须具有初值。q子程序接受参数命令中的参数表只能变量名。子程序接受参数命令中的参数表只能变量名。2.带参数子程序的调用61Visual FoxPro程序设计结构化程序设计带参数子程序调用示例 例例8-138-13 设计一个计算圆的面积的子程序设计一个计算圆的面积的子程序sub.prg,要求在,要求在主程序中带参数调用。主程序中带参数调用。*主程序:主程序:CLEARymj=0 *初始化用于接收圆面积的变量初始化用于接收圆面积的变量input 请输入圆的半径:请输入圆的半径:to bj DO sub WITH bj,ymj*带参数调用子程序带参数调用子程序?圆的面积为:圆的面积为:+STR(ymj,10,2)RETURN*子程序子程序sub.prgPARAMETERS r,s*参数接收语句参数接收语句s=3.14*r*2RETURN62Visual FoxPro程序设计结构化程序设计8.4.2 过程n过程也是一个具有一定功能的程序段,是子程序的另一种过程也是一个具有一定功能的程序段,是子程序的另一种形式。形式。n与子程序的区别:与子程序的区别:q子程序是一个独立的子程序是一个独立的PRG文件。文件。q过程可以和主程序放在一起,也可以和其他过程放在一个过过程可以和主程序放在一起,也可以和其他过程放在一个过程文件中,过程文件也是一个程文件中,过程文件也是一个PRG文件。文件。63Visual FoxPro程序设计结构化程序设计1.过程的建立n格式:格式:PROCEDURE PARAMETERS RETURNn功能:定义一个过程。功能:定义一个过程。n说明:过程作为程序的一部分时往往放在程序的最后。说明:过程作为程序的一部分时往往放在程序的最后。调用过程的方法和调用子程序类似。64Visual FoxPro程序设计结构化程序设计过程调用示例 例例8-148-14 编制过程,去除原始字符串中的非数字字符,返编制过程,去除原始字符串中的非数字字符,返回只含数字的新串。回只含数字的新串。CLEARcTest=(123)45-6789 0cShow=do NumbersOnly with;cTest,cShow?cShowPROCEDURE NumbersOnly PARAMETERS cMixedVal,cNumOnly FOR nCnt=1 TO LEN(cMixedVal)cCharacter=SUBSTR(cMixedVal,nCnt,1)IF ISDIGIT(cCharacter)cNumOnly=cNumOnly+cCharacter ENDIF ENDFORENDPROC 和子程序不同,过程和调用程序放在一起。65Visual FoxPro程序设计结构化程序设计2.过程文件n过程文件:多个过程或自定义函数可以放在一起,组成过程过程文件:多个过程或自定义函数可以放在一起,组成过程文件,扩展名为文件,扩展名为.PRG,其基本形式如下:,其基本形式如下:PROCEDURE ENDPROCPROCEDURE ENDPROC66Visual FoxPro程序设计结构化程序设计n过程文件的打开命令:过程文件的打开命令:SET PROCEDURE TO n过程的调用:过程的调用:DO IN n过程文件的关闭:过程文件的关闭:SET PROCEDURE TO 例例8-158-15 主程序可用来计算圆的面积和周长,其中求圆面主程序可用来计算圆的面积和周长,其中求圆面积和周长由过程积和周长由过程proc1和和proc2实现,过程定义在过程文件实现,过程定义在过程文件proc.prg中。中。67Visual FoxPro程序设计结构化程序设计过程文件示例主程序:主程序:SET PROCEDURE TO proc*打开过程文件打开过程文件nSelect=0DO WHILE.T.CLEAR?“请选择:请选择:”?“1计算圆面积计算圆面积”?“2计算圆周长计算圆周长”?“0退出退出”Input“请您选择的功能:请您选择的功能:”to nSelect DO CASE CASE nSelect=1 DO proc1 *调用计算圆面积过程调用计算圆面积过程 CASE nSelect=2 D O p r o c 2 *调用计算圆周长过程调用计算圆周长过程 CASE nSelect=0 EXIT ENDCASEENDDOSET PROCEDURE TO *关闭过程文件关闭过程文件68Visual FoxPro程序设计结构化程序设计过程文件源代码过程文件过程文件proc.prg:*计算圆面积过程计算圆面积过程proc1proc1PROCEDURE proc1CLEAR?“请输入圆的半径:请输入圆的半径:”to bj s=3.14*bj*2?“圆的面积为:圆的面积为:”+STR(s,10,2)WAIT WINDOWRETURN*计算圆周长过程计算圆周长过程proc2proc2PROCEDURE proc2CLEAR?“请输入圆的半径:请输入圆的半径:”to bjs=2*3.14*bj?“圆的周长为:圆的周长为:”+STR(s,10,2)WAIT WINDOWRETURN69Visual FoxPro程序设计结构化程序设计n格式:格式:FUNCTION PARAMETERS RETURN n功能:定义一个用户自定义函数。功能:定义一个用户自定义函数。n说明:说明:q如果使用接收参数语句如果使用接收参数语句PARAMETERS,必须放在,必须放在FUNCTION后第一个语句。后第一个语句。qRETURN用来返回函数值,若缺省,返回用来返回函数值,若缺省,返回.T.。8.4.3 自定义函数70Visual FoxPro程序设计结构化程序设计自定义函数示例调用函数的主程序:调用函数的主程序:CLEARcTest=(123)45-6789 0&原始字符串原始字符串?转换前的串:转换前的串:,ctest?转换前的串:转换前的串:,NumbersOnly(cTest)&调用函数调用函数 例例8-168-16 编制函数,去除原始字符串中的非数字字符,返编制函数,去除原始字符串中的非数字字符,返回只含数字的新串。回只含数字的新串。71Visual FoxPro程序设计结构化程序设计自定义函数源代码FUNCTION NumbersOnly(cMixedVal)cNumOnly=&初始化新字符串初始化新字符串FOR nCnt=1 TO LEN(cMixedVal)&扫描整个字符串扫描整个字符串 cCharacter=SUBSTR(cMixedVal,nCnt,1)&获取测试字符获取测试字符 IF ISDIGIT(cCharacter)&判断字符是否为数字判断字符是否为数字 cNumOnly=cNumOnly+cCharacter&复制数字字符复制数字字符 ENDIFENDFORRETURN cNumOnly&返回只含数字的新串返回只含数字的新串 ENDFUNC 72Visual FoxPro程序设计结构化程序设计8.4.4 变量作用域n格式:格式:PUBLIC n功能:将功能:将指定的变量设置为公共变量,并将指定的变量设置为公共变量,并将这些变量的初值赋以这些变量的初值赋以.F.。n说明:程序终止执行时公共变量不会自动清除,只能用说明:程序终止执行时公共变量不会自动清除,只能用 RELEASE 命令来清除。命令来清除。变量的作用域指的是变量在什么范围内是有效或能被访问的变量的作用域指的是变量在什么范围内是有效或能被访问的。1.全程变量 在任何模块中都可使用的变量称为全程变量,全程变量必在任何模块中都可使用的变量称为全程变量,全程变量必须先定义后使用。须先定义后使用。73Visual FoxPro程序设计结构化程序设计n格式:格式:LOCAL n功能:将功能:将指定的变量设置为局部变量。指定的变量设置为局部变量。n说明:说明:LOCAL 与与 LOCATE 前前4个字符字母相同,故不可个字符字母相同,故不可使用缩写。使用缩写。2.局部变量 局部变量只在当前定义的程序中有效,一旦该程序执行完局部变量只在当前定义的程序中有效,一旦该程序执行完成将自动释放局部变量。成将自动释放局部变量。3.私有变量 在程序中未加任何说明而直接定义使用的内存变量。它的在程序中未加任何说明而直接定义使用的内存变量。它的作用范围在本程序及下属的子程序内有效。作用范围在本程序及下属的子程序内有效。74Visual FoxPro程序设计结构化程序设计3.私有变量n格式:格式:PRIVATE ALLLIKE|EXCEPT n功能:定义一个过程。功能:定义一个过程。n说明:声明私有变量并隐藏上级程序的同名变量,直到声说明:声明私有变量并隐藏上级程序的同名变量,直到声明它的程序、过程或自定义函数执行结束后,才恢复使用明它的程序、过程或自定义函数执行结束后,才恢复使用先前隐藏的变量。先前隐藏的变量。当私有变量和上层模块的变量同名时,为区分二者是不同当私有变量和上层模块的变量同名时,为区分二者是不同的变量,需要采用暂时屏蔽上级模块变量的方法,使得子的变量,需要采用暂时屏蔽上级模块变量的方法,使得子程序中的变量与上层程序中的变量同名而不同值。程序中的变量与上层程序中的变量同名而不同值。75Visual FoxPro程序设计结构化程序设计变量作用域示例 例例8-178-17 变量状态举例。变量状态举例。CLEAR MEMORY&清除内存变量清除内存变量CLEARPUBLIC Pn1,Pn3&全局变量全局变量DISPLAY MEMORY LIKE Pn?DO Proc1*过程过程1 1PROCEDURE Proc1 Pn2=Visual FoxPro&私有变量私有变量 DISPLAY MEMORY LIKE Pn?76Visual FoxPro程序设计结构化程序设计变量作用域示例 DO Proc2 DISPLAY MEMORY LIKE Pn?ENDPROC*过程过程2PROCEDURE Proc2 PRIVATE Pn1&隐蔽说明隐蔽说明 LOCAL Pn4&局部变量局部变量 Pn3=is ten years Pn2=snnay Pn4=abc DISPLAY MEMORY LIKE Pn?ENDPROC77Visual FoxPro程序设计结构化程序设计作业n实验六实验六n课后习题课后习题
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 成人自考


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!