1.2.3 循环语句
1、顺序结构常用的程序语言和格式 输入语句 INPUT “提示文字”;变量列表 输出语句 PRINT “提示文字”;变量列表 赋值语句 变量=表达式 2、条件结构常用的程序语言和格式 (1) IF 条件成立 THEN 语句1 ELSE 语句2 END IF (2) IF 条件成立 THEN 语句 END IF
直到型循环结构(反复执行循环体直到条件满足) 当型循环结构(当条件满足时反复执行循环体) 算法中的循环结构是由循环语句来实现的 . 循环结构有两种-----当型与直到型. 直到型循环结构(反复执行循环体直到条件满足) 当型循环结构(当条件满足时反复执行循环体) 循环体 是 否 满足条件? 满足条件? 循环体 是 否 对应于程序框图中的两种循环结构,一般程序设计语言中也有当型(WHILE型)和直到型(UNTIL型)两种语句结构。
即WHILE语句和UNTIL语句。 (1)WHILE语句的一般格式是: WHILE 条件 循环体 WEND WHILE——当…… 时候 WEND——朝……方向 行走 其中循环体是由计算机反复执行的一组语句构成的。WHLIE后面的“条件”是用于控制计算机执行循环体或跳出循环体的。
(1)WHILE语句的一般格式是 WHILE 条件 循环体 WEND 当计算机遇到WHILE语句时, 先判断条件的真假,如果条件 符合,就执行WHILE与WEND之间的循环体;然后再检查上述条件,如果条件仍符合,再次执行循环体,这个过程反复进行,直到某一次条件不符合为止.这时,计算机将不执行循环体,直接跳到WEND语句后,接着执行WEND之后的语句. 满足条件? 循环体 是 否 当型循环结构
LOOP UNTIL——绕环回线走,直到达到某种 条件为止 循环体 是 否 满足条件? 直到型循环结构 (2)UNTIL语句的一般格式是: DO 循环体 LOOP UNTIL 条件 DO——做什么 LOOP UNTIL——绕环回线走,直到达到某种 条件为止 思考:参照其直到型循环结构对应的程序框图,说说 计算机是按怎样的顺序执行UNTIL语句的?
从UNTIL型循环结构分析,计算机执行该语句时,先 执行一次循环体,然后进行条件的判断,如果条件不 是 否 满足条件? 直到型循环结构 (2)UNTIL语句的一般格式是: DO 循环体 LOOP UNTIL 条件 从UNTIL型循环结构分析,计算机执行该语句时,先 执行一次循环体,然后进行条件的判断,如果条件不 满足,继续返回执行循环体,然后再进行条件的判断, 这个过程反复进行,直到某一次条件满足时,不再执 行循环体,跳到LOOP UNTIL语句后执行其他语句, 是先执行循环体后进行条件判断的循环语句.
WHILE语句的一般格式 WHILE 条件 循环体 WEND UNTIL语句的一般格式 DO 循环体 LOOP UNTIL 条件 提问:通过对照,大家觉得WHILE型语句与UNTIL型 语句之间有什么区别呢? 区别:在WHILE语句中,是当条件满足时执行循环 体,而在UNTIL语句中,是当条件不满足时执行循环 体。
例1.编写程序, 计算自然数1+2+3+…+99+100的和. 分析:这是一个累加问题.我们可以用WHILE型语句,也可以用UNTIL型语句。
当型循环结构 WHILE语句 i=1 S=0 WHLIE i<=100 S=S+i i=i+1 WEND PRINT S END 开始 结束 i=1 S=0 i=i+1 S=S+i 输出S i≤100? 是 否 当型循环结构 WHILE语句 i=1 S=0 WHLIE i<=100 S=S+i i=i+1 WEND PRINT S END
直到型 UNTIL语句 i=1 S=0 DO S=S+i i=i+1 LOOP UNTIL i>100 PRINT S END 开始 结束 i=1 S=0 i=i+1 S=S+i 输出S i>100? 否 是 直到型 UNTIL语句 i=1 S=0 DO S=S+i i=i+1 LOOP UNTIL i>100 PRINT S END
变式训练(1): 编写程序求:n!=1×2×3×4×5×……×n的值. WHILE语句 如何修改? INPUT “n=”;n i=1 S=0 开始 i=1 S=0 i≤100? 是 S=S+i i=i+1 否 输出S 结束 当型循环结构 如何修改? INPUT “n=”;n 输入n i=1 S=0 S=1 S=1 WHLIE i<=100 n S=S+i S=S*i i=i+1 S=S*i WEND i≤n? PRINT S END
变式训练(2): 编写程序求:1×3×5×7×……×101的值. 如何修改? UNITL语句 i=1 S=0 DO S=S*i S=S+i 直到型 如何修改? UNITL语句 是 开始 结束 i=1 S=0 i=i+1 S=S+i 输出S i>100? 否 i=1 S=0 S=1 S=1 DO S=S*i S=S*i S=S+i i=i+2 i=i+1 i=i+2 i>101? LOOP UNTIL i>100 101 PRINT S END
图1.1-20二分法求根的算法和程序 例2 开始 f(x)=x2-2 否 是 b=m a=m 否 是 f(a) f(m)>0? 输入误差ε 和初值a,b 否 f(a) f(m)>0? 是 b=m a=m 否 |a-b|<ε或f(m)=0? 是 输出m 结束
例2 图1.1-20二分法求根的算法和程序 a=1 b=2 e=0.005 DO m=(a+b)/2 f=m^2-2 g=a^2-2 IF g*f>0 THEN a=m ELSE b=m END IF LOOP UNTIL ABS(a-b)<e OR f=0 PRINT m END
分析:仔细观察,该程序框图中既有条件结构,又有循环结构。 例3:根据图1.1-2,将程序框图转化为程序语句. 分析:仔细观察,该程序框图中既有条件结构,又有循环结构。 INPUT “n=”;n i=2 DO r=n MOD i i=i+1 LOOP UNTIL i>=n OR r=0 IF r=0 THEN PRINT n,“ is not a prime number.” ELSE PRINT n,“ is a prime number.” END IF END 程序
练习1:根据下面的程序语句画出对应的程序框图,并分析程序的结果。 (1) s=0 i=2 WHILE i<=18 s=s+i i=i+3 WEND PRINT “s=”;s END (2) i=1 sum=0 m=1 DO m=m*i sum=sum+m i=i+1 LOOP UNTIL i>10 PRINT sum END
2、设计一个算法框图:逐个输出12,22,32,……,n2,并写出相应的QBASIC程序。 结束 i=0 开始 i = i+1 : t=i^2 i>=n? 否 是 PRINT t INPUT n INPUT n i = 0 WHILE i < n i = i + 1 t = i ^ 2 PRINT t WEND END INPUT n i = 0 DO i = i + 1 t = i ^ 2 PRINT t LOOP UNTIL i > = n END
3、设计一个算法框图:求满足1+2 + 3 + … + n>10000的最小正整数n,并写出相应的QBASIC程序。 结束 输出i i=0,Sum=1 开始 i = i + 1 Sum=Sum+i Sum>10000? 否 是 i = 0 sum = 0 DO i = i + 1 sum = sum + i LOOP UNTIL sum>10000 PRINT i END
小 结 两种循环语句: WHILE 条件 循环体 WEND DO 循环体 LOOP UNTIL 条件 循环体 满足条件? 小 结 两种循环语句: 循环体 满足条件? 是 否 (1) While(当型)循环 (2)Until(直到型)循环 WHILE 条件 循环体 WEND DO 循环体 LOOP UNTIL 条件