1 / 45

第 四 章 循环结构程序设计

第 四 章 循环结构程序设计. 第一节 基本的循环类型. 循环类型 循环次数已知。 在程序中直接控制循环次数。 如 FOR 循环。 循环次数未知。 由结束条件判定。 如 WHILE 和 DO 循环。 循环程序的基本结构 初始化。给出进入循环的初值 循环体。 循环控制机制。是循环还是结束. 第二节 FOR 循环. 格式 FOR 循环变量 = 循环初值 TO 终值 [STEP 步长 ] 循环体 NEXT 循环变量 例: for I=1 to 4 print I next I

jatin
Download Presentation

第 四 章 循环结构程序设计

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第四章 循环结构程序设计

  2. 第一节 基本的循环类型 • 循环类型 • 循环次数已知。 • 在程序中直接控制循环次数。 如FOR循环。 • 循环次数未知。 • 由结束条件判定。 如WHILE和DO循环。 • 循环程序的基本结构 • 初始化。给出进入循环的初值 • 循环体。 • 循环控制机制。是循环还是结束

  3. 第二节 FOR循环 • 格式 FOR 循环变量=循环初值 TO 终值 [STEP 步长] 循环体 NEXT 循环变量 例:for I=1 to 4 print I next I end 循环次数为 4

  4. FOR-NEXT使用说明 • 当循环变量在循环体内不发生改变时,循环次数为 int((终值-初值)/步长)+1 • 循环变量 • 数值型变量 • 尽可能为整型 • 步长 • 可正可负 • 为零时,死循环 • 为1时,是默认值,可省略

  5. 执行NEXT时先给循环变量增加一个步长,然后判断其是否超过终值 例 • 不能从其它入口进入循环,但可以从循环体中跳出循环 例 • 尽量不要使循环变量在循环体内发生变化,否则循环次数会发生变化 例 • 循环变量尽量为整型,否则会出现误差 • QB6-1 • 改进:用整型变量或将终值+小数(小于步长) • QB6-2

  6. 累计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

  7. 求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

  8. 求n个数的乘积 • 循环次数为n • 循环体 • 输入具体的n个数 • 计算 QB6-4

  9. 输出斐波那契数列的前20项(1) 1 1 2 3 5 第一次 f1 f2 f3=f1+f2 第二次 f1 f2 f3 第三次 f1 f2 f3

  10. 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

  11. 输出斐波那契数列的前20项(2) 1 1 2 3 5 8 第一次 f1 f2 第二次 f1=f1+f2 f2=f2+f1 第三次 f1=f1+f2 f2=

  12. F1=1 : f2=1 For I%=1 to 10 print f1, f2 f1=f1+f2 f2=f2+f1 Next I% Print End

  13. 给一个整数,判断它是否为素数 输入 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不是素数

  14. 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%

  15. 第三节 WHILE 循环结构 • 格式 WHILE 条件 循环体 WEND • 条件为真时执行循环体,否则执行WEND的下一语句 • 应创造进入循环的初始条件 • 在循环体内(一般为最后一条语句)应使条件向“假”变化

  16. 求1+2+…+5 S=0 I=1 While I<=5 s=s+I I=I+1 Wend Print s end

  17. 如果我国工业生产总值每年以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

  18. 输入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

  19. 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

  20. 有若干名学生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

  21. DO循环结构 • 格式1 DO WHILE 条件 循环体 LOOP • 格式2 DO 循环体 LOOP WHILE 条件 当条件为真 循环体 当条件为真

  22. DO循环结构 直到条件满足 • 格式3 DO UNTIL 条件 循环体 LOOP • 格式4 DO 循环体 LOOP UNTIL <条件> 当条件为真

  23. 用当型循环实现 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

  24. 第五节 循环的嵌套 • 在一个循环体内又完整地包含另一个循,称为循环的嵌套。 • 内外循环不得交叉 • 不允许从外循环转入内循环体,但允许从内循环转到外循环体。 • 每一层循环的循环变量名不能相同 ×

  25. 求1!+2!+……+n! • 用单循环 • 输入n • 赋初值 • 阶乘的初值 t=1 • 和的初值s=0 • 确定循环次数 • 次数为n,即I=1 to n • 在循环体内求i的阶乘 • t=t*i, • 在循环体内累加 • s=s+t QB6-7,QB6-8

  26. 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

  27. 注意初值的位置 • 用双重循环 • 输入n • 外循环求和 • 和的初值为s=0 • 循环次数为I=1 to n • s=s+t • 内循环求一个数i的阶乘t • 阶乘的初值为1 • 循环次数为j=1 to I • t=t*j QB6-9

  28. 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

  29. 统计五个班级各班的平均成绩,打印出学生人数和平均成绩统计五个班级各班的平均成绩,打印出学生人数和平均成绩 • 用双重循环 • 内循环求每个班的总成绩 • 循环次数未知,所以用WHILE循环 • 和的初值s=0 • 人数的初值n=0 • 结束标志x=-1 • 外循环求每个班的平均值并输出 • 循环次数为5 QB6-10 QB6-11

  30. 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

  31. 打印出100以内的素数 • 外循环 • 给出2~100自然数n • 内循环 • 判断n是否为素数,如果是则输出 • 框架 for n=2 to 100 m=int(sqr(n)) 判断n是否能被2~m的数整除 是,输出n next n

  32. 找出所有的水仙花数 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

  33. 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]

  34. 算术练习程序 (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

  35. 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)

  36. 编制程序打印图形 • 一般实心图形用双重循环 • 外循环 • 行数就是循环的次数FOR I • 确定每行图形的起始位置(与I有关系) • 结束内循环后换行(外循环的最后一条语句) • 内循环 • 每行的输出个数就是循环次数FOR J • 一般J与I或每行的起始位置有一定的关系 • 输出第J行的图形

  37. 变换 打印如下图形 • 外循环 • for i=1 to 5 • 每行的起始位置 tab(20-I) • 内循环 • for j=1 to 2*i-1 • 连续输出“*” * *** ***** ******* ********* QB6-12

  38. CLS FOR I = 1 TO 5 PRINT TAB(20 - I); FOR J = 1 TO 2 * I - 1 PRINT "*“ ; NEXT J PRINT NEXT I END

  39. 打印如下图形 • 外循环 • for I=1 to 5 • 起始位置 • p=abs(3-I) • print tab(20-p) • 内循环 • 每行打印个数 • for j=1 to 2+2p ****** **** ** **** ****** qb6-13

  40. 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

  41. 用泰勒多项式求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

  42. 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

  43. 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

  44. 第六节 有关循环的算法 • 递推法 • 根据前面的结果推出后面的结果 • 如求阶乘、求e、求SIN X等 • 猴子吃桃问题(自学) • 穷举法 • 将所有可能的方案都一一拿出来测试,找出其中符合要求的方案 • 如打印100以内的素数 • 百钱买百鸡问题(自学)

  45. 本章小结 1.FOR循环 2.WHILE循环 3.DO循环 4.循环中的算法 • 131页 1~4, 6~10 , 18 习题

More Related