VFP第3、4、5部分(程序算法及顺序分支循环)
1.顺序结构
教材P53
顺序结构是在程序执行时,
根据程序中语句的书写顺序依次
执行的命令序列。Visual FoxPro
系统中的大多数命令P52) 【例3-2】设计如图3-5所示表单,在文本 框text1、text2、text3中输入三角形的三边,单击 “计算”按钮可以在文本框text4中显示三角形的面 积。其计算公式为
“计算”按钮的“Click”事件代码如下: fas=thisform.text1.value cels=5*(fas-32)/9 thisform.text2.value=round(cels,1)
&&结果保留1位小数
〖描述方法1〗用自然语言表示 步骤1:输入华氏温度fas。 步骤2:按照公式,计算摄氏温度cels。
area l(l a)(l b)(l c) l (a b c) / 2
(其中a,b,c为三角形的三边,area为三角形的面积)
“计算”按钮的“Click”事件代码如下:
a=thisform.text1.value
b=thisform.text2.value
数据输入
c=thisform.text3.value
l =(a+b+c)/2 area=sqrt( l *( l -a)*( l -b)*( l-c))
数据处理
thisform.text4.value=round(area,1)
数据输出
2.分支(选择)结构
分支结构是在程序执行时, 根据不同的条件,选择执行不同 的程序语句,用来解决有选择、 有转移的诸多问题。
thisform.text4.value=round(area,1)
else messagebox("不能构成三角形,重新l 输入!")
VFP就是一种语言工具。要用VFP 编写出高质量的程序,一方面要构建 合理的算法,另一方面要掌握VFP的语 法规则,它是实现算法的基础。
命令有一定的书写规则: 1、命令分行。
程序中每条命令都以回车键结尾, 一行只能写一条命令。若命令需分行 书写,应在一行终了时键入续行符 “;”,然后按回车键。
2、命令注释。
第三、四、五讲 程序设计(1) 要点:
1.算法的概念及特点 2.掌握程序3种基本结构的表示 3.掌握利用分支结构编程 4.掌握利用循环结构编程
算法及算法的表示
一、算法的概念及特点 所谓算法就是对解决问题所采用的
方法和步骤的描述。
二、算法的描述
算法的描述方法有很多,为直观、 准确地表示一个问题的处理方法和步骤, 通常采用流程图的方法。
cels 5 ( f as 32) 9
步骤3:输出摄氏温度。
〖描述方法2〗 用流程图表示如图所示。
开始 输入fas 计算cels 输出cels
结束
〖描述方法3〗用N-S流程图如图所示。
一个算法应该具有以下特点:教材P52 ①确定性。 ②有穷性。 ③有效性。 ④输入。 ⑤输出。
任何一个问题能否让计算机处理, 关键在于能否设计出合理的算法,有 了合适的算法,再使用合适的计算机 语言来编写程序。
INPUT [<提示信息>] TO <内存变量>
例如:s=100 input "请输入:" to a ? "a=",a
执行上述命令,若输入的内容为 s+20,则
输出结果
2) ACCEPT命令
格式:
ACCEPT [<提示信息>] TO <内存变量>
例如,把上例中的input改成accept: s=100 accept "请输入:" to b ?"b=",b 执行上述命令,若输入的内容为s+20,则
“计算”按钮的“Click”事件代码如下:
a=thisform.text1.value
b=thisform.text2.value
c=thisform.text3.value
if a+b>c and a+c>b and b+c>a
l =(a+b+c)/2
area=sqrt(l *(l -a)*(l -b)*(l -c))
输出结果
3)基本输出命令 格式:
?|??<表达式1>,[<表达式2>…]
常用输入输出控件(用于可视化
程序)
fas=thisform.text1.value
1)输入控件
文本框
2)输出控件
标签、文本框
thisform.text2.value=round(cels,1)
程序设计实例
顺序结构程序实例 分支(选择)结构程序实例
A B (a)流程图
A B
(b)N-S图
•选择(或分支)结构:根据条件是否
成立而执行不同的程序模块。
Y 条件p
N
A
B
P
T
F
A
B
(a)流程图
(b)N-S图
•循环结构:是指重复执行某些操作,
重复执行的部分称为循环体。
N 条件P
Y A
条件P A
(a)流程图
(b)N-S图
常用命令(用于结构化程序)
1、基本的输入/输出命令 1)INPUT命令 格式:
流程图是用一些几何图形符号、线 条及文字说明来表征一个问题的处理过 程。
一般采用传统流程图和N-S图来描 述算法。
(教材P51) 【例3-1】设计如图所示表单,在文本框 text1中输入华氏温度,单击“计算”按钮可以求出 对应的摄氏温度,并在文本框text2中显示。
cels 5 ( fas 32) ,其中cels表示摄氏温度,fas表示华氏温度 9
程序中可以插入注释,以提高程序的 可读性。
注释语句 格式: NOTE|* 注释部分
行首注释
&& 注释部分
单命令的行 尾注释
三、3种基本结构的表示
程序的3种基本结构:顺序结构、 选择(或分支)结构、循环结构,它 们构成了实现一个算法的基本单元。
•顺序结构:是一种最基本、最简单的程
序结构。如下图所示,先执行A,再执行 B,A与B按照顺序执行。
常见的分支结构有: IF语句
多路分支语句
1)IF语句
格式: 见教材P57 流程图
Y 条件? N
语句序列1
语句序列2
ENDIF之后的命令
(教材P53) 【例3-3】修改【例3-2】,在文本框 text1、text2、text3中输入三角形的三边,单击 “计算”按钮,如果输入的三边能构成三角形,则在 文本框text4中显示三角形的面积;否则用提示框给 出提示信息:不能构成三角形,重新输入!。如图所 示。
vfp第2章第4,5,6节(程序)
试编程完成下列功能。从键盘上随机输入一个正数,以此数为 半径,求圆面积和球体积,并输出结果。 程序如下: 程序中的第一行为注释行,说明 此程序文件名;第四行的功能是 *L2.PRG 不显示命令处理信息,第十行的 CLEAR 功能是恢复显示命令处理信息。 SET TALK OFF INPUT "半径=" TO R 在命令窗口中执行: S=PI()*R*R DO L2 V=4/3*PI()*R**3 屏幕显示 输入10后 ? "圆面积=",S 按Enter键 半径=10 ? "球体积=",V SET TALK ON 显示结果 RETURN 圆面积= 314.16 球体积= 4188.790205
例:根据键入X的值,计算下面分段函数的值,并显示结果。 程序如下: X2+4X-1 (X≤0) SET TALK OFF 3X2-2X+1 (0<X≤10) Y= CLEAR X2+1 (X>10) INPUT “X=” TO X IF X>0 IF X>10 Y=X*X+1 ELSE Y=3*X*X-2*X+1 ENDIF ELSE Y=X*X+4*X-1 ENDIF ?”分段函数值为:”+STR(Y,10,2) SET TALK ON RETURN
Name
说明:程序中第四句使用了宏代换函数,这是由于Name本身 不是文件名,而其内容才是文件名。 (2)通用数据接收命令 ACCEPT语句只能给字符型内存变量提供数据。如果用户想给 其它类型的内存变量提供数据,可以使用下列命令: 格式:INPUT [<提示信息>] TO <内存变量名>
功能:用于接收从键盘上输入的任意类型的表达式(必须符合 VFP的语法要求),并将计算结果存入指定的内存变量或数组元 素中。 参数描述: [<提示信息>]:提示信息,提示用户输入数据。 [<内存变量名>]:指定一个内存变量或数组元素,存储从键盘 输入的数据。如果指定的内存变量或数组元素不存在,VFP将自 动创建该内存变量或数组。 说明: INPUT语句与ACCEPT语句的执行过程相同,功能相似。 <内存变量名>的数据类型取决于输入数据的类型。可以为数 字型、字符型、日期型和逻辑型等等。 INPUT语句与ACCEPT语句的区别是: ACCEPT命令只能接收字符串,而INPUT语句可以接收任意 类型的VFP表达式;如果输入的是字符串,ACCEPT语句不要使 用字符型定界符,而INPUT语句必须用定界符括起来。 INPUT命令不可以不输入任何内容就按回车键。
VF顺序和分支
4.1程序控制的基本结构
例1:求两个数的和。 :求两个数的和。
4.1.1 顺序结构
分析: 分析: 输入第一个数X 输入第一个数 输入第二个数Y 输入第二个数 的和S 求X+Y的和 的和 输出S 输出 可以看出,解决问题一般有三步: 可以看出,解决问题一般有三步 输入、处理、 输入、处理、输出 将上述步骤转换成计算机的执行语 句: Input x Input y S=x+y ?s
出口 循环结构
任何程序都可以用三种基本结构表示,由三种基本结构反复嵌套构成的程序叫结构化程序 任何程序都可以用三种基本结构表示,由三种基本结构反复嵌套构成的程序叫结构化程序
Company Logo
第二节、程序文件设计 第二节、
程序
〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓 程序概念:程序是为了完成某项指定的任务而需执行 的命令序列。 程序文件 :命令序列以一定的结构有序地编排在一起, 并以文件的形式存储在磁盘上。 VFP命令文件:命令文件的扩展名为.PRG(执行时自 动编译为目标文件,扩展名为.FXP) 程序设计:就是为了完成某一具体任务而编写一系列 指令。
Company Logo
4.1程序控制的基本结构 4.1.2 选择分支结构
定义: 定义:选择分支结构是根据条件的测试结果执行不 同的操作。 中有两条命令实现条件分支: 同的操作。VFP中有两条命令实现条件分支:二路 中有两条命令实现条件分支 选择分支结构( 选择分支结构(IF…ENDIF)和多路选择分支结 ) )。可以构成四种 构(DO CASE … ENDCASE)。可以构成四种 )。 控制结构。 控制结构。
Company Logo
(整理)VFP程序步骤
第一部分:程序入门一级一、选择结构(IF- ELSE - ENDIF)语句格式:IF〈条件〉〈语句序列1〉[ ELSE〈语句序列2〉]ENDIF说明:IF和ENDIF必须配对使用,而ELSE可选。
三个语句应各占一行。
若省略ELSE子句,条件为真时,则执行〈语句序列1〉,然后再执行ENDIF后的语句;否则,若条件为假,即执行ENDIF后的语句。
二、循环结构1、条件循环:语句格式:DO WHILE 〈条件表达式〉〈语句序列1〉[LOOP]〈语句序列2〉[ EXIT ]〈语句序列3 〉ENDDO说明:系统执行该语句时,先测试条件表达式的值,若为真,则执行循环体,在循环体中修改循环条件,直到条件为假时,脱离循环,执行循环体ENDDO后的语句。
若遇到LOOP 语句,则直接返回执行DO语句,测试条件以决定是否继续循环。
若执行循环体时遇到EXIT 语句,则不执行下面的语句,直接跳出循环,执行ENDDO后面的语句。
注意:DO WHILE必须和ENDDO配合使用,两者缺一不可,DO WHILE语句前一定要有条件变量的初始值。
2、计数循环FOR〈循环变量〉=〈循环初值〉TO〈循环终值〉[STEP〈步长〉]〈语句序列1〉[LOOP]〈语句序列2〉[EXIT]〈语句序列3〉ENDFOR/NEXT说明:使用和DO WHILE 基本一致,注意步长和ENDFOR语句。
三、程序举例:A. 简单整除,求和求个数。
Eg:求出[10,100]内所有能被2整除的整数的和(2530),个数(46)set talk offclearn=0 &&设置计数变量s=0 &&设置求和变量for i=10 to 100if mod(i,2)=0n=n+1 &&满足条件计数变量加1s=s+i &&满足条件,求和变量增加endifendfor? n,sset talk onreturnA1.求出[10,100]内所有能被7和9中至少一个数整除的整数的个数(22),和(1250).A2.求出[10,100]内所有能被7但不能被9整除的整数的个数(12), (665)A3.求出[10,100]内所有能被7和9中的一个且只有一个数整除的整数的个数(21),(1187)A4.编写程序,求出1~7000以内能被3或者7整除的数的个数(3000)。
2019-2019-2VFP第4部分 共44页
i=1
for i=1 to n step k
do while i<=n
<命令序列>
<命令序列>
endfor|next
i=i+k
endddo
【练习1】求100以内的奇数和。 请同学们自 己写出流程 图和程序
A=1+3+5+…+99
循环变量 初值n=1
循环条件n<100
循环变量的变化 趋势n=n+2
循环体累加语句:A=A+n
涉及数据表的循环, 第6章介绍
1)条件循环(do while循环)
格式:
教材P62
流程图:
条件 N
Y 语句序列
Enddo之后的语句
【例】计算1+2+3+…+100
第 1 步, 计算 0+1;
第 2 步, 计算 (0+1)+2; 第 3 步, 计算 (0+1+2)+3;
递归 算法
………
第 i 步, 计算 (0+1+…+i-1)+i;
……….
第 100 步,计算 (0+1+…+99)+100;
前i-1次累加和
第i次累加项
算法: s=1+2+3+…+100
确定循环变量i并赋初值为1
定义s存放累加和,初值为0
确定循环条件 i<=100
s=s+i
递推公式
确定循环变量的变化趋势i=i+1
输出结果s
三个“确定” 循环三要素
在条件循环中如何 体现的??
vfp循环语句
一、条件循环语句 ( 当型循环语句)
DO WHILE <条件表达式> 〈条件表达式值为真时需反复执行 的语句系列〉 ENDDO
循环说明部分
DO WHILE<条件表达式> 〈条件表达式值为真时 需反复执行的语句系列〉 ENDDO
循环体 循环结束部分
条件? 条件? Y
N
循环体
功能:当条件表达式值 ENDDO后面的语句 为真时反复执行循环体, 直到条件表达式值为假 时为止。
三、扫描循环语句
模式一: … USE〈表文件〉 … GO TOP !EOF() DO WHILE EOF()=.F. 〈处理一条记录的命令序列〉 NOT EOF() SKIP ENDDO USE …
例:将jsdn.dbf中所有职称为 教授的基本工资增加100元, 副教授增加70元,讲师增加 50元,助教增加30元。
解法二:
use gs do while !eof() i=2 store 得分1 to m,n,x do while i<=8 j=str(i,1) m=max(m,得分&j) n=min(n,得分&j) x=x+得分&j i=i+1 enddo replace 最后得分with (x-m-n)/6 skip enddo use
例:编程显示26个大写英文字母 和它们的ASCII码值,每行显示 10个字母。
例:编程程序,建立并输出一个 10×10的矩阵,该矩阵两条对角 线元素为1,其余元素均为0。
例:若一个三位自然数的值等 于该数各位数字的立方和,则 这个自然数叫做“水仙花数”, 例如153=1^3+5^3+3^3,153是 一个水仙花数,请编写程序求 出所有水仙花数。
2013-1VFP第3、4、5、6部分(程序算法、顺序分支循环、控件)
3.循环结构
循环结构能够使某些语句或程序段重 复执行若干次。 如果某些语句或程序段需要在一个固 定的位置上重复操作,使用循环是最好的 选择。
常见的循环结构有:
条件循环 步长循环 扫描循环
涉及数据表的循环, 第6章介绍
1)条件循环(do while循环) 格式: 流程图:
教材P62
条件
N
Y 语句序列 Enddo之后的语句
命令有一定的书写规则: 1、命令分行。 程序中每条命令都以回车键结尾, 一行只能写一条命令。若命令需分行 书写,应在一行终了时键入续行符 “;”,然后按回车键。
2、命令注释。
程序中可以插入注释,以提高程序的 可读性。 注释语句 格式:
NOTE|* 注释部分 && 注释部分
单命令的行 尾注释 行首注释
三个“确定” 循环三要素
在条件循环中如 何体现的??
开始
s=0, i=1 N
i<=100 Y s=s+i i=i+1
循环变量赋初值
属于“累加器”类型问题
基本方法:
(1)在进入累加前先给累加器赋初值(求和一般为0)
(2)用循环语句实现累加
循环变量赋初值;循环条件;循环变量的改变规律
(3)循环体语句的设计
累加器当前值=累加器原值+循环当前值
s=1+2+3+…+100 算法: 确定循环变量i并赋初值为1 定义s存放累加和,初值为0 确定循环条件 i<=100 递推公式 s=s+i 确定循环变量的变化趋势i=i+1 输出结果s
【例】计算1+2+3+…+100
第 1 步, 计算 0+1; 第 2 步, 计算 (0+1)+2; 递推 第 3 步, 计算 (0+1+2)+3; 算法 ……… 第 i 步, 计算 (0+1+…+i-1)+i; ………. 第 100 步,计算 (0+1+…+99)+100;
VF 第5章 结构化程序设计
5.4 程序设计的三种基本结构
按照结构化程序设计的观点,任何 算法都可通过三种基本程序结构的组 合来完成。这三种基本程序结构分别 是:顺序结构、分支结构和循环结构。 5.4.1 结构化程序设计概述 5.4.2 选择结构 5.4.3 循环结构
5.4.1 结构化程序设计概述
结构化程序设计的提出 为了便于阅读和修改程序 方法:严格按照三种基本程序结构编写程序 程序模块化,尽量减少各模块间关联 自顶向下逐步求精:整体->部分->更小部分 程序的三种基本结构 顺序结构 选择结构 循环结构
5.1.2 程序文件的基本组成
程序一般由以下要素组成:
变量:保存中间结果,参与运算。
普通语句:操作数据库的命令、输入输出
等。 程序流程语句:控制程序方向,如跳转、 选择等。 过程与函数:完成特定功能的子程序块
5.2 算法与流程图
算法是程序设计的重要环节,算法的 好坏直接影响到程序运行的效率和开销。 利用流程图描述算法是一种常用方法, 它可以使算法的描述直观形象,便于理 解。
5.2.3 算法的流程图描述(1)
在程序设计中,更经常是用流程图来 描述算法。用一些简单的几何框图表示 各种类型的操作,然后用带箭头的有向 流线将各个框图连结起来,以表示其执 行的先后顺序,这种框图称为“流程 图”。用流程图描述算法,直观形象, 易于理解。
5.2.3 算法的流程图描述(2)
最常用的流程图符号如下所示。 起止框:表示程序的开始和结束。
3.输入单字符语句: WAIT(2)
②WAIT语句只接收单个字符。若含有[TO <内存变量名>],则把该字符送内存变量, 内存变量是字符型的。 ③WAIT 语句的特点在于响应速度快,它常 用于程序中控制屏幕显示的暂停,使用户看 清屏幕上的内容之后,再按任一键让程序继 续执行。 例如:WAIT "请看清结果后按任一意键, 程序将继续运行"
VFP第4、5部分(循环结构)
③循环结构能自身嵌套(多重循环), 还能与选择结构的各种形式嵌套。
2)步长循环(for…endfor计 数循环)
格式:书145页
例:计算s=1+2+3+…+100
clea
s=0
for i=1 to 100
递推 公式
开始
s=0, i=1
N i<=100 Y s=s+i i=i+1
输出s 结束
பைடு நூலகம்
clea s=0 i=1 循环体
do while i<=100
s=s+i
i=i+1
enddo ?"1+2+3+...+100=",s retu
改变条件取 值的语句
说明:
①循环结构从do while开始,到 enddo结束,两者必须成对出现;在 enddo后面可以书写注释。
s=s+i enddo ?"1+2+3+...+100=",s return
例:求n的阶乘
说明:
①步长可正可负,缺省为1。
②循环体中不应包含改变循环 变量值的命令,否则循环次数将随 之改变。
③如果循环可以通过计数来控 制,则本循环比条件循环更为方便。
当循环
步长循环
input “请输入终值:” to n
例:已知圆半径,求圆面积。
r=val(thisform.text1.value) &&获得半径值 bel3.caption=alltrim(str(pi()*r*r)) S= pi()*r*r &&计算圆面积 &&显示计算结果,保留整数部分 bel3.caption=alltrim(str(s)) &&保 留整数部分
vfp第五章
假
if 逻辑表达式 <语句序列>
endif
【例5-5】在SCORES.DBF中查找某学生考试成 绩是否小于60,若小于60分,则将“及格否”字 段设置为.F.。
17
2011年秋
VFP程序设计
18
2011年秋
VFP程序设计
第五章 结构化程序设计
VFP的工作方式:交互操作和程序执行
界面操作和命令执行(一次 只能执行一条) • 基本概念 • 三种基本结构:顺序、选择(分支)和循环 • 多模块程序设计、自定义函数、过程与过程文件
1
2011年秋
VFP程序设计
一、基本概念
1、程序:具有特定功能的指令的集合,也称源程序。
• 项目管理器—代码—程序—运行 • 程序—运行 • 命令窗口中:do <文件名>
4
2011年秋
VFP程序设计
5、程序设计的基本过程:
利用计算机解决一个实际问题,主要分成后,需要调试程序和分析运行结果。
计算圆面积:
给出圆的半径:R=4 注意:求解的基本逻辑 与程序的通用性
• quit命令:退出vfp系统
7、打开/关闭对话功能语句 格式:SET TALK ON/OFF
功能: 执行程序时,SET TALK OFF命令将关闭对话 功能,系统不再回显结果;使用SET TALK ON命令打 开对话功能,程序执行每条命令时都回显运行结果。
16
2011年秋
VFP程序设计
三、选择结构(分支结构)
2、程序设计:为完成特定功能而编写程序的过程。
3、结构化程序设计思想: 自顶向下、逐步求精、模块化
VFP-04-03 Do While和For循环
Do While和For循环班级:数学系12级日期:2013.11时数:1目的:理解Do While和For循环语句重点:Do while/EndDo语句及举例难点:循环语句的理解关键:图示4.4 循环结构程序4.4.1 Do While循环语句格式:Do While <条件><语句序列>[Exit][Loop]EndDo功能:条件满足时,循环执行Do While和EndDo之间,直到条件不满足或Exit 强行退出。
执行过程:第1步:计算<条件>表达式,结果为.F.,整句结束;否则为.T.,到第2步。
第2步:执行Do While和EndDo之间的<语句序列>。
中途遇Exit命令,强行结束本循环语句。
中途遇Loop命令,回到第1步。
遇EndDo语句,回到第1步。
图4-5 Do While语句流程图教学提示:为了与FOR语句流程图一致,才这样画图中的虚线。
说明:①Do While和EndDo须各占一行,成对出现。
②必须能退出循环,否则为“死”循环。
教学提示:以求s=1+2+...+100为例,变以取奇、偶数、s>100、去3的倍数,以演示初值、增量、exit、loop。
第97页,例 4.13已知学生成绩表student_cj.dbf中有10条记录,请写出以下程序的执行结果。
set talk offclearuse student_cj.dbfi=1do while i<10i=i+2append blankenddo?"學生成績表的記錄個數為:",recc()useset talk onreturn第97页,例 4.14请写出以下程序的执行结果。
set talk offst="123456789"k=8do while k>=0x=substr(st,k,k)y=left(st,k)z=right(st,k)s=x+y+zk=k-3enddo?"s=",sset talk onreturn第97页,例 4.15逐条显示学生信息表student_info.dbf中1989年出生的学手的记录。
