资源描述:
《Fortran程序设计4-循环结构》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、六、循环结构程序设计DODOWHILEDO循环的嵌套隐含DO循环循环的流程控制例:DOI=1,20,2……ENDDO由循环变量来控制循环的次数。即:需要执行的循环次数已经知道DO输入30个学生的学号和成绩,并且打印出来DON=1,30READ*,NUM,GRADEPRINT*,NUM,GRADEENDDO也称“循环变量”也称“步长”,缺省为1DO循环变量步长终值初值行号行号循环终端语句:循环终端语句为一般的执行语句。F90规定:循环终端语句可以是除了GOTO、块IF、CASE、CYCLE、DO、ELSE、ELSEI
2、F、ENDIF、END、ENDSELECT、EXIT、SELECTCASE、STOP和RETURN语句以外的任一可执行语句,如打印语句、赋值语句、输入语句、逻辑IF语句等都可以作为终端语句。特殊的循环终端语句是:ENDDO(常用于无语句标号时)和CONTINUE(常用于有语句标号时)。ENDDO语句使老的CONTINUE语句显得没有什么用处了,虽然F90的向下兼容性使CONTINUE语句仍然可用,但新编写的程序应该尽量使用以ENDDO结束的块DO构造练习1用展开式求指数函数的数值(参考程序:exponent.f90
3、)练习2用展开式求pi的近似值。N由键盘输入programexponentimplicitnoneintegeri,nrealx,term,sumread*,n,xterm=1.0sum=1.0do10i=1,nterm=term*x/isum=sum+term10continueprint*,sumenddoi=1,nterm=term*x/isum=sum+termenddo练习1练习2PROGRAMMAINimplicitnoneintegeri,nrealPI,term,SUMread*,n,xSUM=0.
4、0DOI=1,Nterm=1.0/I**2SUM=SUM+termENDDOPI=SQRT(SUM*6.0)END循环变量的终值N由键盘输入改为:直到第n项小于1e-6?SUM=0.I=1DOWHILE(1./I**2>=1E-6)SUM=SUM+1./I**2I=I+1ENDDODOWHILE用逻辑运算来控制循环的次数循环的嵌套在一个DO循环中又完整地包含另一个DO循环,称为DO循环的嵌套。嵌套层数可以不限,各层的循环变量不允许同名。注意内循环应当完整地嵌套在外循环之内,即内循环是外循环体中的一部分,内外循环不能
5、交叉doi=1,1Odoj=1,20………enddoenddo例:求两个整数的最大公约数(DOWHILE结构程序见DIVISOR.F90)read*,m,ndowhile(m/=n)dowhile(m>n)m=m-nenddodowhile(n>m)n=n-menddoenddoprint*,'最大公约数=',mend例:打印“九九表”,即1×1=11×2=2……直到9×9=81(程序ex4.f90)例:打印3-100之间的全部素数程序prime.f90(先看判断素数程序primenumb.f90)循环的流程控制C
6、YCLE命令EXIT命令(p109)其它:do……enddo不带循环控制变量,从DO语句下面第一句执行起顺次执行到ENDDO前的最后一句,再返上来从DO语句下面第一句执行起,重复执行整个DO块,则需要用exit跳出循环程序例:guessnumb.f90隐DO循环隐DO循环实际上是带控制循环变量的DO循环,但简化成只有DO循环的第一句,且把关键字DO隐去,成为I=m1,m2,m3形式。它不是独立语句,只是用作为读写语句的输入输出表中一个组成部分,用来控制重复读写的次数。READ*,(VALUE(I),I=1,20)W
7、RITE(*,*)(A,B,N=1,5)隐DO表可以嵌套,如:PRINT*,((A(I,J),I=1,3),J=1,3)练习:求级数的前n项和,但当某项绝对值≤10-5时,虽未满n项,也因满足精度而不再加入下一项练习:验证哥德巴赫猜想。哥德巴赫猜想提出,一个不小于6的偶数必定能表示为两个素数之和。例如:6=3+3,8=3+5,10=3+7,…要求将6~100之间的全部偶数表示为两个素数之和。程序series.f90程序primenumb.f90程序verify.f90