fortran第5章(循环).ppt

上传人:M****1 文档编号:572672958 上传时间:2024-08-13 格式:PPT 页数:63 大小:647KB
返回 下载 相关 举报
fortran第5章(循环).ppt_第1页
第1页 / 共63页
fortran第5章(循环).ppt_第2页
第2页 / 共63页
fortran第5章(循环).ppt_第3页
第3页 / 共63页
fortran第5章(循环).ppt_第4页
第4页 / 共63页
fortran第5章(循环).ppt_第5页
第5页 / 共63页
点击查看更多>>
资源描述

《fortran第5章(循环).ppt》由会员分享,可在线阅读,更多相关《fortran第5章(循环).ppt(63页珍藏版)》请在金锄头文库上搜索。

1、下一页上一页停止放映第五章 循环结构的实现5.1GOTO语句实现循环语句实现循环GOTO语句的一般形式为:语句的一般形式为:GOTO (语句标号语句标号) 在一个基本结构内部可以使用在一个基本结构内部可以使用GOTO语句。语句。 如果在逻辑如果在逻辑IF语句中使用语句中使用GOTO语句就可以实现有条件的语句就可以实现有条件的循环,循环操作能够在一定条件下结束。循环,循环操作能够在一定条件下结束。 在程序中存在两类循环:在程序中存在两类循环:无条件的循环无条件的循环:无条件循环是无休止地执行一个程序段,无条件循环是无休止地执行一个程序段,有有条条件件的的循循环环:有有条条件件的的循循环环是是在在

2、满满足足一一定定条条件件时时才才执执行行循循环。环。GOTO语句实现无条件的循环语句实现无条件的循环:1 1下一页上一页停止放映 FORTRAN程序中有条件的循环的程序中有条件的循环的3种循环类型种循环类型: 1. DO型循环型循环 (用循环语句实现用循环语句实现) 2.当型循环当型循环 (用(用DO WHILE语句)语句) 3.直到型循环直到型循环(用(用IF语句)语句)2 2下一页上一页停止放映5.2用用DO语句实现循环语句实现循环(循环次数已知的循环)循环次数已知的循环)当需要执行的当需要执行的循环次数为已知循环次数为已知时,用时,用DO语句实现循语句实现循环比较方便。它的一般形式为:环

3、比较方便。它的一般形式为:例如:例如:DO10N=1,100,1T=N/2.010PRINT*,TDO 标号标号, 循环变量初值式循环变量初值式E1 ,终值式终值式E2,增量式增量式E3 3 3下一页上一页停止放映循循环环变变量量的的初初值值、终终值值和和步步长长可可以以为为正正或或负负。初初值值、终终值值可可以以为为零零。但但步步长长不不应应为为0,否否则则循循环环变变量量的的值值永永远远不不会会超超过终值,从而陷入死循环。过终值,从而陷入死循环。说明:说明:循环变量是整型的循环变量是整型的例:例: D0I1.5,3.6,1.2 循循 环环 次次 数数 不不 应应 该该 是是 INT(3.6

4、-1.5 1.2)/1.2) 2, 而而应应当当先先将将实实型型量量转转化化为为整整型型量量,即即变变成成相相当当的的循循环环语语句句DOI1,3,1其循环次数为其循环次数为3次而不是次而不是2次。次。例:对于例:对于D0 kD0 k-1,-3,-1 -1,-3,-1 其其 循环次数循环次数INT(INT(3 31-1)1-1)( (1)1)3 3次次 k k按序分别取值为:按序分别取值为:-1,-2,-3-1,-2,-3。如果循环变量的类型和初值、终值和步长的类型不一致,如果循环变量的类型和初值、终值和步长的类型不一致,则按赋值的规则处理,即需先将初值、终值和步长的类型则按赋值的规则处理,即

5、需先将初值、终值和步长的类型转化成循环变量的类型,然后进行处理。转化成循环变量的类型,然后进行处理。4 4下一页上一页停止放映循环变量是实型的循环变量是实型的例:例:D0X0.0,50.0,0.1理论循环次数理论循环次数INT(50.1/0.1)501但但实实际际上上在在许许多多计计算算机机上上它它只只执执行行500次次循循环环。原原因因是是实实数数在在内内存存中中的的误误差差使使得得增增量量值值不不是是准准确确的的0.1,由由于于循循环环的的误误差差积积累累,到到执执行行完完500次次循循环环后后X的的值值可可能能已已超超过过50.0,因因而而停停止止执执行循环。行循环。改用整型循环变量时,

6、则循环改写为:改用整型循环变量时,则循环改写为:D0I0,500;X=I/10。例:例:D0X1.5,3.6,1.2它的循环次数应为它的循环次数应为INT(3.6-1.51.2)/1.2)2次次X取值分别是取值分别是1.5,2.7。由由于于实实型型数数在在运运算算和和存存储储时时有有一一些些误误差差,因因而而循循环环次次数数的的理理论论值值与与实实际际值值之之间间会会有有一一些些差差别别。所所以以应应该该避避免免使使用用实实型型的的循循环环变量变量,用整型循环变量计算出的循环次数是绝对准确的。,用整型循环变量计算出的循环次数是绝对准确的。5 5下一页上一页停止放映DODO循环的执行过程为循环的

7、执行过程为: : (1)计算表达式计算表达式E1,E2,E3的值,并将它们转换的值,并将它们转换成循环变量的类型。成循环变量的类型。(2)循环变量的初值取循环变量的初值取E1的值。的值。(3)循环次数循环次数r=INT(E2-E1+E3)/E3).如如:DO10I=2,20,2r=(20-2+2)/2=10r为为0的情况的情况:E1E2,E30如如:DO10K=10,5,2E1E2,E3r(7)返回返回(4)6 6下一页上一页停止放映 例例:DO20I=1,5,2N=I*I20PRINT*,I,N经计算:经计算:r=(5-2+2)/2=3,各有关变量的值在各次循环各有关变量的值在各次循环中变化

8、的情况如下表:中变化的情况如下表:终止循环的条件:循环变量的值终止循环的条件:循环变量的值超过超过终值终值。7 7下一页上一页停止放映继续语句(继续语句(CONTINUECONTINUE语句)语句)它是一个可执行语句,但它不产生任何机器它是一个可执行语句,但它不产生任何机器操作。一般把它用做循环的终端语句。操作。一般把它用做循环的终端语句。注意:注意: 循环的终端语句不能是循环的终端语句不能是GOTO,块,块IF,ELSEIF,ENDIF,STOP等语句。等语句。 它的形式为它的形式为: CONTINUE8 8下一页上一页停止放映循环终端语句循环终端语句循环终端语句为一般的执行语句。循环终端语

9、句为一般的执行语句。F90规规定定:循循环环终终端端语语句句可可以以是是除除了了GOTO、块块IF、CASE、CYCLE、DO、ELSE、ELSE IF、END IF、END、ENDSELECT、EXIT、SELECTCASE、STOP和和RETURN语语句句以以外外的的任任一一可可执执行行语语句句,如如打打印印语语句句、赋赋值值语语句句、输输入入语语句句、逻逻辑辑IF语语句句等等都都可可以以作作为为终终端端语语句。句。特殊的循环终端语句是:特殊的循环终端语句是:ENDDO(常用于无语句标号时常用于无语句标号时)CONTINUE(常用于有语句标号时常用于有语句标号时)新编写的程序应该尽量使用以

10、新编写的程序应该尽量使用以ENDDO结束的块结束的块DO构造。构造。9 9下一页上一页停止放映 例例1.一球从一球从100米高度自由落下,每次落地后反米高度自由落下,每次落地后反跳回原高度的一半,再落下,求它在第跳回原高度的一半,再落下,求它在第20次着地次着地时,共经过了多少米时,共经过了多少米?90 H=100S=0DOI=1,20S=S+HH=H/2.0ENDDOWRITE(*,*)S=,SEND0177 H=100S=0DO10I=1,20S=S+HH=H/2.010 CONTINUEWRITE(*,*)S=,SEND1010下一页上一页停止放映有关有关DODO循环的一些规定循环的一些

11、规定 1.循环变量在循环体内不能再被赋值循环变量在循环体内不能再被赋值.例如例如,下面用法是错误的下面用法是错误的:DO DO K K=10,100,2=10,100,2 K K= =K K/2/2 WRITE(*,*)K WRITE(*,*)KEND DOEND DO1111下一页上一页停止放映2.2.循环变量的初值循环变量的初值E1,E1,终值终值E2E2和增量和增量E3E3在执行循环体期间在执行循环体期间不能改变不能改变. . 下面用法是错误的下面用法是错误的. . M2=100 M2=100 DO I=1, DO I=1,M2M2 M2M2=50=50 END DO END DO3.3

12、.循环的次数是根据循环变量的初值、终值和步长值循环的次数是根据循环变量的初值、终值和步长值计算出来的,在执行循环体期间是确定不变的计算出来的,在执行循环体期间是确定不变的 1212下一页上一页停止放映 4. .可以用转移语句从循环体内转到循环体外可以用转移语句从循环体内转到循环体外, ,也可以在也可以在循环体内转移循环体内转移, ,但不允许从循环体外转到循环体内但不允许从循环体外转到循环体内. . 例例2 2 判某一数判某一数M M是否为素数的程序可以写成是否为素数的程序可以写成: :READ(*,*)MREAD(*,*)MDO K=2,M-1DO K=2,M-1IF(MOD(M,K).EQ.

13、0) GOTO 40IF(MOD(M,K).EQ.0) GOTO 40 END DO END DOWRITE(*,*)M,WRITE(*,*)M,IS A PRIME NUMBERIS A PRIME NUMBERSTOPSTOP4040WRITE(*,*)M,WRITE(*,*)M,IS NOT A PRIME NUMBERIS NOT A PRIME NUMBERENDEND(非正常出口非正常出口)KM-1 5. 5. 从从“非正常出口非正常出口”转出时转出时, , 循环变量保持循环变量保持“当前值当前值”. . 从从“正常出口正常出口”脱离循环时脱离循环时, , 循环变量保持它的循环变量

14、保持它的最后的最后的值值1313下一页上一页停止放映数值积分数值积分求一个函数f(x)在a,b上的定积分a+(i-1)h a+iha+h其几何意义是求曲边梯形面积。近似求小曲边梯形面积常用方法:(1)矩形法(2)梯形法(3)辛普生法(用一条小抛物线代替f(x),求小曲边梯形面积)1414下一页上一页停止放映底的起点)求函数求函数例例: :1515下一页上一页停止放映源程序源程序:READ(*,*)N,A,BREAD(*,*)N,A,B X=A X=A H=(B-A)/N H=(B-A)/N F0=X*X+X+1.0 F0=X*X+X+1.0 S=0.0 S=0.0 DO I=1,N DO I=

15、1,N SI=F0*H SI=F0*H S=S+SI S=S+SI X=X+H X=X+H F0=X*X+X+1 F0=X*X+X+1 END DO END DO WRITE(*,*)N,A,B,S WRITE(*,*)N,A,B,S END END1616下一页上一页停止放映例例 正直角柱体如图所示正直角柱体如图所示. .已知已知5 5组组a, ba, b和和h,h,要求分别求要求分别求出对应的出对应的d.d.DIMENSION A(5),B(5),H(5),D(5)DIAG(X,Y)=SQRT(X*X+Y*Y)DO 1 I=1,51 READ(*,*)A(I),B(I),C(I)DO 2

16、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)ENDabhcd1717下一页上一页停止放映例例:利用公式利用公式ex=1+x/1!+x2/2!+x3/3!+xn/n!+计算计算ex展开式的前展开式的前20项的近似值。项的近似值。分析:分析:ex的展开式中第的展开式中第i项是第项是第i-1项乘以项乘以x/i的积。的积。例如例如:t1=t0x/1(t0=1)t2=

17、t1x/2t3=t2x/3ti=ti-1x/i这种表示方式可用循环实现。设这种表示方式可用循环实现。设t代表每项值的变量,代表每项值的变量,i是循环控制是循环控制变量,则下面的语句中,变量,则下面的语句中,for语句的每一次循环都产生语句的每一次循环都产生ex展开式中展开式中前前n项的项的t值值(除开始一项以外除开始一项以外):t=1.0DO I=1,NDO I=1,Nt=t*x/iEND DOEND DO1818下一页上一页停止放映ex是展开式的各项之和,这种有规律的求和正好可以用循环是展开式的各项之和,这种有规律的求和正好可以用循环来实现。来实现。假设假设exex代表两项之和的变量,将前面

18、代表两项之和的变量,将前面forfor循环中求出的每一项循环中求出的每一项t t累加起来,可表示为累加起来,可表示为:ex=1.0t=1.0DO I=1,NDO I=1,Nt=t*x/iex=ex+tEND DOEND DO1919下一页上一页停止放映例例:计算多项式计算多项式y=0.6+3.5x+5.0x2+0.3x3+5.1x4+2.1x5+x6在在x=1.3时的值时的值 REALA(6),FDATAA/0.6,3.5,5.0,0.3,5.1,2.1,1.0/DATAN,X/6,1.3/TOLY=A(1)F=1.0DO10K=2,NF=F*X10TOLY=TOLY+A(K)*FEND202

19、0下一页上一页停止放映循环嵌套的概念和执行过程循环嵌套的概念和执行过程一个循环体内又包含另一个完整的循环一个循环体内又包含另一个完整的循环, ,称为循环的嵌称为循环的嵌套套 例例1 1 一个学校有一个学校有4040个班个班, ,每班每班3030人人. . 要求将全校每个学要求将全校每个学生的分数累加生的分数累加, ,并求全校总平均成绩和每班的平均成绩并求全校总平均成绩和每班的平均成绩.2121下一页上一页停止放映 AVER1=TOTAL1/(40*30) WRITE AVER1 TOTAL2=0 TOTAL1=0 DO 10 I=1,40 DO 20 J=1,30 READ G TOTAL2=

20、TOTAL2+G AVER2=TOTAL2/30 WRITE I,AVER2 TOTAL1=TOTAL1+TOTAL2DOJ=1,30READ(*,*)GTOTAL2=TOTAL2+GENDDOAVER2=TOTAL2/30WRITE(*,*)I,AVER2TOTAL1=TOTAL1+TOTAL2TOTAL2=0TOTAL1=0AVER1=TOTAL1/(40*30)WRITE(*,*)ALL:,AVER1ENDDOI=1,40ENDDO2222下一页上一页停止放映例例: : 打印九九表的程序打印九九表的程序说明说明: : 1. 1. 外循环执行外循环执行9 9次次, ,内循环执行了内循环执行

21、了9*9=819*9=81次次 2. 2. 外循环变量外循环变量(I)(I)比内循环变量比内循环变量(K)(K)变化慢变化慢1*1=1 1*2=2 1*1=1 1*2=2 。1*9=9 1*9=9 2*1=2 2*2=4 2*1=2 2*2=4 。2*9=182*9=18 。 。 。9*1=9 9*2=18 9*1=9 9*2=18 。9*9=819*9=81 DO I=1,9 DO I=1,9 END DO END DO DO K=1,9 DO K=1,9 L=I*K L=I*K END DO END DOENDEND100 FORMAT(9(1X,I2,100 FORMAT(9(1X,I2

22、,* *,I2,I2,= =,I2),I2)PRINT 100,I,K,L PRINT 100,I,K,L 2323下一页上一页停止放映 二重循环的执行过程:二重循环的执行过程: 3.3.遇内循环的遇内循环的DODO语句语句, ,计算出内循环应执行次数计算出内循环应执行次数r2, r2, 使内使内循环变量取初值循环变量取初值. . 2.2.如果如果r10,r10,执行外循环体执行外循环体( (顺序执行外循环体中的执顺序执行外循环体中的执行语句行语句).).如果如果r1=0,r1=0,则结束循环的执行则结束循环的执行. . 1.1.先计算出外循环的循环体应执行的次数先计算出外循环的循环体应执行的

23、次数r1,r1,外循环变外循环变量取初值量取初值. . 4.4.如果如果r20,r20,执行内循环体各语句执行内循环体各语句, ,直到内循环的终端语直到内循环的终端语句句. .如此共执行内循环体如此共执行内循环体r2r2次次, , 然后从正常出口脱离内循环然后从正常出口脱离内循环. .此时此时, r2=0., r2=0. 5.5.接着执行外循环体中其它执行语句接着执行外循环体中其它执行语句, ,直到外循环的终端直到外循环的终端语句语句. . 6. 6. 外循环变量增值外循环变量增值, r1-1=r1. , r1-1=r1. 返回返回2.2. 应注意应注意:(1) 1) 循环次数循环次数.(2)

24、.(2)内外循环变量值的变化内外循环变量值的变化. .2424下一页上一页停止放映有关循环嵌套的规定有关循环嵌套的规定 1. 1. 各种循环都可以互相嵌套各种循环都可以互相嵌套. .例如两个例如两个DODO循环可以嵌套成循环可以嵌套成为双重循环为双重循环, , 一个当型循环和一个一个当型循环和一个DODO循环也可以嵌套循环也可以嵌套. . 无论哪无论哪种循环的嵌套种循环的嵌套, ,内循环都必须完整地出现在外循环体内内循环都必须完整地出现在外循环体内.I=15IF(I.LE.N)THENDOJ=1,IPRINT*,JENDDOPRINT*I=I+1GOTO5ENDIFDO10I=1,NDO20J

25、=1,MPRINT*,I,J10CONTINUE20CONTINUE如如: :2525下一页上一页停止放映 2. 2. 并列的循环可以用一个变量名作循环变量,而嵌套并列的循环可以用一个变量名作循环变量,而嵌套的循环不能用同一变量名作循环变量。的循环不能用同一变量名作循环变量。DOk=1,5DOk=1,10END DOEND DOEND DOEND DODOI=1,5END DOEND DODOI=1,10END DOEND DO 3. 3. 嵌套的嵌套的DODO循环可以共用一个终端语句循环可以共用一个终端语句. . 如:如:4. 4. 可以从内循环体转到外循环体或外循环之外可以从内循环体转到外

26、循环体或外循环之外, ,反之不行反之不行5.5.除了循环的嵌套以外除了循环的嵌套以外, DO, DO循环和块循环和块IFIF连用时应注意连用时应注意: :如果如果在在IFIF块等中包含块等中包含DODO循环循环, ,则该循环必须完整地包含在上述一则该循环必须完整地包含在上述一个块中个块中. .如果如果DODO循环中包含一个块循环中包含一个块IFIF语句语句, ,也应完全包含也应完全包含. .2626下一页上一页停止放映* *循环嵌套中循环控制变量的选择循环嵌套中循环控制变量的选择例例: : 求下式之和求下式之和ISUM=0ISUM=0DO I=1,20 DO I=1,20 DO J=1,3 D

27、O J=1,3 ISUM=ISUM+(I+1)*2*(J+2) ISUM=ISUM+(I+1)*2*(J+2) END DO END DO PRINT *,ISUM PRINT *,ISUM END DOEND DOEND END 问题问题: :I I与与J J那个做外循环好那个做外循环好 DO J=1,3 DO J=1,3 K=J+2 K=J+2 DO I=1,20 DO I=1,20 ISUM=ISUM+K*(I+1)*(I+1) ISUM=ISUM+K*(I+1)*(I+1) END DO END DO END DO END DO1. I1. I赋初值赋初值1 1次次, ,判断循环是否终

28、了判断循环是否终了2020次次, ,为为J J赋初值赋初值20*120*1次次, ,判断是否终了为判断是否终了为20*320*3次次, ,总共总共101101次次. .若若I,JI,J位置互换位置互换: :2.J2.J赋初值赋初值1 1次次, ,判断终了判断终了3 3次次, ,给内层给内层I I赋初值赋初值3*13*1次次, ,判断终了判断终了3*203*20次次, ,总共总共6767次次3.j+23.j+2共计算共计算20*3=6020*3=60次次, ,若将其搬到内循环外若将其搬到内循环外, ,就减少了就减少了5757次次 2727下一页上一页停止放映多重循环遵守的原则多重循环遵守的原则:

29、 : 1.1. 变化范围大的循环变量要放在内层循环变化范围大的循环变量要放在内层循环 2.2. 尽量减少内循环中的运算尽量减少内循环中的运算,凡与循环无关的运算均移到凡与循环无关的运算均移到 循环体外循环体外2828下一页上一页停止放映例例: :求方程求方程I I3 3+J+J3 3+K+K3 3=3=3的全部解的全部解 其中其中I I为为-5,11,J-5,11,J为为-10,9,K-10,9,K为为-6,18-6,18程序举例程序举例 N=0 N=0 DO I=-5,11 DO I=-5,11 ICUB=I*3 ICUB=I*3 END DO END DO END END DO K=-6,

30、18 DO K=-6,18 IF ( IF (ICUBICUB+ +JCUBJCUB+ +KCUBKCUB.EQ.3) THEN.EQ.3) THEN N=N+1 N=N+1 PRINT *,N,I,J,K PRINT *,N,I,J,K ENDIF ENDIF END DOEND DO KCUB=K*3KCUB=K*3 DO J=-10,9DO J=-10,9 JCUB=J*3 JCUB=J*3 END DO END DO2929下一页上一页停止放映补充补充: :百鸡问题。公鸡每只百鸡问题。公鸡每只5 5元元, , 母鸡母鸡3 3元元, , 小鸡一元小鸡一元3 3只只.100.100元买元买

31、100100只鸡只鸡. .INTEGER X,Y,ZINTEGER X,Y,Z DO X=1,20 DO X=1,20 DO Y=1,33 DO Y=1,33 DO Z=1,99,3 DO Z=1,99,3 IF (X+Y+Z.EQ.100) THEN IF (X+Y+Z.EQ.100) THEN IF (5*X+3*Y+Z/3.EQ.100) THEN IF (5*X+3*Y+Z/3.EQ.100) THEN PRINT *, X, Y, Z PRINT *, X, Y, Z ENDIF ENDIF ENDIF ENDIF END DO END DO END DO END DO END DO

32、 END DO END END3030下一页上一页停止放映INTEGER X,Y,ZINTEGER X,Y,ZDO X=1,20DO X=1,20 DO Y=1,33 DO Y=1,33 z=100-x-y z=100-x-y IF (5*X+3*Y+Z/3.EQ.100) THEN IF (5*X+3*Y+Z/3.EQ.100) THEN PRINT *, X, Y, Z PRINT *, X, Y, Z ENDIF ENDIF END DO END DOEND DO END DO ENDEND优化后:3131下一页上一页停止放映例例2求求100到到200之间的全部素数。之间的全部素数。LO

33、GICAL LLOGICAL L DO M=101,200,2 DO M=101,200,210 IF (K.LE.SQRT(M).10 IF (K.LE.SQRT(M).AND.LAND.L) THEN) THEN IF (MOD(M,K).EQ.0) L=.FALSE. IF (MOD(M,K).EQ.0) L=.FALSE. K=K+1 K=K+1 GOTO 10 GOTO 10 ENDIF ENDIF IF(L) WRITE(*,*)M,IS A PRIME NUMBER IF(L) WRITE(*,*)M,IS A PRIME NUMBER END DO END DOENDENDL=

34、.TRUE.L=.TRUE.K=2K=23232下一页上一页停止放映5.3当型循环的实现(循环次数未知)当型循环的实现(循环次数未知)一般形式:一般形式:DO 标号标号, WHILE 逻辑表达式逻辑表达式 当逻辑表达式当逻辑表达式的值为的值为“真真”时,反复执行循环体。时,反复执行循环体。当逻辑表达式当逻辑表达式的值为的值为“假假”时,结束循环。时,结束循环。3333下一页上一页停止放映 【例例】利用利用辗转相除法辗转相除法,求两个正整数的最大公约数,求两个正整数的最大公约数求求M和和N的最大公约数的最大公约数算法:算法:算法:算法: 若若N=0=0,则,则M为最大公约数为最大公约数 若若N!

35、=0!=0 将将M 除以除以N,余数为,余数为R M=N=N;N=R=R 转转3434下一页上一页停止放映 INTEGER M,N,RINTEGER M,N,R READ *, M,N READ *, M,N DO 10 WHILE(N.NE.0) DO 10 WHILE(N.NE.0) R=MOD(M,N) R=MOD(M,N) M=N M=N N=R N=R10 CONTINUE10 CONTINUE PRINT * , THE GREATEST COMMON DIVISOR IS,M PRINT * , THE GREATEST COMMON DIVISOR IS,M END END12

36、 18THE GREATEST COMMON DIVISOR ISTHE GREATEST COMMON DIVISOR IS 6例:例:例:例:MMN NR R121218181212181812126 612126 60 06 60 0 ( (退出循环退出循环退出循环退出循环) )3535下一页上一页停止放映F90的的DO WHILEDO WHILE语句语句在在F90增增强强的的功功能能中中,增增加加了了DOWHILE语语句句以以支支持持当当型型循循环环。因因此此,DO构构造造不不仅仅仅仅能能完完成成循循环环次次数数已已知知的的循循环环,而且能够完成此数未知的循环。而且能够完成此数未知的循

37、环。例:例:dowhile(input.ne.n).and.(input.ne.y)write(*,(a)Enteryorn:;read(*,(a)inputenddo它的一般形式为:它的一般形式为: 构造名构造名 DO WHILE ( DO WHILE (逻辑表达式逻辑表达式) )DO WHILEDO WHILE语句的规则和块语句的规则和块IFIF语句所需满足的的语句所需满足的的块规则块规则类似。类似。3636下一页上一页停止放映例:对一个大于或等于例:对一个大于或等于3的正整数,判断它是不是一个素的正整数,判断它是不是一个素数。数。read*,nj=int(sqrt(n*1.);i=2do

38、while()i=i+1enddoif(ij)thenprint*,不是素数,可被不是素数,可被,i,整除整除elseprint*,是素数是素数endifend一、一、(mod(n,i)/=0).and.(i=j)3737下一页上一页停止放映read*,nj=int(sqrt(n*1.);i=2;k=0do_while:dowhile(ierr).and.(kg(x0)=x1=g(x1)=x2=g(x2)=.g(x4)=x5.直到前后两次求出的直到前后两次求出的x值很接近值很接近,即即这时这时就是所求的近似值就是所求的近似值 用迭代法求一元方程用迭代法求一元方程f(x)的根,其基本方法如下:的

39、根,其基本方法如下:4848下一页上一页停止放映read(*,*)x,mdo20i=1,m,110x1=(-x*3-2.0*x*x-1.0)/2.011write(*,100)i,x112if(abs(x-x1).ge.1e-6)thenx=x1elsestopendif20continue21print*,computhastconverged100format(1x,sqrt(,i2,)=,f12.5)end例例用迭代法求方程用迭代法求方程f(x)=x3+2x2+2x+1=0的一个解的一个解,直到直到满足满足:改写为:改写为:x=g(x)形式形式 X=(- x3-2x2-1)/24949下

40、一页上一页停止放映Y=f(x)xyO牛顿迭代公式为牛顿迭代公式为: 在几何意义上在几何意义上: 所以所以 二、牛顿二、牛顿迭代法迭代法5050下一页上一页停止放映已知已知:求出:求出: READ(*,*)XN=110X1=XF=X1*3-6*X1-1F1=3*X1*X1-6X=X1-F/F1WRITE(*,100)N,X1,XN=N+1IF(ABS(X-X1).GT.1E-6)GOTO10100FORMAT(1X,N=,I3,5X,X1=,F13.8,5X,X=,F13.8)END读XN=1X1=X 打印N,X1,XX=X1-F/F1N=N+1直到例例用牛顿迭代法求方程用牛顿迭代法求方程f(x

41、)=x3-6x-1=0在在2.5附附近的一个实根近的一个实根,直到满足直到满足:5151下一页上一页停止放映 三、弦截法弦截法 弦截法的算法思想如下:弦截法的算法思想如下:(1) (1) 先取两个不同的点先取两个不同的点x1x1和和x2x2,需使,需使f(x1)f(x1)和和f(x2)f(x2)的符号相的符号相反,否则,重新取反,否则,重新取x1x1和和x2x2。但。但x1x1与与x2x2相差不宜太大,以免在相差不宜太大,以免在(x1,x2)(x1,x2)区间出现多根。区间出现多根。(2)(2)连接连接f(x1)f(x1)与与f(x2)f(x2)得一弦线交得一弦线交x x轴于轴于x x,可求得

42、,可求得x x点的坐标点的坐标为:为:x=x1*(f(x2)-x2*f(x1)/(f(x2)-f(x1)x=x1*(f(x2)-x2*f(x1)/(f(x2)-f(x1)将将x x代入方程可代入方程可求出求出f(xf(x) )。(3)(3)判别判别f(xf(x) )与与f(x1)f(x1),若符号相同,则根在,若符号相同,则根在(x(x,x2)x2)区间内,区间内,可将可将x x作为新的作为新的x1x1;若符号相异,则根在;若符号相异,则根在(x1(x1,x)x)区间内,可区间内,可将将x x作为新的作为新的x2x2。(4)(4)重复上述重复上述(2)(2)、(3)(3)步骤,直到步骤,直到|

43、 |f(xf(x)|)|=0) goto 1020 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 的近似根。的近似根。5454下一页上一页停止放映5.5无循环变量的无循环变量的DO构造构造一般形式:一般形式:构造名构造名:DO块块ENDDO注注意意:对对

44、于于不不带带控控制制变变量量的的DO构构造造,DO块块中中必必须须有有EXIT语语句句,使使它它停停止止循循环环,否否则则循循环环将将无无休休无无止止地地一一直直进进行行下下去,形成死循环。去,形成死循环。5555下一页上一页停止放映DO构造也可在自身中再嵌构造也可在自身中再嵌DO构造,例如:构造,例如:FIRST:DO块块1的第一部分的第一部分SECOND:DO块块2ENDDOSECOND块块1的第二部分的第二部分ENDDOFIRST5656下一页上一页停止放映 EXITEXIT语句语句EXIT语语句句的的作作用用是是停停止止循循环环,使使控控制制退退出出循循环环结结构构,因因此又称出口语句

45、。此又称出口语句。它的一般形式是:它的一般形式是:EXITDO构造名构造名执行执行EXIT语句,其功能是导致循环终止。语句,其功能是导致循环终止。注意:注意:1如果语句引用了如果语句引用了DO构造名,则它属于该构造,构造名,则它属于该构造,否则属于它所出现的最内层否则属于它所出现的最内层DO构造。构造。2对对于于多多层层嵌嵌套套的的DO构构造造,尤尤为为需需要要指指明明是是从从哪哪一一个个构构造造名名的的DO构构造造中中退退出出。如如当当EXIT指指明明从从第第三三层层结结构构退退出出,则则第第三三层层与与第第三三层层内内各各层层嵌嵌套套的的DO构构造造都都将将被被停停止执行。止执行。3通常将

46、通常将EXIT语句与语句与IF语句结合使用,即在语句结合使用,即在DO构造构造内使用:内使用:IF(逻辑表达式逻辑表达式)EXIT。当逻辑表达式为真时,当逻辑表达式为真时,EXIT语句被执行,循环终止,否则循环将继续进行。语句被执行,循环终止,否则循环将继续进行。 5757下一页上一页停止放映例如:例如: 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 *

47、,ok end do xx print *, sum,y, term=,i ,j end5858下一页上一页停止放映implicitnoneinteger:i,nreal:y=0,termread*,ndoi=1,nterm=1./(i*(i+1)y=y+termif(abs(term)=1.e-5)exitenddoprint*,sum,y,term=,iend例:例:求级数的前求级数的前n项和,但当某项绝对值项和,但当某项绝对值10-5时,虽时,虽未满未满n项,也因满足精度而不再加入下一项。项,也因满足精度而不再加入下一项。 5959下一页上一页停止放映CYCLECYCLE语句语句CYCL

48、E语句的一般形式为:语句的一般形式为:CYCLEDO构造名构造名CYCLE语语句句的的功功能能是是在在循循环环中中跳跳过过它它下下面面那那部部分分的的DO块,重新返回到块的第一个语句开始执行块,重新返回到块的第一个语句开始执行。运运用用CYCLE语语句句,可可以以在在执执行行循循环环中中某某一一次次迭迭代代时不执行下面的部分语句,使时不执行下面的部分语句,使DO结构更为灵活。结构更为灵活。CYCLE语句与语句与EXIT语句一样属于特定的语句一样属于特定的DO构造。构造。如果语句引用了如果语句引用了DO构造名,则它属于该构造,否则构造名,则它属于该构造,否则属于它所出现的最内层属于它所出现的最内

49、层DO构造。构造。 6060下一页上一页停止放映parameter(n=10)write(*,(a)Loop:1st2nd3rdloop_1:doi=1,nif(i.gt.3)exitloop_1write(*,1)iloop_2:doj=1,nif(j.gt.2)cycleloop_2if(i.eq.2.and.j.gt.1)exitloop_2write(*,2)jloop_3:dok=1,nif(k.gt.2)cycleloop_3if(i.eq.1.and.j.gt.1)exitloop_2!跳出最内跳出最内2层循环层循环write(*,3)kenddoloop_3enddoloop_

50、2enddoloop_11format(10x,i2)2format(16x,i2)3format(22x,i2)end例例:6161下一页上一页停止放映隐隐DODO循环循环隐隐DO循循环环实实际际上上是是带带控控制制循循环环变变量量的的DO循循环环,但但简简化化成成只只有有DO循循环环的的第第一一句句,且且把把关关键键字字DO隐隐去去,成成为为I=m1,m2,m3形形式式。它它不不是是独独立立语语句句,只只是是用用作作为为读读写写语语句句的的输输入入输输出出表表中中一一个个组组成成部部分分,用用来来控控制制重重复复读读写写的的次次数。例如:数。例如:READ*,(VALUE(I),I=1,20)表示读入表示读入VALUE(1),VALUE(2),VALUE(20)的值。的值。WRITE(*,*)(A,B,N=1,5)表示在当前设备用默认格式重复输出表示在当前设备用默认格式重复输出A、B的值的值5次。次。6262下一页上一页停止放映作业和上机题P126 三、九、十四P145 一、一、二二、五、五、八八 P192 一、四、五6363

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号