630 likes | 766 Views
第 6 章 结构化程序设计. 什么是程序. 程序:是按照一定的 逻辑顺序 排列在一起的命令或语句的集合。 程序文件:在计算机磁盘中保存程序的文件。 源程序文件:由高级语言编写未经编译的程序文件。程序文件格式必须是 纯文本 文件。(扩展名 .prg ) 可执行文件:由高级语言编写,经过编译成为可以在计算机上直接运行的 机器指令 文件。(扩展名 .exe ). 下一张. 创建源程序文件. 在项目管理器中创建源程序文件 打开项目管理器 | 单击“代码” |“ 程序” | 单击“新建” 在项目管理器中修改源程序文件 打开项目管理器 | 单击“代码” |“ 程序”
E N D
什么是程序 • 程序:是按照一定的逻辑顺序排列在一起的命令或语句的集合。 • 程序文件:在计算机磁盘中保存程序的文件。 • 源程序文件:由高级语言编写未经编译的程序文件。程序文件格式必须是纯文本文件。(扩展名.prg) • 可执行文件:由高级语言编写,经过编译成为可以在计算机上直接运行的机器指令文件。(扩展名.exe) 下一张
创建源程序文件 • 在项目管理器中创建源程序文件 • 打开项目管理器|单击“代码”|“程序”|单击“新建” • 在项目管理器中修改源程序文件 • 打开项目管理器|单击“代码”|“程序” • 选中要修改的程序名|单击“修改” • 命令方式创建或修改源程序文件 语法:Modify Command <源程序文件名> 下一张
运行程序 • 在项目管理器中运行程序 • 打开项目管理器 • 单击“代码”|“程序”|程序名 • 单击“运行” • 在命令窗口运行程序 语法:Do <程序文件名> 下一张
程序书写规则 • 书写注释行 语法:* 或 note 注释文字 • 行尾注释 语法:&& 注释文字 • 长命令换行 语法:在行尾 ; • 文字颜色 绿色为注释文字,蓝色为vfp关键词 下一张
结束当前程序 • 中止当前正在执行的程序,将控制权返回给调用程序或回到windows系统。 语法:Return A=3 B=4 C=Sqrt(a^2+b^2) Return 下一张
输出命令 • 换行并在指定列输出对象 语法:?<表达式1> [at <列号>][,<表达式2>]... ?“问号输出到40列” at 40 • 同行在指定列输出对象 语法:??<表达式1> [at <列号>][,<表达式2>]… ?“abc” ??“def” 下一张
暂停等待按键命令 • 程序遇到该命令后暂停,接收按键后继续 语法:wait [<文本表达式>][to <内存变量名>] [windows [at <行号>,<列号>]] [timeout <等待秒数>] 例题:Wait “等待三秒后自动结束!” to vkeyp windows at 16,40 timeout 3 ?vkeyp 下一张
消息窗口函数 语法: Messagebox(显示文本,对话框类型,对话框标题) 对话框类型=图标值+按钮组值+默认按钮值 函数的返回值:是结束对话框时所按的按钮 下一张
图标值 数值 图标 16 “停止”图标 32 “问号”图标 48 “叹号”图标 64 “信息”图标 返回
按钮组值 数值 按钮组 0 “确定” 按钮组 1 “确定” ”取消” 按钮组 2 “放弃” 、 ”重试” 、 ”忽略” 按钮组 3 “是” 、 ”否” 、 ”取消” 按钮组 4 “是” 、 “否” 按钮组 5 “重试” 、 “取消” 按钮组 返回
默认按钮 数值 默认按钮 0 第一个按钮 256 第二个按钮 512 第三个按钮 返回
返回值(所按的按钮) 数值 按钮 1 确定 2 取消 3 放弃 4 重试 5 忽略 6 是 7 否 返回
清除屏幕内容 • 将消息窗口中的内容清除掉 语法:Clear 下一张
接收键盘输入的字符型数据 显示提示文字,并等待键盘输入的文字串 语法:Accept <文字提示> to <字符型内存变量名> 输入的数据作为文本保存至字符型变量中。 下一张
接收键输入的不同类型的数据 显示提示文字,并等待键盘输入的数据 语法:Input <文字提示> to <内存变量名> 输入的数据保存在型变量中。接收输入数据的变量,其类型取决于输入数据的类型。文字提示用于提示用户应该执行的操作。 数字型:123.04 字符型:“人民大学” 日期型:{^2004.09.18} 下一张
程序框图符号 程序框图:以图形的方式描述程序的逻辑结构以及处理流程。 框图符号: 下一张
程序的控制结构 控制结构决定了程序执行的逻辑顺序。 三种控制结构: 顺序结构 分支结构:单条件分支结构 多条件分支结构 循环结构:条件循环 变量循环 扫描循环 下一张
顺序结构 顺序结构:按照程序语句编写的顺序,从前往后逐条顺序执行,每条语句只执行一次。 下一张
分支结构 单条件分支结构:根据条件表达式的判断结果决定执行的语句组,每次条件判断后只能执行两个语句组中的一个。例题:计算邮资。 语法: If <条件判断> 语句组一 Else 语句组二 Endif 下一张
单条件分支例题 程序功能:输入邮件重量,计算邮资。5公斤以下(含5公斤)按每公斤8角计费。5公斤以上按每公斤1.2元计费。Calcpost.prg 返回
分支结构 多条件分支结构:根据不同的条件表达式判断结果执行不同的语句组。 下一张
多条件分支结构语法 语法:程序例题 Do caseCase 条件表达式1语句组一Case 条件表达式2语句组二Otherwise语句组Endcase 下一张
多条件分支例题 程序功能:输入一个考试成绩, 成绩应该在0到100分之间, 60分以下为不及格, 60以上(含60)70以下为及格, 70以上(含70)80以下为中, 80以上(含80)90以下为良, 90以上(含90)为优。 Cjflif.prg (使用if嵌套) Cjflcase.prg(使用do case) 返回
循环结构 条件循环:根据条件判断结果决定是否继续执行循环中的语句组。程序例题。 语法:Do while <循环条件>语句组Enddo 继续执行语句组当循环条件成立时。 下一张
Do 循环例题 例题1: 输入自然数n,计算从0累加到n。Sumndo.prg 例题2: 输入自然数n,计算从1累乘到n。Mulndo.prg 返回
循环结构 变量循环:根据循环变量值的大小决定是否继续执行循环中的语句组。程序例题。 语法:For i=初值 to 终值 [step 步长] 语句组Endfor 下一张
For 循环例题 例题1: 输入自然数n,计算从0累加到n。Sumnfor.prg 例题2: 输入自然数n,计算从1累乘到n。Mulnfor.prg 返回
循环结构 数据表扫描循环:逐条访问(扫描)数据表中符合条件的记录,直到尾标。 下一张
数据表扫描循环结构 语法:Scan [范围] [For<条件1>] [While<条件2>]语句组Endscan 程序例题 下一张
SCAN 循环例题 例题:studscan.prg 输入一个入学成绩下限和一个入学成绩上限。 打开studinfo.dbf数据表,逐条显示入学成绩在下限与上限范围之内的学生档案。 用do while 改写studscan,prg 成 studdo.prg 返回
循环短路、跳出循环 循环短路:立即回到循环头,继续下一次循环。 语法:Loop 跳出循环:无条件结束循环,跳至循环后面的语句 语法:Exit Loop和Exit应该与条件分支语句结合使用。 程序例题。Mulndole.prg 下一张
Loop结合条件判断 下一张
Loop结合条件判断 语法: Do while <循环条件> 语句组一 If <Loop条件表达式> Loop Endif 语句组二 Enddo 下一张
Exit结合条件判断 下一张
Exit结合条件判断 语法: Do while <循环条件> 语句组一 If <Exit条件表达式> Exit Endif 语句组二 Enddo 返回
系统结构 下一张
模块(程序) • 模块:是实现特定功能的基本程序单元。模块的构成可以是程序语句,也可以是其他模块。 • 模块的形式:程序、子程序、过程、函数。文件扩展名均为.prg。他们都是程序的一种。 • 模块调用:模块之间通过调用,完成从一个模块的处理进入另一个模块的处理。被调用模块处理结束将返回调用他的模块。 • 共享模块:可以被其他模块共同调用的模块。 下一张
模块(程序)的创建 • 在项目管理器中创建模块 • 打开项目管理器 • 单击“代码”|“程序”|”新建” • 打开程序编辑窗口 • 单击“保存” • 命令方式 语法:Modify command <模块名(程序名)> 下一张
模块(程序)的修改 • 在项目管理器中创建模块 • 打开项目管理器 • 单击“代码”|“程序” • 单击要修改的程序名 • 单击“修改” • 打开程序编辑窗口 • 单击“保存” • 命令方式 语法:Modify command <模块名(程序名)> 下一张
程序 每一个程序以扩展名为(.prg)的文件形式独立地保存在磁盘中。 程序中止: 语法:Return 程序的执行: 语法:Do <程序文件名> 下一张
子程序 子程序也是以扩展名为(.prg)的文件形式独立地保存在磁盘中。 一次模块(程序)调用中(A.prg调用B.prg)调用模块(A.prg)被称作父程序,被调用模块(B.prg)被称作子程序。调用关系决定了程序间的父子关系。 父子关系的相对性(一父多子、一子多父)。 调用一次子程序将产生一次读磁盘的动作。 在一次调用父程序以参数的形式将数据传递给子程序。 下一张
子程序的结构 [parameters <形参表>](子程序文件的第一句) 语句组 Return(子程序文件的最后一句) 子程序的调用 语法: Do <子程序名> [with <实参表>] 父程序的实参与子程序的形参,按位置传递 父程序通过参数将数据传入子程序 子程序通过参数返回(传出)处理结果 下一张
子程序调用实例计算a+b与axb Main.prg aaddb.prg Clearinput “输入一个数a:” to va Input “输入一个数b:” to vb Vc=0 Do aaddb with va,vb,vc ?”a+b=”,vc Vd=0 Do amulb with va,vb,vd ?”a*b=”,vd return para sa,sb,sc sc=sa+sbretrun amulb.prg Para ma,mb,md md=ma*mbreturn 下一张
子程序调用框图 一父多子的调用结构 下一张
子程序调用实例计算2x(a+b) main1.prg m2aaddb.prg Para ma,mb,mcmd=0do aaddb with ma,mb,mdmc=md*2return clear input “输入一个数a:” to va input “输入一个数b:” to vb Vc=0 Do m2aaddb with va,vb,vc ?”2x(a+b)=”,vc return 下一张
子程序调用框图 嵌套调用结构 下一张
子程序调用框图 一子多父的调用结构(aaddb.prg为共享模块) 下一张
过程 过程:也是一个程序模块,它可以被其他的程序、子程序、函数或另一个过程调用。 过程的作用:可以将多个过程一次装入内存,从而在调用过程时不用再访问磁盘,减少磁盘访问的次数,提高程序运行的效率。 下一张
过程格式 过程定义格式 mainprog.prg mainproc.prg Procedure <过程名> [Parameters <形参表>](过程里的第一行) 语句组 Return Endproc 调用程序通过参数将数据传给过程,过程同样通过参数将处理结果传回给调用程序。 下一张