820 likes | 1k Views
第 6 章 程序设计基础. 6.1 程序文件的建立与运行 6.2 结构化程序设计初步 6.3 顺序结构程序设计 6.4 程序的选择结构 6.5 循环结构 6.6 多模块程序设计 6.7 参数传递与变量作用域. [ 教学目的 ] 了解面向过程的程序设计方法,结构化程序设计的三种基本结构,子程序和过程的使用方法。 [ 基本要求 ] 通过对三种结构的学习,可以进行简单的程序设计 [ 教学要点 ] 循环嵌套,模块调用,变量的作用域。. 6.1 程序文件的建立与运行. 程序: 为完成某一特定任务而组织编写的一系列命令和语句。.
E N D
6.1 程序文件的建立与运行 6.2 结构化程序设计初步 6.3 顺序结构程序设计 6.4 程序的选择结构 6.5 循环结构 6.6 多模块程序设计 6.7 参数传递与变量作用域
[教学目的] 了解面向过程的程序设计方法,结构化程序设计的三种基本结构,子程序和过程的使用方法。 • [基本要求] 通过对三种结构的学习,可以进行简单的程序设计 • [教学要点] 循环嵌套,模块调用,变量的作用域。
6.1 程序文件的建立与运行 程序: 为完成某一特定任务而组织编写的一系列命令和语句。 程序文件: 程序以文件的形式存放于磁盘上,这个文件就称为程序文件。
6.1.2 VFP程序文件的建立与执行 1.程序文件的建立(默认扩展名为.PRG) (1)命令方式: MODIFY COMMAND <程序名|? > 或MODIFY file [<文件名>|?] ① 第一条命令中,文件的默认扩展名为.PRG,可省略,第二条命令中,建立程序文件时文件扩展名.PRG必须同时输入,不能省略。 ② 在文件名前可直接指明该文件保存的路径。 ③ 用^END(即CTRL+END键,以下类似)或^W将编辑结果存盘,或执行“文件”菜单中的“保存”命令存盘;用^Q或ESC键放弃存盘,并退出编辑程序。
(2)菜单方式: “文件” ⇛“新建” ⇛弹出“新建”的对话框 ⇛ “文件类型”框里选择“程序” ⇛单击按钮“新建文件” ⇛弹出文本编辑窗口,在这个窗口中就可以输入命令和语句了,最后,选择系统菜单“文件”里的菜单项“保存”,按照系统提示将输入窗口中的程序保存起来。
(3) 在“项目管理器”对话框中选择“代码”选项卡中的“程序项”,再单击“新建”按钮。 (4)利用其它编辑软件建立和编辑命令文件 由于FoxPro的命令文件属于文本文件,因此可在Windows操作系统下利用WORD、WPS等编辑软件或DOS操作系统下利用EDIT等编辑软件来建立和编辑命令文件。
示例:建立应用程序L1.PRG ,功能为:打开表文件“学生.dbf”,根据键入的学生姓名在该表文件中查找并输出该学生的基本情况,关闭文件,返回。 命令窗口:MODI COMM VFP\L1.PRG 编辑窗口:*L1.PRG SET TALK OFF USE VFP\学生.DBF ACCEPT “请输入学生姓名:”TO XM LOCATE FOR 姓名=XM ? 学号,姓名,性别,班级 USE SET TALK OFF RETURN
2.程序文件的修改 (1)利用系统菜单,操作与建立程序文件相同。 (2)在命令方式下,其操作与建立程序文件相同,但必须带文件名或“?”。 (3)若程序包含在一个项目中,可以在“项目管理器”对话框中选定它,再单击“修改”命令按钮。
3.程序文件的执行 方法一、在命令方式下执行命令文件 DO〈程序文件名〉[WITH <参数表>] 方法二、使用系统菜单执行命令文件 “程序”“运行(D)…”,然后在弹出的“运行”对话框中,选择“程序列表”中要执行的程序文件名,再单击“运行”按钮,程序就可以执行。 方法三、若程序包含在一个项目中,则可以在“项目管理器”对话框中选定它,再单击“运行”按钮。
4.程序书写规则 (1)命令分行 程序中每行命令都以回车键结束,一行只能写一条命令。若命令需分行书写,应在一行终了时健入继行符“;”,然后按回车键,继续在下一行输入。 (2)命令注释 程序中可插入注释,以提高程序的可读性。 注释行以符号“*”开头,它是一条非执行命令,仅在程序中显示。命令行的后面也可添加注释,这种注释以符号“&&”开头。 例如,* 本程序用于修改表的指定纪录 SET DATA USA && 日期格式置为 MM-DD-YY
6.1.3、常使用的命令。 命令⒈ set talk 命令 格式:set talk on/off 功能:该命令控制其它命令执行的结果输出/不输出到屏幕上 命令⒉ set print 命令 格式:set print off/on 功能:该命令控制输出结果不输出/输出到打印机打印输出
命令⒊文本输出命令 格式1:text 〈文本信息〉 endtext 功能:此命令把〈文本信息〉内容显示出来,允许文本信息出现多行,它只能在程序工作方式中使用,而且TEXT与ENDTEXT必须成对出现。 格式2: 功能:能将一行文本信息的内容按书写形式的原样显示出来。\与\\的区别在于前者是在下一行的第一列开始输出,而后者则不换行,在当前光标位置处开始显示。
命令4 注释语句 格式一:note 〈注释字符〉 格式二: * 〈注释字符〉 格式三:&& 〈注释〉 功能:格式一、格式二一般对程序作注释。格式三注释某命令语句,只用在被注释的命令行之后。 命令5:清屏命令 格式:clear 功能:清屏,常将此命令用于程序开始,保持屏幕整洁.
命令6:返回命令 格式: return [to master] 功能:⑴return 在一个主程序中用于结束此程序的运行并返回命令窗口;在子程序中用于结束子程序并返回到调用此过程中的下一语句 ⑵return to master将过程的调用直接返回主程序。 ⒎ 中止程序执行命令 格式:CANCEL 功能:中止FoxPro程序的执行。 说明:当FoxPro程序运行到该语句时,将不再执行其后面的所有语句,而直接退出程序,返回到命令窗口,同时关闭所有已打开的文件。
命令8. 非格式化交互式命令 ⑴单字符接收命令(即等待命令) 格式:WAIT[<提示文本>] [TO<内存变量>][WINDOW[AT<行>,<列>] [NOWAIT]] [CLEAR|NOCLEAR] [TIMEOUT<数值表达式>] 功能:暂停程序的执行,等待用户输入一个字符或按任一键。也可只用于输出一条提示信息。 说明
① WAIT命令使用VFP程序暂停运行,等用户按任意键(或回车)后,程序继续执行。 ② <提示文本>用于输出一条提示信息。如缺省<提示文本>,则执行命令后屏幕显示“按任意键继续…”,提示用户按任意键,系统将继续运行。 ③ <内存变量>用于保存从键盘键入的字符,如果不选TO子句,则输入的数据不予保存。 ④ Windows子句可使主屏幕上出现一个WAIT提示窗口,用于输出提示信息,该窗口的位置由AT选项的<行>,<列> 来指定,若缺省AT选项,<提示信息>在主屏幕右上角显示。 ⑤ 若使用NOWAIT选项,系统将不等用户按键,立即往下执行。
⑵字符串接收命令 格式:ACCEPT [<提示信息>] TO〈内存变量> 功能:暂停程序的执行,等待用户输入字符串数据。 ⑶任意类型数据接收命令 格式:INPUT [<提示信息>] TO <内存变量> 功能:暂停程序的执行,等待用户输入数据。
① 系统执行该语句时,暂停正在运行着的程序,并显示提示信息,然后等待用户从键盘输入数据,它允许用户输入多个字符直至输入回车为止。并将输入的信息以字符串的形式存储在内存变量中,故常用于输入字符型的数据。 ② WAIT和ACCEPT的相同点是:它们接收的均是字符型数据,故两者所接收的字符型数据都无需用单、双引号或方括号括起来。 ③ WAIT和ACCEPT的最大区别是:WAIT只接收单个字符,并且不需要输入回车键,而ACCEPT可接收多个字符,且必须用回车键来结束字符串的输入。
说明: ① WAIT和ACCEPT只能满足字符型变量的赋值,而INPUT能满足字符、数值、日期、逻辑型变量的赋值,可用于输入各种类型的数据。 使用INPUT语句若给变量赋的值是字符型,需加定界符,否则系统会把它当成一个变量名处理;若给变量赋的值是逻辑型常量,需用定界符(.)括住;输入日期型常量两端须加花括号{};输入数值型常量,则直接输入整数或实数,也可以输入一个表达式。 ② 提示信息的内容同WAIT和ACCEPT语句。
9.格式化输入输出命令 ⑴格式化输出语句:@…SAY 格式:@〈行,列〉SAY〈表达式〉 功能:在指定的行和列输出表达式的值。 说明: ①〈行,列〉确定光标的位置。把显示屏看作是由行和列组成的二维坐标系,其坐标系为25行*80列,规定行值取值范围是整数0~24,列值取值范围是整数0~79。那么,屏幕最左上角字符的坐标就为(0,0),最右下角字符的坐标就为(24,79)。 例如:@5,30 SAY “ABCD” 执行结果将在屏幕的第5行第30列位置开始显示字符串ABCD
⑵格式化输入语句: 格式:@<行,列>[SAY<表达式> GET<变量> READ 功能:定位显示GET变量的值;READ命令激活当前未被激活的所有GET变量,用户就可对这些GET变量进行编辑。
说明: ① @…GET… READ给变量赋值的方式为全屏幕操作。开始执行时光标停在GET变量显示区的第一个位置上,利用方向键可在显示区内上下左右移动光标。当光标在最后一个GET变量的显示位置时,按下回车键则数据存入变量,且全屏幕编辑结束。接着就执行READ的后继命令。 ② 若缺省SAY子句,GET变量值从由<行,列>指定的坐标开始显示;含有SAY子句时先显示其表达式值,然后隔一个字符接着显示GET变量的值。 ④ GET变量必须具有初值,除变量的类型遵照初值外,其长度也将由初值决定。故使用前必须先定义。
6.2 结构化程序设计初步 1.算法及流程图 (1)算法的概念:根据问题要求拟定用计算机求解的策略和步骤,并把它用某种工具描述出来,称之为“算法设计”。 (2)算法的流程图描述 :用一些简单的几何框图表示各种类型的操作,然后用带箭头的有向流线将各个框图连结起来,以表示其执行的先后顺序,这种框图称为“流程图”。
2.结构化程序设计方法 结构化程序指整个程序由顺序、选择、循环三种基本结构组成。 (1)自顶向下逐步求精:从全局出发,通盘考虑,把问题的整体分解成若干个相对独立的小问题,然后再把小问题分解为若干个相对独立的更小的问题,直到能表示成程序为止。 (2)模块化设计:由一个大问题分解成若干个相对独立的小问题,每个小问题实现一定的功能,称为功能模块。对大的功能模块,采用自顶向下逐步求精的方法划分为更小的功能模块。各功能模块的程序可单独编写和调试,这样便于多人协助完成较大型的程序设计。
3. 程序设计的步骤 (1)分析问题 主要是分析待编程序要解决什么问题,需要输入什么数据,需要做哪些处理,需要输出什么数据等等。 (2)画流程图 用流程图来描述处理问题的过程。 (3)编写程序 根据程序流程图,将所需要的VFP的命令、语句组织在一起。 (4)调试 通过运行程序对程序进行正确性检验和测试。
4.流程图介绍 (1)绘制流程图时所用到的基本符号 符 号 名 称 功 能 起止框 描述流程图的开始和结束 处理框 代表一个处理过程,其特征是一个入口,一个出口 判断框 为选出几条路线中的一条而进行的判断(条件转移操作) 输入输出框 表示输入输出 ↓→ 流程线 表示信息流动的通道 →① ①→ 连接符 一个流程图在一页纸上画不下时,用该符号连接
说明: ① 处理框中含有一个语句功能或一段程序,一般用自然语言或数学表达式描述,尽量简明扼要。 ② 流向线要清晰明确,不能相互交叉,不能出现死循环流向线。 ③ 无论框图描述的处理过程如何,所画框图总是只有一个入口,最后汇集到一个出口。
例:计算1+2+3+……+100。 SET TALK OFF S=0 FOR N=1 TO 100 S=S+N ENDF ?" 1+2+3+……+100=",S RETURN 算法流程图
2)举例:用框图描述求一元二次方程ax2+bx+c=0的实根的过程2)举例:用框图描述求一元二次方程ax2+bx+c=0的实根的过程 分析: 首先输入a,b,c的值,其次,计算判断求一元二次方程实根的条件b*b-4*a*c的值,最后判断b*b-4*a*c的值是否满足实根存在的条件,若不满足,则输出方程无实根,若满足则方程有二个实根,输出两实根x1,x2: x1=(-b+sqrt(b*b-4*a*c))/(2*a) x2=(-b-sqrt(b*b-4*a*c))/(2*a)
6.3 顺序结构程序设计 1.顺序结构 程序运行时,按照命令(语句)的排列顺序逐条执行,这种结构就称为顺序结构。 2.简单的输入输出语句 (1)数据输入语句:INPUT 1)格式: INPUT [<提示信息>] TO <内存变量名> 2)功能:暂停程序运行,显示提示信息,等待用户从键盘上输入数据,用户可以输入任意合法的表达式。 (2)单字符输入语句: WAIT 1)格式:WAIT [<提示信息>] [TO <内存变量名>] [WINDOWS] 2)功能:暂停程序运行,显示提示信息,等待用户键入任何一个键,然后继续执行程序。 (3)简单输出语句:?、?? 1)格式:?/?? <表达式表>
2)功能:依次计算并显示表达式表中各表达式的值,所显示的值与值之间间隔一个空格。 (4) 信息显示函数: MESSAGEBOX( ) 1)格式: MESSAGEBOX(<提示信息>[,<按钮类型>][,<对话框标题>]) 2)功能:暂停程序运行,在对话框中显示提示信息,等待用户单击按钮,并返回一个整数表示单击的是哪个按钮。 <按钮类型>由三个数码相加产生,即: <按钮类型码>+<图标类型码>+<默认按钮码>
3.环境设置语句 环境设置语句:SET 设置系统环境和状态的语句为 SET语 句,SET语句实际上是一个语句组,分为两种格式: 格式Ⅰ SET <参数> ON/OFF 格式Ⅱ SET <参数> TO <参数值> 常用的几个SET语句: SET DEFAULT TO <路径> 功能:设置默认的工作目录。 (2) SET PATH TO <路径> 功能:设置搜索路径。 (3) SET TALK ON/OFF 功能:控制是否使某些命令产生屏幕显示 (4) SET PRINT ON/OFF 功能:控制屏幕上的输出内容是否同时送打印机打印。
4.注释 (1)注释语句 1)格式 */NOTE <注释内容> 2)功能 注释语句是非执行语句,它们不对计算机产生任何操作,仅仅对程序起注解作用。 (2)行末注释 行末注释用在语句(命令)末尾,以“&&”起头,后跟本行的注释内容。
c A B 6.3.1 顺序结构程序设计 1.概念 顺序结构程序:自始至终严格按照程序中语句的先后顺序逐条执行,是最基本、最普遍的结构形式。 顺序结构的流程图: 顺序结构
例:编程,根据输入的半径值,计算出相应的圆的周长。例:编程,根据输入的半径值,计算出相应的圆的周长。 SET TALK OFF CLEAR INPUT “请输入圆的半径:”TO R L=2*3.1416*R @5,5 SAY “圆的周长是:”+STR(L,6,3) SET TALK ON
语 句 行 N Y 语句行序列 ENDIF后面的语句 条件表达式 6.4 程序的选择结构 定义:分支结构:就是按照一定的条件由判断语句或选择语句构成的双重或多重走向的程序。 简单分支结构 的流程图 1)简单分支格式: IF <条件表达式> <语句行序列> ENDIF 注:IF和ENDIF必须成对出现
说明: (1)IF ...ENDIF配对组成一条语句,缺一不可。 (2)IF ...ENDIF语句只能在程序中使用,不能使用于交互式状态。 (3)该语句的执行过程是:首先对逻辑表达式进行判断,然后根据逻辑表达式的取值确定是否执行<命令序列>。当<逻辑表达式>的值为“真”时,顺序执行IF与ENDIF之间的语句序列,然后再执行ENDIF后的语句;当逻辑表达式的值为“假”时,不执行IF与ENDIF之间的语句而直接执行ENDIF后面的语句。 逻辑表达式也称为条件,故以后叙述中逻辑表达式也简称为条件。
例:从键盘接收两个数,在屏幕输出大数。 INPUT "X=" TO X INPUT "Y=" TO Y IF X<Y &&如果X<Y,把X与Y交换 T=X &&引入第三个变量T,进行三角交换 X=Y Y=T ENDIF ?X RETURN
条件成立? 语句序列1 语句序列2 Endif后的语句 双边分支的流程图 2) 双边分支格式: Y IF <条件表达式> <语句行序列1> ELSE <语句行序列2> ENDIF N 说明:该语句执行过程是:首先判断逻辑表达式的值是否为真,若为真,执行 <语句序列1>,而不执行 <语句序列2>,并从ENDIF后面的语句开始继续执行;若为假,则不执行<语句序列1>,而执行<语句序列2>,然后再执行ENDIF后面的语句。
例:编一个程序,输入一个教工号,在STAFF表中查找,若查到就给该教师增加100元基本工资,并在信息窗口提示相应的信息;若查不到则提示“查无此人!”。例:编一个程序,输入一个教工号,在STAFF表中查找,若查到就给该教师增加100元基本工资,并在信息窗口提示相应的信息;若查不到则提示“查无此人!”。 • OPEN DATABASE 教学管理 &&打开“教学管理”库作为当前库 • USE STAFF &&打开当前库中STAFF表 • CLEAR • INPUT "请输入教工号:" TO JGH • LOCATE ALL FOR 教工号=JGH • IF FOUND() • REPLACE 基本工资 WITH 基本工资+100 • =MESSAGEBOX("该教师的基本工资已增加100元”) • ELSE • =MESSAGEBOX("查无此人!") • ENDIF • CLOSE DATABASE &&关闭当前库 • RETURN
条件1 条件n 条件2 语句序列n 语句序列2 语句序列1 语句序列n+1 ENDCASE的下一语句 3)多分支结构 多分支程序用于解决要根据多种条件,从各种情况中选择一种进行处理的问题。 IF语句多重嵌套一般格式: IF<条件表达式1> <语句行序列1> ELSE IF<条件表达式2> <语句行序列2> ELSE IF<条件表达式3> <语句行序列3> ELSE ……… ENDIF ……… ENDIF ……… ENDIF 注: (1)IF、ELSE(可不选)、ENDIF必须成对使用 (2)最好采用缩格(锯齿形)的书写方式
说明: ①DO CASE和ENDCASE须成对出现 ②在情况语句中,如果逻辑表达式的值为真的情况多于一个,则仅执行第一个逻辑表达式值为真的语句系列。 ③DO CASE语句之间可以嵌套使用,DO CASE语句和IF语句也可以嵌套使用DO CASE语句和DO WHILE也可以嵌套使用。 情况判断语句格式: DO CASE分支程序用于解决要根据多种条件,从各种情况中选择一种进 CASE <条件表达式1> <语句行序列1> CASE <条件表达式2> <语句行序列2> …… CASE <条件表达式2> <语句行序列2> [OTHERWISE <语句行序列N+1>] ENDCASE
例:显示当前季节程序。 M=MONTH(DATE()) &&获取当前月份 DO CASE CASE M<=2 OR M=12 =MESSAGEBOX(”现在是冬季") CASE M>=3 AND M<=5 =MESSAGEBOX(”现在是春季") CASE M>=6 AND M<=8 =MESSAGEBOX(”现在是夏季") CASE M>=9 AND M<=11 =MESSAGEBOX(”现在是秋季") ENDCASE RETURN
6.5 循环结构 定义:按照一定条件重复进行某种特定操作的程序称为循环结构程序。 VFP中有三种循环结构, 条件循环(当循环WHILE) 计数循环(FOR-ENDFOR或FOR-NEXT) 库文件记录扫描循环(SCAN)。
条件成立? …… [loop] [exit] …… ENDDO后面的语句 1、条件循环 DO WHILE <条件表达式> <语句行序列1> [LOOP] <语句行序列2> [EXIT] <语句行序列3> ENDDO N Y 备注
例:用DO WHILE语句编写程序,实现例6.2算法。 • S=0 &&存放累加和的变量S初值为0 • N=1 &&取第一个自然数 • DO WHILE N<=100 • S=S+N &&累加当前自然数 • N=N+1 &&取下一个自然数 • ENDDO • ?S • RETURN
DO WHILE <条件> DO WHILE <条件> …… …… EXIT LOOP …… …… ENDDO ENDDO (2)循环体中两条特殊语句:EXIT和LOOP (1)格式 跳出循环语句:EXIT 短跳循环语句:LOOP (2)功能 在循环体中执行到EXIT时,立即无条件跳出循环,转去执行 ENDDO 的后一个语句。若执行到LOOP语句,则立即返回DO WHILE重判循环条件,而不再执行循环体内的其他语句。