450 likes | 597 Views
第 四 章 循环结构程序设计. 第一节 基本的循环类型. 循环类型 循环次数已知。 在程序中直接控制循环次数。 如 FOR 循环。 循环次数未知。 由结束条件判定。 如 WHILE 和 DO 循环。 循环程序的基本结构 初始化。给出进入循环的初值 循环体。 循环控制机制。是循环还是结束. 第二节 FOR 循环. 格式 FOR 循环变量 = 循环初值 TO 终值 [STEP 步长 ] 循环体 NEXT 循环变量 例: for I=1 to 4 print I next I
E N D
第一节 基本的循环类型 • 循环类型 • 循环次数已知。 • 在程序中直接控制循环次数。 如FOR循环。 • 循环次数未知。 • 由结束条件判定。 如WHILE和DO循环。 • 循环程序的基本结构 • 初始化。给出进入循环的初值 • 循环体。 • 循环控制机制。是循环还是结束
第二节 FOR循环 • 格式 FOR 循环变量=循环初值 TO 终值 [STEP 步长] 循环体 NEXT 循环变量 例:for I=1 to 4 print I next I end 循环次数为 4
FOR-NEXT使用说明 • 当循环变量在循环体内不发生改变时,循环次数为 int((终值-初值)/步长)+1 • 循环变量 • 数值型变量 • 尽可能为整型 • 步长 • 可正可负 • 为零时,死循环 • 为1时,是默认值,可省略
执行NEXT时先给循环变量增加一个步长,然后判断其是否超过终值 例 • 不能从其它入口进入循环,但可以从循环体中跳出循环 例 • 尽量不要使循环变量在循环体内发生变化,否则循环次数会发生变化 例 • 循环变量尽量为整型,否则会出现误差 • QB6-1 • 改进:用整型变量或将终值+小数(小于步长) • QB6-2
例 累计1+2+3+……+100 Sum=0 for i=1 to 100 sum=sum+i print i,sum next i end Sum=0 当i=1 to 100 Sum=sum+i 输出i, sum
求n! • 例4! 4!=1*2*3*4 设P=1 1! : p=p*1 2! : p=p*2 3! : p=p*3 4! : p=p*4 I=1 to 4 QB6-3
求n个数的乘积 • 循环次数为n • 循环体 • 输入具体的n个数 • 计算 QB6-4
输出斐波那契数列的前20项(1) 1 1 2 3 5 第一次 f1 f2 f3=f1+f2 第二次 f1 f2 f3 第三次 f1 f2 f3
F1=1 F2=1 Print f1 , f2 , For I%=3 to 20 f3=f1+f2 print f3 , f1=f2 f2=f3 Next I% Print : end
输出斐波那契数列的前20项(2) 1 1 2 3 5 8 第一次 f1 f2 第二次 f1=f1+f2 f2=f2+f1 第三次 f1=f1+f2 f2=
F1=1 : f2=1 For I%=1 to 10 print f1, f2 f1=f1+f2 f2=f2+f1 Next I% Print End
给一个整数,判断它是否为素数 输入 n • 如判断12是否为素数 12=3*4 12=2*6 • 如果12能被2~ 12^(1/2)整除,则12不是素数 • 设标志flag=1表示整数n未被任何一个整数整除过,否则flag=0 • 根据flag的值可知n是否为素数 QB6-5 m=int(sqr(n)), flag=1 For I=2 to m n能被I整除 Y N Flag=0 结束循环 Flag=1 Y N n是素数 n不是素数
IF FLAG = 1 THEN PRINT n; "is a prime number." ELSE PRINT n; "is not a prime number." END IF END INPUT "N="; n M = INT(SQR(n)) FLAG = 1 FOR I% = 2 TO M IF n MOD I% = 0 THEN FLAG = 0 I% = n END IF NEXT I%
第三节 WHILE 循环结构 • 格式 WHILE 条件 循环体 WEND • 条件为真时执行循环体,否则执行WEND的下一语句 • 应创造进入循环的初始条件 • 在循环体内(一般为最后一条语句)应使条件向“假”变化
求1+2+…+5 S=0 I=1 While I<=5 s=s+I I=I+1 Wend Print s end
如果我国工业生产总值每年以8%的速度增长,问多少年后产值会翻一番如果我国工业生产总值每年以8%的速度增长,问多少年后产值会翻一番 设基值为p=100 P=100 : r=.08 N=0 While p<200 p=p*(1+r) n=n+1 Wend Print n;“years” , “p=”;p end
输入n 例 m=int(sqr(n)) ,I=2 ,flag=1 给一个整数,判断它是否为素数 当I<=m且flag=1 n能被I整除 Y N 进入循环的初始条件是: I=2, flag=1 结束标志: flag=0 Flag=0 I=I+1 Flag=1 Y N n不是素数 n是素数 QB6-6
INPUT "N="; N M = INT(SQR(N)) I = 2: FLAG = 1 WHILE I <= M AND FLAG = 1 IF N MOD I = 0 THEN FLAG = 0 ELSE I = I + 1 WEND IF FLAG = 1 THEN PRINT N; "IS" ELSE PRINT N; "IS NOT" END
有若干名学生QBASIC期中考试成绩分别为96,78,66,87,求他们的平均成绩有若干名学生QBASIC期中考试成绩分别为96,78,66,87,求他们的平均成绩 Sum=0, n=0 Sum=0:n=0 read x while x<>-1 sum=sum+x n=n+1:read x wend aver=int(sum/n*10+.5)/10 print “average=“;aver data 96,78,66,87 end Read x While x<>-1 Sum=sum+x N=n+1 Read x 求aver 输出 aver
DO循环结构 • 格式1 DO WHILE 条件 循环体 LOOP • 格式2 DO 循环体 LOOP WHILE 条件 当条件为真 循环体 当条件为真
DO循环结构 直到条件满足 • 格式3 DO UNTIL 条件 循环体 LOOP • 格式4 DO 循环体 LOOP UNTIL <条件> 当条件为真
用当型循环实现 s=0:n=0 while s<1E8 n=n+1 s=s+n*n wend print n,s end 用先测试直到型实现 s=0:m=0 do until s>=1e8 n=n+1 s=s+n*n loop print n,s end 例 求s=12+22+32+……n2直到s>=108
第五节 循环的嵌套 • 在一个循环体内又完整地包含另一个循,称为循环的嵌套。 • 内外循环不得交叉 • 不允许从外循环转入内循环体,但允许从内循环转到外循环体。 • 每一层循环的循环变量名不能相同 ×
求1!+2!+……+n! • 用单循环 • 输入n • 赋初值 • 阶乘的初值 t=1 • 和的初值s=0 • 确定循环次数 • 次数为n,即I=1 to n • 在循环体内求i的阶乘 • t=t*i, • 在循环体内累加 • s=s+t QB6-7,QB6-8
CLS INPUT n s = 0: t = 1: i = 1 WHILE i <= n t = t * i s = s + t i = i + 1 WEND PRINT t, s END CLS INPUT n s = 0: t = 1 FOR i = 1 TO n t = t * i s = s + t NEXT i PRINT t, s END
注意初值的位置 • 用双重循环 • 输入n • 外循环求和 • 和的初值为s=0 • 循环次数为I=1 to n • s=s+t • 内循环求一个数i的阶乘t • 阶乘的初值为1 • 循环次数为j=1 to I • t=t*j QB6-9
CLS INPUT n s = 0 FOR i = 1 TO n t = 1 FOR j = 1 TO i t = t * j NEXT j s = s + t NEXT i PRINT s END
统计五个班级各班的平均成绩,打印出学生人数和平均成绩统计五个班级各班的平均成绩,打印出学生人数和平均成绩 • 用双重循环 • 内循环求每个班的总成绩 • 循环次数未知,所以用WHILE循环 • 和的初值s=0 • 人数的初值n=0 • 结束标志x=-1 • 外循环求每个班的平均值并输出 • 循环次数为5 QB6-10 QB6-11
CLS FOR CLASS = 1 TO 5 S = 0: N = 0 READ X WHILE X <> -1 S = S + X N = N + 1 READ X WEND AVER = INT(S / N * 10 + .5) / 10 PRINT CLASS, N, AVER NEXT CLASS QB6-10 DATA 66,79,57,90,88,100,95,73,62,85,-1 DATA 60,85,72,99,81,55,76,65,-1 DATA 75,63,98,79,82,87,95,60,73,77,-1 DATA 82,85,94,76,61,48,65,74,62,-1 DATA 97,92,63,86,71,88,64,73,60,-1 END
打印出100以内的素数 • 外循环 • 给出2~100自然数n • 内循环 • 判断n是否为素数,如果是则输出 • 框架 for n=2 to 100 m=int(sqr(n)) 判断n是否能被2~m的数整除 是,输出n next n
找出所有的水仙花数 For I=100 to 999 a=int(I/100) b=int((I-a*100)/10 c=I-a*100-b*10 if a*a+b*b+c*c=I then print I Next I End
Rnd(x)的应用 • 10*rnd (0,10) • 100*rnd (0,100) • Int(100*rnd) [0,99] • Int(101*rnd) [0,100] • Int(90*rnd)+10 [10,99] • Int(21*rnd)-10 [-10,10]
算术练习程序 (1) For I=1 to 10 a=int(90*rnd)+10 b=int(90*rnd)+10 print a; “+”;b; “=”; input c if c=a+b then print “Good!”:s=s+10 else print “wrong!” Next I Print “score is”;s end
else if c=-1 then print “End” else print “Wrong! Try” Loop until c=a+b or c=-1 Loop until c=-1 Randomize timer() Do a=int(90*rnd)+10 b=int(90*rnd)+10 do print a; “+”;b “=”; input c if c=a+b then print “Good!” 算术练习程序 (2)
编制程序打印图形 • 一般实心图形用双重循环 • 外循环 • 行数就是循环的次数FOR I • 确定每行图形的起始位置(与I有关系) • 结束内循环后换行(外循环的最后一条语句) • 内循环 • 每行的输出个数就是循环次数FOR J • 一般J与I或每行的起始位置有一定的关系 • 输出第J行的图形
变换 打印如下图形 • 外循环 • for i=1 to 5 • 每行的起始位置 tab(20-I) • 内循环 • for j=1 to 2*i-1 • 连续输出“*” * *** ***** ******* ********* QB6-12
CLS FOR I = 1 TO 5 PRINT TAB(20 - I); FOR J = 1 TO 2 * I - 1 PRINT "*“ ; NEXT J PRINT NEXT I END
打印如下图形 • 外循环 • for I=1 to 5 • 起始位置 • p=abs(3-I) • print tab(20-p) • 内循环 • 每行打印个数 • for j=1 to 2+2p ****** **** ** **** ****** qb6-13
CLS FOR i = 1 TO 5 p = ABS(3 - i) PRINT TAB(20 - p); FOR j = 1 TO 2 + 2 * p PRINT "*"; NEXT j PRINT NEXT i END
用泰勒多项式求SIN X的近似值 • 输入n,x • 外循环的初值为y=0 • 外循环求和I=1 to n • y=y+x^(2i-1)/t • 给出内循环的初值t=1 • 内循环求I的阶乘t • 输出y QB6-14、 QB6-15
INPUT "N,X="; N, x y = 0 FOR i = 1 TO N t = 1 FOR J = 1 TO 2 * i - 1 t = t * J NEXT J y = y + (-1) ^ (i + 1) * x ^ (2 * i - 1) / t NEXT i PRINT "sin"; x; "="; y END QB6-14
INPUT "N,X="; N, X Y = 0 SIGN = 1 FOR I = 1 TO N P = 1 T = 1 FOR J = 1 TO 2 * I - 1 P = P * X T = T * J NEXT J Y = Y + SIGN * P / T SIGN = -SIGN NEXT I PRINT "SIN"; X; "="; Y END
第六节 有关循环的算法 • 递推法 • 根据前面的结果推出后面的结果 • 如求阶乘、求e、求SIN X等 • 猴子吃桃问题(自学) • 穷举法 • 将所有可能的方案都一一拿出来测试,找出其中符合要求的方案 • 如打印100以内的素数 • 百钱买百鸡问题(自学)
本章小结 1.FOR循环 2.WHILE循环 3.DO循环 4.循环中的算法 • 131页 1~4, 6~10 , 18 习题