fortran第5章(循环).ppt

  1. 1、本文档共63页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
2.循环变量的初值E1,终值E2和增量E3在执行循环体期间不能改变. 下面用法是错误的. 【例】利用辗转相除法,求两个正整数的最大公约数 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 例如:直到N大于20就不再执行循环 不应该写出: IF(N.GT.20) GOTO 10 而应该写成: IF(N.LE.20) GOTO 10 或: IF(.NOT.(N.GT.20)) GOTO 10 (1)迭代法 (2)弦截法求方程 (3)二分法 三、弦截法 弦截法的算法思想如下:  作业和上机题 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 优化后: 例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 5.3当型循环的实现(循环次数未知) ?? ? 一般形式: DO [[标号][,]] WHILE 逻辑表达式 当逻辑表达式 的值为“真”时,反复执行循环体。 当逻辑表达式 的值为“假”时,结束循环。 求M和N的最大公约数算法: ⑴ 若N=0,则M为最大公约数 ⑵ 若N!=0 将M 除以N,余数为R M=N;N=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。 12 18? THE GREATEST COMMON DIVISOR IS 6 例: M N R 12 18 12 18 12 6 12 6 0 6 0 (退出循环) 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语句所需满足的的块规则类似。 例:对一个大于或等于3的正整数,判断它是不是一个素数。 read *, n j=int(sqrt(n*1.)); i=2 do while ( ) i=i+1 end do if(i<j) then print *, '不是素数,可被',i,'整除' else print *, '是素数' end if end 一、 (mod(n,i)/=0) .and. (i<=j) read *, n j=int(sqrt(n*1.)); i=2; k=0 do_while: do while (i<=j) i=i+1 end do do_while if(k/=0) then print *, '

文档评论(0)

junjun37473 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档