




已阅读5页,还剩58页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
下一页 上一页 停止放映 第五章 循环结构的实现 5.1 GOTO语句实现循环 GOTO语句的一般形式为:GOTO (语句标号) 在一个基本结构内部可以使用GOTO语句。 如果在逻辑IF语句中使用GOTO语句就可以实现有条件的 循环,循环操作能够在一定条件下结束。 在程序中存在两类循环: 无条件的循环:无条件循环是无休止地执行一个程序段, 有条件的循环:有条件的循环是在满足一定条件时才执行循 环。 GOTO语句实现无条件的循环: 1 下一页 上一页 停止放映 FORTRAN程序中有条件的循环的3种循环类型: 1. DO型循环 (用循环语句实现) 2.当型循环 (用DO WHILE语句) 3.直到型循环(用IF语句) 2 下一页 上一页 停止放映 5.2 用DO语句实现循环(循环次数已知的循环) 当需要执行的循环次数为已知时,用DO语句实现循 环比较方便。它的一般形式为: 例如: DO 10 N=1,100,1 T=N/2.0 10 PRINT *,T DO 标号, 循环变量初值式E1 ,终值式E2,增量式 E3 3 下一页 上一页 停止放映 循环变量的初值、终值和步长可以为正或负。初值、终值 可以为零。但步长不应为0,否则循环变量的值永远不会超 过终值,从而陷入死循环。 说明: 循环变量是整型的 例: D0 I1.5,3.6,1.2 循环次数不应该是 INT(3.6-1.51.2)/1.2)2, 而应当先将实型量转化为整型量,即变成相当的循环语句 DO I1,3,1 其循环次数为3次而不是2次。 例:对于D0 k-1,-3,-1 其 循环次数INT(31-1)(1)3次 k按序分别取值为:-1,-2,-3。 如果循环变量的类型和初值、终值和步长的类型不一致, 则按赋值的规则处理,即需先将初值、终值和步长的类型 转化成循环变量的类型,然后进行处理。 4 下一页 上一页 停止放映 循环变量是实型的 例:D0 X0.0,50.0,0.1 理论循环次数INT(50.1/0.1)501 但实际上在许多计算机上它只执行500次循环。原因是实数 在内存中的误差使得增量值不是准确的0.1,由于循环的误差积 累,到执行完500次循环后X的值可能已超过50.0,因而停止执 行循环。 改用整型循环变量时,则循环改写为: D0 I0,500; X=I/10。 例:D0 X1.5,3.6,1.2 它的循环次数应为 INT(3.6-1.51.2)/1.2)2次 X取值分别是1.5,2.7。 由于实型数在运算和存储时有一些误差,因而循环次数的理论 值与实际值之间会有一些差别。所以应该避免使用实型的循环 变量,用整型循环变量计算出的循环次数是绝对准确的。 5 下一页 上一页 停止放映 DO循环的执行过程为: (1)计算表达式E1,E2,E3的值,并将它们转换 成循环变量的类型。 (2)循环变量的初值取E1的值。 (3)循环次数 r=INT(E2-E1+E3)/E3). 如: DO 10 I=2,20,2 r=(20-2+2)/2=10 r为0的情况: E1E2,E30 如:DO 10 K=10,5,2 E1r (7)返回(4) 6 下一页 上一页 停止放映 例: DO 20 I=1,5,2 N=I*I 20 PRINT *,I,N 经计算:r=(5-2+2)/2=3, 各有关变量的值在各次循环 中变化的情况如下表: 终止循环的条件:循环变量的值超过终值。 7 下一页 上一页 停止放映 继续语句(CONTINUE语句) 它是一个可执行语句,但它不产生任何机器 操作。一般把它用做循环的终端语句。 注意: 循环的终端语句不能是GOTO,块IF, ELSE IF,END IF ,STOP等语句。 它的形式为: CONTINUE 8 下一页 上一页 停止放映 循环终端语句 循环终端语句为一般的执行语句。 F90规定:循环终端语句可以是除了GOTO、块IF、 CASE、CYCLE、DO、ELSE、ELSE IF、END IF、 END、END SELECT、EXIT、SELECT CASE、STOP 和RETURN语句以外的任一可执行语句,如打印语句、 赋值语句、输入语句、逻辑IF语句等都可以作为终端语 句。 特殊的循环终端语句是: END DO(常用于无语句标号时) CONTINUE(常用于有语句标号时) 新编写的程序应该尽量使用以END DO结束的块DO构造 。 9 下一页 上一页 停止放映 例1. 一球从100米高度自由落下,每次落地后反 跳回原高度的一半,再落下,求它在第20次着地 时,共经过了多少米? 90 H=100 S=0 DO I=1,20 S=S+H H=H/2.0 END DO WRITE(*,*)S=,S END 0 1 77 H=100 S=0 DO 10 I=1,20 S=S+H H=H/2.0 10 CONTINUE WRITE(*,*)S=,S END 10 下一页 上一页 停止放映 有关DO循环的一些规定 1.循环变量在循环体内不能再被赋值. 例如,下面用法是错误的 : DO K=10,100,2 K=K/2 WRITE(*,*)K END DO 11 下一页 上一页 停止放映 2.循环变量的初值E1,终值E2和增量E3在执行循环体期间 不能改变. 下面用法是错误的. M2=100 DO I=1,M2 M2=50 END DO 3.循环的次数是根据循环变量的初值、终值和步长值 计算出来的,在执行循环体期间是确定不变的 12 下一页 上一页 停止放映 4.可以用转移语句从循环体内转到循环体外,也可以在 循环体内转移,但不允许从循环体外转到循环体内. 例2 判某一数M是否为素数的程序可以写成: READ(*,*)M DO K=2,M-1 IF(MOD(M,K).EQ.0) GOTO 40 END DO WRITE(*,*)M,IS A PRIME NUMBER STOP 40WRITE(*,*)M,IS NOT A PRIME NUMBER END (非正常出口) KM-1 5. 从“非正常出口”转出时, 循环变量保持“当前值”. 从“正常出口”脱离循环时, 循环变量保持它的最后的 值 13 下一页 上一页 停止放映 数值积分 求一个函数f(x)在a,b上的定积 分 a+(i-1)h a+ih a+h 其几何意义是求曲边梯形面积。 近似求小曲边梯形面积常用方法: (1)矩形法 (2)梯形法 (3)辛普生法(用一条小抛物线代替f(x),求小曲边梯形 面积) 14 下一页 上一页 停止放映 底的起点) 求函数例: 15 下一页 上一页 停止放映 源程序: READ(*,*)N,A,B X=A H=(B-A)/N F0=X*X+X+1.0 S=0.0 DO I=1,N SI=F0*H S=S+SI X=X+H F0=X*X+X+1 END DO WRITE(*,*)N,A,B,S END 16 下一页 上一页 停止放映 例 正直角柱体如图所示.已知5组a, b和h,要求分别求 出对应的d. DIMENSION A(5),B(5),H(5),D(5) DIAG(X,Y)=SQRT(X*X+Y*Y) DO 1 I=1,5 1 READ(*,*)A(I),B(I),C(I) DO 2 I=1,5 C=DIAG(A(I),B(I) 2 D(I)=DIAG(C,H(I) WRITE(*,100) 100 FORMAT(9X,A,8X,B,8X,H,8X,D) WRITE(*,110)(A(I),B(I),H(I),D(I),I=1,5 ) 110 FORMAT(5X,4F9.3) END a b h c d 17 下一页 上一页 停止放映 例: 利用公式 ex=1+x/1!+x2/2!+x3/3!+xn/n!+ 计算ex展开式的前20项的近似值。 分析:ex的展开式中第i项是第i-1项乘以x/i的积。 例如: t1 = t0 x/1 (t0=1) t2 = t1 x/2 t3 = t2 x/3 ti = ti-1 x/i 这种表示方式可用循环实现。设t代表每项值的变量,i是循环控制 变量,则下面的语句中,for语句的每一次循环都产生ex展开式中 前n项的t值(除开始一项以外): t=1.0 DO I=1,N t=t*x/i END DO 18 下一页 上一页 停止放映 ex是展开式的各项之和,这种有规律的求和正好可以用循环 来实现。 假设ex代表两项之和的变量,将前面for循环中求出的每一项 t累加起来,可表示为: ex=1.0 t=1.0 DO I=1,N t=t*x/i ex=ex+t END DO 19 下一页 上一页 停止放映 例: 计算多项式y=0.6+3.5x+5.0x2+0.3x3+5.1x4 +2.1x5+x6 在x=1.3时的值 REAL A(6),F DATA A/ 0.6,3.5, 5.0,0.3,5.1,2.1,1.0/ DATA N,X/6,1.3/ TOLY=A(1) F=1.0 DO 10 K=2, N F=F*X 10 TOLY=TOLY+A(K)*F END 20 下一页 上一页 停止放映 循环嵌套的概念和执行过程 一个循环体内又包含另一个完整的循环,称为循环的嵌 套 例1 一个学校有40个班,每班30人. 要求将全校每个学 生的分数累加,并求全校总平均成绩和每班的平均成绩. 21 下一页 上一页 停止放映 AVER1=TOTAL1/(40*30) WRITE AVER1 TOTAL2=0 TOTAL1=0 DO 10 I=1,40 DO 20 J=1,30 READ G TOTAL2=TOTAL2+G AVER2=TOTAL2/30 WRITE I,AVER2 TOTAL1=TOTAL1+TOTAL2 DO J=1,30 READ(*,*)G TOTAL2=TOTAL2+G END DO AVER2=TOTAL2/30 WRITE(*,*)I,AVER2 TOTAL1=TOTAL1+TOTAL2 TOTAL2=0 TOTAL1=0 AVER1=TOTAL1/(40*30) WRITE(*,*)ALL:,AVER1 END DO I=1, 40 END DO 22 下一页 上一页 停止放映 例: 打印九九表的程序 说明: 1. 外循环执行9次,内循环执行了9*9=81次 2. 外循环变量(I)比内循环变量(K)变化慢 1*1=1 1*2=2 。1*9=9 2*1=2 2*2=4 。2*9=18 。 。 。 9*1=9 9*2=18 。9*9=81 DO I=1,9 END DO DO K=1,9 L=I*K END DO END 100 FORMAT(9(1X,I2,*,I2,=,I2) PRINT 100,I,K,L 23 下一页 上一页 停止放映 二重循环的执行过程: 3.遇内循环的DO语句,计算出内循环应执行次数r2, 使内 循环变量取初值. 2.如果r10,执行外循环体(顺序执行外循环体中的执 行语句).如果r1=0,则结束循环的执行. 1.先计算出外循环的循环体应执行的次数r1,外循环变 量取初值. 4.如果r20,执行内循环体各语句,直到内循环的终端语 句.如此共执行内循环体r2次, 然后从正常出口脱离内循环 .此时, r2=0. 5.接着执行外循环体中其它执行语句,直到外循环的终端 语句. 6. 外循环变量增值, r1-1=r1. 返回2. 应注意:(1) 循环次数.(2)内外循环变量值的变化. 24 下一页 上一页 停止放映 有关循环嵌套的规定 1. 各种循环都可以互相嵌套.例如两个DO循环可以嵌套成 为双重循环, 一个当型循环和一个DO循环也可以嵌套. 无论 哪种循环的嵌套,内循环都必须完整地出现在外循环体内. I=1 5IF (I.LE.N) THEN DO J=1,I PRINT *,J END DO PRINT * I=I+1 GOTO 5 ENDIF DO 10 I=1,N DO 20 J=1,M PRINT *,I,J 10CONTINUE 20CONTINUE 如 : 25 下一页 上一页 停止放映 2. 并列的循环可以用一个变量名作循环变量,而嵌套 的循环不能用同一变量名作循环变量。 DO k=1,5 DO k=1,10 END DO END DO DO I=1,5 END DO DO I=1,10 END DO 3. 嵌套的DO循环可以共用一个终端语句. 如 : 4. 可以从内循环体转到外循环体或外循环之外,反之不行 5.除了循环的嵌套以外, DO循环和块IF连用时应注意:如果 在IF块等中包含DO循环,则该循环必须完整地包含在上述一 个块中.如果DO循环中包含一个块IF语句,也应完全包含. 26 下一页 上一页 停止放映 *循环嵌套中循环控制变量的选择 例: 求下式之和 ISUM=0 DO I=1,20 DO J=1,3 ISUM=ISUM+(I+1)*2*(J+2) END DO PRINT *,ISUM END DO END 问题:I与J那个做外循环好 DO J=1,3 K=J+2 DO I=1,20 ISUM=ISUM+K*(I+1)*(I+1) END DO END DO 1. I赋初值1次,判断循环是否终了20次,为J赋初值20*1次, 判断是否终了为20*3次,总共101次. 若I,J位置互换: 2.J赋初值1次,判断终了3次,给内层I赋初值3*1次,判断终了 3*20次,总共67次 3.j+2共计算20*3=60次,若将其搬到内循环外,就减少了57次 27 下一页 上一页 停止放映 多重循环遵守的原则: 1. 变化范围大的循环变量要放在内层循环 2. 尽量减少内循环中的运算,凡与循环无关的运算均移到 循环体外 28 下一页 上一页 停止放映 例:求方程I3+J3+K3=3的全部解 其中I为-5,11,J为-10,9,K为-6,18 程序举例 N=0 DO I=-5,11 ICUB=I*3 END DO END DO K=-6,18 IF (ICUB+JCUB+KCUB.EQ.3) THEN N=N+1 PRINT *,N,I,J,K ENDIF END DO KCUB=K*3 DO J=-10,9 JCUB=J*3 END DO 29 下一页 上一页 停止放映 补充:百鸡问题。公鸡每只5元, 母鸡3元, 小鸡一元3只 .100元买100只鸡. INTEGER X,Y,Z DO X=1,20 DO Y=1,33 DO Z=1,99,3 IF (X+Y+Z.EQ.100) THEN IF (5*X+3*Y+Z/3.EQ.100) THEN PRINT *, X, Y, Z ENDIF ENDIF END DO END DO END DO END 30 下一页 上一页 停止放映 INTEGER X,Y,Z DO X=1,20 DO Y=1,33 z=100-x-y IF (5*X+3*Y+Z/3.EQ.100) THEN PRINT *, X, Y, Z ENDIF END DO END DO END 优化后: 31 下一页 上一页 停止放映 例2 求100到200之间的全部素数。 LOGICAL L DO M=101,200,2 10 IF (K.LE.SQRT(M).AND.L) THEN IF (MOD(M,K).EQ.0) L=.FALSE. K=K+1 GOTO 10 ENDIF IF(L) WRITE(*,*)M,IS A PRIME NUMBER END DO END L=.TRUE. K=2 32 下一页 上一页 停止放映 5.3当型循环的实现(循环次数未知) 一般形式: DO 标号, WHILE 逻辑表达式 当逻辑表达式 的值为“真”时,反复执行循环体。 当逻辑表达式 的值为“假”时,结束循环。 33 下一页 上一页 停止放映 【例】利用辗转相除法,求两个正整数的最大公约数 求M和N的最大公约数算法:算法: 若N=0=0,则M为最大公约数 若N!=0!=0 将M 除以N,余数为R M=N=N;N=R=R 转 即欧几里德算法:gcd(i,j)=gcd(j,i %j)。 例:求42和24的最大公约数 gcd(42,24)=gcd(24,42%24)=gcd(24,18)=gcd(18,6)=gcd(6,0) 42和24的最大公约数是6。 34 下一页 上一页 停止放映 INTEGER M,N,R READ *, M,N DO 10 WHILE(N.NE.0) R=MOD(M,N) M=N N=R 10 CONTINUE PRINT * , THE GREATEST COMMON DIVISOR IS,M END 12 18 THE GREATEST COMMON DIVISOR IS 6 例:例: MM N N R R 121218181212 18181212 6 6 1212 6 6 0 0 6 6 0 0 ( (退出循环退出循环) ) 35 下一页 上一页 停止放映 F90的DO WHILE语句 在F90增强的功能中,增加了DO WHILE语句以支持当型 循环。因此,DO构造不仅仅能完成循环次数已知的循环 ,而且能够完成此数未知的循环。 例: do while (input.ne.n).and.(input.ne.y) write(*,(a) Enter y or n:;read(*,(a) input end do 它的一般形式为: 构造名 DO WHILE (逻辑表达式) DO WHILE语句的规则和块IF语句所需满足的的块规则类似。 36 下一页 上一页 停止放映 例:对一个大于或等于3的正整数,判断它是不是一个素 数。 read *, n j=int(sqrt(n*1.);i=2 do while ( ) i=i+1 end do if(ierr) .and. (kg(x0)=x1=g(x1)=x2=g(x2)=.g(x4)=x5 . 直到前后两次求出的x值很接近, 即 这时 就是所求的近似值 用迭代法求一元方程f(x)的根,其基本方法如下: 48 下一页 上一页 停止放映 read(*,*) x,m do 20 i=1,m,1 10 x1=(-x*3-2.0*x*x-1.0)/2.0 write(*,100)i,x1 if (abs(x-x1).ge.1e-6) then x=x1 else stop end if 20 continue print *,comput hast converged 100 format(1x,sqrt(,i2,)=,f12.5) end 例 用迭代法求方程f(x)=x3 +2x2 +2x+1=0的一个解,直到满 足: 改写为:x=g(x)形式 X=(- x3 -2x2 -1) / 2 49 下一页 上一页 停止放映 Y=f(x) x y O 牛顿迭代公式为: 在几何意义上: 所以 二、牛顿迭代法 50 下一页 上一页 停止放映 已知: 求出: READ(*,*)X N=1 10 X1=X F=X1*3-6*X1-1 F1=3*X1*X1-6 X=X1-F/F1 WRITE(*,100)N,X1,X N=N+1 IF (ABS(X-X1).GT.1E-6) GOTO 10 100 FORMAT(1X,N=,I3,5X,X1=,F13.8,5X,X=,F13.8) END 读X N=1 X1=X 打印N,X1,X X=X1-F/F1 N=N+1 直到 例 用牛顿迭代法求方程f(x)=x3 -6x-1=0在2.5附 近的一个实根,直到满足: 51 下一页 上一页 停止放映 三、弦截法 弦截法的算法思想如下: (1) 先取两个不同的点x1和x2,需使f(x1)和f(x2)的符号相 反,否则,重新取x1和x2。但x1与x2相差不宜太大,以免在 (x1,x2)区间出现多根。 (2)连接f(x1)与f(x2)得一弦线交x轴于x,可求得x点的坐标 为:x=x1*(f(x2)-x2*f(x1)/(f(x2)-f(x1)将x代入方程可 求出f(x)。 (3)判别f(x)与f(x1),若符号相同,则根在(x,x2)区间内 ,可将x作为新的x1;若符号相异,则根在(x1,x)区间内, 可将x作为新的x2。 (4)重复上述(2)、(3)步骤,直到|f(x)|=0) goto 10 20 x=x1*(f2-x2*f1)/(f2-f1) y=(x-2.0)*x+8.0)*x-16.0 if(y*y10)then y1=y x1=x else x2=x y2=y end if if (abs(y).gt.1E-6) goto 20 Print*,The root of equation is:,x end 例:用弦截法求方程 x3 -2x2 +8x-16=0 的近似根。 54 下一页 上一页 停止放映 5.5无循环变量的DO构造 一般形式: 构造名: DO 块 END DO 注意:对于不带控制变量的DO构造,DO块中必须有EXIT 语句,使它停止循环,否则循环将无休无止地一直进行下 去,形成死循环。 55 下一页 上一页 停止放映 DO构造也可在自身中再嵌DO构造,例如: FIRST: DO 块1的第一部分 SECOND: DO 块2 END DO SECOND 块1的第二部分 END DO FIRST 56 下一页 上一页 停止放映 EXIT语句 EXIT语句的作用是停止循环,使控制退出循环结构,因 此又称出口语句。 它的一般形式是:EXIT DO构造名 执行EXIT语句,其功能是导致循环终止。 注意:1 如果语句引用了DO构造名,则它属于该构造 ,否则属于它所出现的最内层DO构造。 2对于多层嵌套的DO构造,尤为需要指明是从哪一 个构造名的DO构造中退出。如当EXIT指明从第三层结构 退出,则第三层与第三层内各层嵌套的DO构造都将被停 止执行。 3通常将EXIT语句与IF语句结合使用,即在DO构造 内使用:IF(逻辑表达式) EXIT。当逻辑表达式为真时, EXIT语句被执行,循环终止,否则循环将继续进行。 57 下一页 上一页 停止放映 例如: implicit none integer i,j real y, term y=0 xx: do j=1,1000 ww: do i=1,1000 term=1./(i*(i+1) y=y+term if(abs(term)=1.e-5) exit xx end do ww print *,“ok“ end do xx print *, sum,y, term=,i ,j end 58 下一页 上一页 停止放映 implicit none integer : i,n real : y=0, term read *, n do i=1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年中考化学试题分类汇编:科学探究题(第2期)解析版
- 1 丰富的数据世界教学设计-2025-2026学年初中数学北师大版2024七年级上册-北师大版2024
- 1秋天 教学设计-2024-2025学年语文一年级上册(统编版)
- 2025年天津市河西区中考一模物理试题(解析版)
- 小学语文一遍过单元测试卷(3篇)
- 第一章有理数-单元测试卷-2025-2026学年人教版数学
- 2025年全国汽车驾驶员(技师)职业技能考试题库(含答案)
- 本册综合教学设计-2025-2026学年中职语文拓展模块语文版
- 2025年高考数学二模试题分类汇编(辽宁专用)立体几何与空间向量(解析版)
- 2025年食品企业生产工安全生产知识考试试题及答案
- 设备购销合同详细范本
- 加装电梯补偿协议书范文模板
- 远古帝王世系表
- DZ∕T 0211-2020 矿产地质勘查规范 重晶石、毒重石、萤石、硼(正式版)
- 国家基层糖尿病神经病变诊治指南(2024版)
- 人体常见病 知到智慧树网课答案
- 2024骨髓移植患者营养治疗专家共识(全文)
- HGT 3652-1999(2009) 快装管接头标准规范
- 如何正确使用和佩戴劳动防护用品培训课件
- (高清版)DZT 0017-2023 工程地质钻探规程
- 《应收应付管理》课件
评论
0/150
提交评论