Do While和For循环
班级:数学系12级
日期:2013.11
时数:1
目的:理解Do While和For循环语句
重点:Do while/EndDo语句及举例
难点:循环语句的理解
关键:图示
4.4 循环结构程序do while语句怎么用
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 off
clear
use student_cj.dbf
i=1
do while i<10
i=i+2
append blank
enddo
"學生成績表的記錄個數為:",recc()
use
set talk on
return
第97页,例 4.14请写出以下程序的执行结果。
set talk off
st="123456789"
k=8
do while k>=0
x=substr(st,k,k)
y=left(st,k)
z=right(st,k)
s=x+y+z
k=k-3
enddo
"s=",s
set talk on
return
第97页,例 4.15逐条显示学生信息表student_info.dbf中1989年出生的学手的记录。
set talk off
clear
use student_info.dbf
locate for year(出生日期)=1989
do while .not.EOF()
display
continue
enddo
"显示完毕!"
use
set talk on
return
第98页,例  4.16根据销售表sale.dbf(商品名,销售数)中的数据去invertory.dbf(商品名,单价,库存数,总金额)中的数据,请对程序填空。
select 1
use inventory.dbf
select 2
use sale
do while        (1)
select 1
locate for 商品名=B->商品名
replace 库存数 with 库存数-B->销售数,总金额 with 单价*库存数
select 2
(2)
enddo
close database
set talk on
return
答:(1).not.EOF()  (2)skip
第98页,例 4.17设计程序,求1-100之间全部奇数的平方根之和。
set talk off
x=1
y=0
do while x<100
y=y+sqrt(x)
x=x+2
enddo
"0-100之间的奇数的平方根之和为:",y
set talk on
return
4.4.2 For循环语句
格式:
For <;循环变量> = <;初值> To <;终值> [Step<;步长值>]
<;语句序列>
[Exit]
EndFor|Next
功能:针对初值、终值之间的循环变量值,循环执行For和EndFor|Next间的语句序列,每次循环后循环变量值加一步长,直到循环变量值超过终值,或Exit 强行退出。
执行过程:
第1步:计算初值、终值和步长值;将初值赋给循环变量。
第2步:如果循环变量超过终值,本循环语句结束。否则,到第3步。
第3步:执行For和EndFor之间的语句序列。可能有三种情况,
①中途遇Exit命令,强行结束本循环语句。
②中途遇Loop命令,循环变量自增步长,回到第2步。
③最后遇EndFor语句,循环变量自增步长,回到第2步。
图4-6 For语句流程图
小提示:For语句Loop或EndFor返回时,自增步长而不重算初值、终值表达式。
教学提示:这样画FOR流程图为的是与其步长在右边的格式对应。
图4-7 For语句循环图
说明:
①For和EndFor须各占一行,成对出现。
②循环变量可以是内存变量或数组元素。
③初值、终值和步长,是数值型表达式,否则出错。缺省Step的值为1。
④非Exit中止整句时,循环变量的值超过终值。因为加了步长才整句结束。
小提示:字段变量不能用“=”赋值,故不能用作循环变量。
教学提示:增量方框宜画在右上方,与语句格式相对应。
教学提示:以求s=1+2+...+100为例,变以取奇、偶数、s>100、去3的倍数,以演示初值、增量、exit、loop、与do while语句不同在“循环回到步长”。
第101页,例  4.18设计程序,求水仙花数,即各位数字的立方和等于该数的数。
set talk off
clear
for n=100 to 999
a=int(n/100)                &&用int()取高位
b=int( mod(n,100) / 10 )    &&用mod()取低位
c=mod(n,10)                &&用mod()取低位
if n = a^3+b^3+c^3
n
endif
endfor
set talk on
return
第101页,例 4.19从键盘输入10个数,出其中的最大和最小数。
set talk off
clear
input "请从键盘输入一个数:" to a
store a to max, min
for i=2 to 10
input "请从键盘输入一个数:" to a
if max<a
max=a
endif
if min>a
min=a
endif
endfor
"最大值为:",max
"最小值为:",min
set talk on

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。