资源预览内容
第1页 / 共77页
第2页 / 共77页
第3页 / 共77页
第4页 / 共77页
第5页 / 共77页
第6页 / 共77页
第7页 / 共77页
第8页 / 共77页
第9页 / 共77页
第10页 / 共77页
亲,该文档总共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=“,c结构化程序设计5Visual FoxPro程序设计分析问题,确定处理方案分析问题,确定处理方案确定操作步骤确定操作步骤编写源程序编写源程序上机调试上机调试整理资料整理资料2.程序设计的步骤如: 求二元一次方程AX2+BX+C=0的两个根。1.1.输入三个系数输入三个系数A A、B B、C C2.2.求求D=B*B-4*A*CD=B*B-4*A*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 WAIT结构化程序设计20Visual FoxPro程序设计n格式格式:ACCEPT TO n功能功能:从键盘上输入一个字符串常量给内存变量。从键盘上输入一个字符串常量给内存变量。n说明说明:q 是是提提示示语语,从从键键盘盘上上输输入入的的字字符符串串不不必必用用定定界符括起来界符括起来。q用来保存键盘上输入的字符串。用来保存键盘上输入的字符串。2.ACCEPT命令例如,例如,accept 请输入要入要查找的人名找的人名 TO name ?name结构化程序设计21Visual 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,CJ结构化程序设计22Visual 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后面的语句后面的语句NY结构化程序设计28Visual FoxPro程序设计简单条件查询示例 例例8-48-4 求一个数的绝对值。求一个数的绝对值。Input 请输入一个数请输入一个数 TO x?xIF x0 x=-xENDIF? 的绝对值是:的绝对值是: ,xX0x=-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 Update teacher set ttitlettitle=“=“副教授副教授” ” where where tnametname=“=“徐徐克克”结构化程序设计30Visual FoxPro程序设计n格式:格式:IF ELSE ENDIFn功功能能:若若的的值值为为真真,先先执执行行,然然后后再再执执行行ENDIF后后面面的的语语句句;若若其其值值为为假假,先先执执行行,然然后后执执行行ENDIF后后面面的语句。的语句。 2.带ELSE的条件语句 带ELSE的条件语句逻辑图逻辑表逻辑表达式达式语句序列语句序列1 1ENDIFENDIF后面的语句后面的语句NY语句序列语句序列2 2结构化程序设计31Visual FoxPro程序设计双分支条件查询示例 例例8-68-6 上例考虑找不到记录的的情况,可以这样处理:上例考虑找不到记录的的情况,可以这样处理:Use teacherLocate for tname=徐克徐克If found() display tname,ttitle replace ttitle with 副教授副教授 displayelse wait window 找不到徐克老师找不到徐克老师 at 10,10endifuse结构化程序设计32Visual 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 WINDOW结构化程序设计35Visual 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+1000S=1+2+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 skipEnddoUse结构化程序设计48Visual 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 ENDIFENDFOR结构化程序设计52Visual 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 ,偶偶数数个个数数:,ou结构化程序设计53Visual FoxPro程序设计n多多重重循循环环也也称称循循环环的的嵌嵌套套,所所谓谓嵌嵌套套就就是是一一个个循循环环程程序序的的循循环环体体内内又又包包含含着着另另一些循环。一些循环。 n嵌嵌套套要要求求:层层数数不不限限,但但内内层层循循环环必必须须完完全全包包含含在在外层循环之中,如右图:外层循环之中,如右图:5.多重循环DOWHILE DOWHILE DOWHILE ENDDO ENDDO ENDDO 结构化程序设计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 =I N T ( S Q R T ( i) flag=.T. & & & & 素素 数数 标标 志志 For j = 2 t o k IF M O D ( i , j) = 0 flag=.F. & & & & 标标 识识 i i不不 是是 素素 数数 EXIT & & & 退退 出出 D DO O W W H HI I L LE E 循循 环环 ENDIF Endfor IF flag=.T. ?i & & & & 输输 出出 素素 数数 ENDIFENDFOR结构化程序设计57Visual 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)RETURN结构化程序设计60Visual 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*2RETURN结构化程序设计62Visual 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 ENDPROC结构化程序设计66Visual 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 DO proc2 * *调用计算圆周长过程调用计算圆周长过程 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 WINDOWRETURN结构化程序设计69Visual 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?ENDPROC结构化程序设计77Visual FoxPro程序设计作业n实验六实验六n课后习题课后习题结构化程序设计
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号