第6章循环结构程序设计
真
真
L←1 L←0
假
假
L←0
如果L = 1 真 输出n
3. 在列表框中显示多列 修改列表框的ColumnCount属 性、ColumnWidths属性可以在列 表框中显示多列选项。 【例6-9】简易数学用表。显示整 数1~100的平方、平方根、自然对 数和e指数,如图6-16所示。 补:VALUE :显示与BoundColumn 绑定的列的VALUE 值 DISPLAYVALUE:显示第一列数 据
EXIT 终止DO WHILE-ENDDO的正常循环
语句功能:
无条件地转到ENDDO的后继命令去执行
多重循环,只能跳出一层
例6-3:计算1+2+3+…+100的和
N=1 S=0 DO WHILE .T. IF N>100 EXIT ENDIF S=S+N N=N+1 ENDDO Thisform.text1.value=s
当 I <=
例题lt6-3判断素数
输入n I ← 2,s ← 0
i <= SQRT(n) and s = 0
如果n 被I整除 真 假 如果 s = 0 真 假 输出:n是素数 输出:n不是素数 s←1 I←I+1
6.1.2 步长型循环命令FOR 若事先知道循环次数,则可以使用步长型循环 (FOR…ENDFOR)结构。其语法结构为:
FOR I=1 TO 100
… ENDFOR|NEXT
专用于数据表的循环:
GO TOP
SCAN
… ENDSCAN
DO WHILE .NOT.EOF()
… SKIP
ENDDO
6.1 循环结构语句
6.1.1 当型循环命令DO WHILE
当型循环的语法格式为: 想要在某一条件满足时执行循环,可以使用当型循环(DO WHILE)结构。 DO WHILE 〈条件〉
S=0+1=1
P=1+1=2 S=1+2=3 P=2+1=3 S=1+2+3=6
P=P+1
ENDDO
thisform.text1.value=s
P=3+1=4
S=1+2+3+…+10=55 P=1+1+1ILE N<=5
T=(1*2*3*4)*5=120 T=(1*2*3)*4=24 T=(1*2)*3=6 T=1*2=2 T=1*1=1 N=5+1=6 N=4+1=5 N=3+1=4 N=2+1=3 N=1+1=2 T=120
FOR <内存变量〉=〈初值〉TO〈终值〉 [STEP 〈步长值〉]
[〈命令列〉] [LOOP] [EXIT] [〈命令列〉] ENDFOR | NEXT
【例6-4】利用“步长型”循环判断素数的程序。 只需修改命令按钮Command1的Click事件代 码: n = THISFORM.Text1.Value s=0 *i = 2 FOR i = 2 TO SQRT(n) IF n % i = 0 s=1 EXIT ENDIF ENDFOR
根据此分析画出流程图
输入m,n 大数放入m,小数放入n 求m / n的余数 当 r≠0 m←n n←r 求m / n的余数 输出n {输出最大公约数}
【例6-3】输入一个正整数,利用“当型”循环判断是否素数。 素数:只有1与本身是因子,仅能被1与自己整除 判断大于2整数N是否为质数(素数),只要判断N除以2到n-1 (或到SQRT(N))都不能整除即可
LOOP
EXIT
ENDDO
LOOP
EXIT
ENDDO
6.2 列表框与组合框控件
列表框 显示一系列数据项,用户可以从中选择一项或多项
常用属性:
ControlSoure:捆绑的变量名,存选定的数据项。 BoundColum:多列时Value捆绑的列。 Value: N:所选择的项值;C:显示内容值 DisplayValue:第一列显示内容值。 RowSoure: 列表中数据值的源。数组、字段、表结构 RowScoureType:列表中数据值的源类型。6-字段,5-数组,7文件。 ColumnCount:列数。MultSelet: 是否多选。 listIndex:列表中选定数据项的索引值 list(i)列表框第i行内容;listcount:行数。 方法事件: AddItem(S): 在列表中增加项。Clear: 清楚各项。 RemoveItem(listIndex ):删除一项。Requery:更新列表。 AddListItem(s,行,列)多列时增加项。
S=153
转跳语句(LOOP)
在DO WHILE-ENDDO循环体内提供了一条短路语句,可 以起到转跳作用 语句格式: LOOP 语句功能: 中断本次循环体的执行 跳回到DO WHILE的开始处,重复条件的判断
例:求0~100之间奇数之和
X=0 Y=0 DO WHILE X<100 X=X+1 IF INT(X/2)=X/2 LOOP ELSE Y=Y+X ENDIF ENDDO Thisform.text1.value=y
6.3.1 带选项卡的表单 使用页框和页面,可创建带选项卡 的表单或对话框,如在“选项”对话 框中所见那样。 【例6-13】在表单中设计一个带选项 卡的页框架,其中有3个页面,分别 放上一些不同的控件。
6.3.2 不带选项卡的页框架(TABS=.F.) 可以设计类似于“向导”那样的,用选项组或按钮组来控 制页面选择的表单。 【例6-14】将例6-13中的页框架改为不带选项卡的形式,使 用选项按钮组控制页面的选择。如图6-23所示
单由“单页” 变为“多页”的书。 常用属性: PageCount:页框内页的个数。 ActivePage:页框内当前活动的页号。 Pages: 页名数组。Pages(2)等价于页框内第二页对象。 Thisform.页框名.页名.容器.对象.属性|方法 Thisform.Pageframe1.Pages(1).text1.Forcolor=... 常用事件: Pageframe1.Pages(3).Zorder:置page3页放在最前。
用INT(X/2)是否等于X/2判断X是否为 偶数 是则执行LOOP语句,返回DO WHILE。 如果INT(X/2)不等于X/2 说明X的值为奇数。 执行LOOP后面的语句,将奇数累加。
出口语句(EXIT)
如果在循环的中途,需要结束循环而转到本层循环的 后继命令去执行,可以用出口命令 语句格式:
[〈命令列〉]
[EXIT]
[LOOP] [〈命令列〉] ENDDO
条件为.T.时进入循环 条件为.F.时退出循环
EXIT退出循环 LOOP结束当前次的循环, 返回到DO语句
条件 真 命令列 EXIT 假
假
真
命令列
真 LOOP 假
命令列
结束
求: 1+2+……+10的值
S=0
P=1 DO WHILE P<=10 S=S+P
第6章 循环结构程序设计
程序设计中的循环结构(简称循环)是指在程序中,从某处开始有规律地 反复执行某一操作块(或程序块)的现象。
被重复执行的该操作块(或程序块)称为循环体,循环体的执行与否及次数 多少视循环类型与条件而定。
无论何种类型的循环结构,必须确保循环体的重复执行能被终止(即非无限 循环)。
6.1 循环结构语句 6.2 列表框与组合框控件
【例6-6】求从2000年到 2100年之间的所有闰年。 分析:设n为年份数, 若n同时满足如下两个条 件则n为闰年: ① n能被4整除。 ② n不能被100整除, 或者n能被400整除。
。
n 从 2000 到 2100 如果 n % 4 = 0 如果 n % 100 != 0 或者 n % 400 = 0
1. 下拉列表框(Style: 2-下拉列表框。) 如果想节省表单上的空间,并且希望强调当前选定的项, 可以使用下拉列表框。 【例6-10】在文本框输入数据,按回车添加到列表框中,在列 表框中选定项目,单击鼠标右键可移去选定项,如图6-17所示。
2. 下拉组合框(文本框+列表框。下拉式,可输入,不能多选。) (Style: 0-下拉组合框) 下拉组合框能实现上述表单中的文本框和下拉列表框的组合 功能。即允许用户既可以输入数据又可以从列表中选择数据。 【例6-11】在上例中使用下拉组合框来代替文本框和列表框, 实现同样的功能:输入数据,按〈Enter〉键后可添加到列表 中,在列表中选定项目,单击鼠标右键可移去选定项,如图618所示。
图6-8 流程图
求S=1!+2!+3!+…+5!的值
S=0 T=1 N=1 DO WHILE N<=5 T=T*N S=S+T N=N+1 ENDDO
最后一次循环: T=(1*2*3)*4=24 T=(1*2)*3=6 T=1*2=2 T=1*1=1 T=(1*2*3*4)*5=120 S=1+2!+3!+4!=33 S=1+(1*2)+(1*2*3)=9 S=1+(1*2)=3 S=0+1=1 S=1+2!+3!+4!+5!=153 N=4+1=5 N=3+1=4 N=2+1=3 N=1+1=2 N=5+1=6
T=T*N
N=N+1
ENDDO
thisform.text1.value=t
【例6-1】计算阶乘的程序 N=1*2*3*4*5*6*7……