




已阅读5页,还剩58页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第1页,第五章循环结构的实现,5.1GOTO语句实现循环,GOTO语句的一般形式为:GOTO(语句标号)在一个基本结构内部可以使用GOTO语句。如果在逻辑IF语句中使用GOTO语句就可以实现有条件的循环,循环操作能够在一定条件下结束。,在程序中存在两类循环:无条件的循环:无条件循环是无休止地执行一个程序段,有条件的循环:有条件的循环是在满足一定条件时才执行循环。,GOTO语句实现无条件的循环:,第2页,FORTRAN程序中有条件的循环的3种循环类型:1.DO型循环(用循环语句实现)2.当型循环(用DOWHILE语句)3.直到型循环(用IF语句),第3页,5.2用DO语句实现循环(循环次数已知的循环),当需要执行的循环次数为已知时,用DO语句实现循环比较方便。它的一般形式为:,例如:DO10N=1,100,1T=N/2.010PRINT*,T,DO标号,循环变量初值式E1,终值式E2,增量式E3,第4页,循环变量的初值、终值和步长可以为正或负。初值、终值可以为零。但步长不应为0,否则循环变量的值永远不会超过终值,从而陷入死循环。,说明:,循环变量是整型的例:D0I1.5,3.6,1.2循环次数不应该是INT(3.6-1.51.2)/1.2)2,而应当先将实型量转化为整型量,即变成相当的循环语句DOI1,3,1其循环次数为3次而不是2次。,例:对于D0k-1,-3,-1其循环次数INT(31-1)(1)3次k按序分别取值为:-1,-2,-3。,如果循环变量的类型和初值、终值和步长的类型不一致,则按赋值的规则处理,即需先将初值、终值和步长的类型转化成循环变量的类型,然后进行处理。,第5页,循环变量是实型的,例:D0X0.0,50.0,0.1理论循环次数INT(50.1/0.1)501但实际上在许多计算机上它只执行500次循环。原因是实数在内存中的误差使得增量值不是准确的0.1,由于循环的误差积累,到执行完500次循环后X的值可能已超过50.0,因而停止执行循环。改用整型循环变量时,则循环改写为: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。,由于实型数在运算和存储时有一些误差,因而循环次数的理论值与实际值之间会有一些差别。所以应该避免使用实型的循环变量,用整型循环变量计算出的循环次数是绝对准确的。,第6页,DO循环的执行过程为:,(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,2E10,执行外循环体(顺序执行外循环体中的执行语句).如果r1=0,则结束循环的执行.,1.先计算出外循环的循环体应执行的次数r1,外循环变量取初值.,4.如果r20,执行内循环体各语句,直到内循环的终端语句.如此共执行内循环体r2次,然后从正常出口脱离内循环.此时,r2=0.,5.接着执行外循环体中其它执行语句,直到外循环的终端语句.,6.外循环变量增值,r1-1=r1.返回2.,应注意:(1)循环次数.(2)内外循环变量值的变化.,第25页,有关循环嵌套的规定,1.各种循环都可以互相嵌套.例如两个DO循环可以嵌套成为双重循环,一个当型循环和一个DO循环也可以嵌套.无论哪种循环的嵌套,内循环都必须完整地出现在外循环体内.,I=15IF(I.LE.N)THENDOJ=1,IPRINT*,JENDDOPRINT*I=I+1GOTO5ENDIF,DO10I=1,NDO20J=1,MPRINT*,I,J10CONTINUE20CONTINUE,如:,第26页,2.并列的循环可以用一个变量名作循环变量,而嵌套的循环不能用同一变量名作循环变量。,DOk=1,5DOk=1,10ENDDOENDDO,DOI=1,5ENDDODOI=1,10ENDDO,3.嵌套的DO循环可以共用一个终端语句.,如:,4.可以从内循环体转到外循环体或外循环之外,反之不行,5.除了循环的嵌套以外,DO循环和块IF连用时应注意:如果在IF块等中包含DO循环,则该循环必须完整地包含在上述一个块中.如果DO循环中包含一个块IF语句,也应完全包含.,第27页,*循环嵌套中循环控制变量的选择,例:求下式之和ISUM=0DOI=1,20DOJ=1,3ISUM=ISUM+(I+1)*2*(J+2)ENDDOPRINT*,ISUMENDDOEND,问题:I与J那个做外循环好,DOJ=1,3K=J+2DOI=1,20ISUM=ISUM+K*(I+1)*(I+1)ENDDOENDDO,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次,第28页,多重循环遵守的原则:1.变化范围大的循环变量要放在内层循环2.尽量减少内循环中的运算,凡与循环无关的运算均移到循环体外,第29页,例:求方程I3+J3+K3=3的全部解其中I为-5,11,J为-10,9,K为-6,18,程序举例,N=0DOI=-5,11ICUB=I*3ENDDOEND,DOK=-6,18IF(ICUB+JCUB+KCUB.EQ.3)THENN=N+1PRINT*,N,I,J,KENDIFENDDO,KCUB=K*3,DOJ=-10,9JCUB=J*3ENDDO,第30页,补充:百鸡问题。公鸡每只5元,母鸡3元,小鸡一元3只.100元买100只鸡.,INTEGERX,Y,ZDOX=1,20DOY=1,33DOZ=1,99,3IF(X+Y+Z.EQ.100)THENIF(5*X+3*Y+Z/3.EQ.100)THENPRINT*,X,Y,ZENDIFENDIFENDDOENDDOENDDOEND,第31页,INTEGERX,Y,ZDOX=1,20DOY=1,33z=100-x-yIF(5*X+3*Y+Z/3.EQ.100)THENPRINT*,X,Y,ZENDIFENDDOENDDOEND,优化后:,第32页,例2求100到200之间的全部素数。,LOGICALLDOM=101,200,210IF(K.LE.SQRT(M).AND.L)THENIF(MOD(M,K).EQ.0)L=.FALSE.K=K+1GOTO10ENDIFIF(L)WRITE(*,*)M,ISAPRIMENUMBERENDDOEND,L=.TRUE.K=2,第33页,5.3当型循环的实现(循环次数未知)一般形式:,DO标号,WHILE逻辑表达式,当逻辑表达式的值为“真”时,反复执行循环体。当逻辑表达式的值为“假”时,结束循环。,第34页,【例】利用辗转相除法,求两个正整数的最大公约数,求M和N的最大公约数算法:若N=0,则M为最大公约数若N!=0将M除以N,余数为RM=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。,第35页,INTEGERM,N,RREAD*,M,NDO10WHILE(N.NE.0)R=MOD(M,N)M=NN=R10CONTINUEPRINT*,THEGREATESTCOMMONDIVISORIS,MEND,例:MNR12181218126126060(退出循环),第36页,F90的DOWHILE语句在F90增强的功能中,增加了DOWHILE语句以支持当型循环。因此,DO构造不仅仅能完成循环次数已知的循环,而且能够完成此数未知的循环。,例:dowhile(input.ne.n).and.(input.ne.y)write(*,(a)Enteryorn:;read(*,(a)inputenddo,它的一般形式为:构造名DOWHILE(逻辑表达式)DOWHILE语句的规则和块IF语句所需满足的的块规则类似。,第37页,例:对一个大于或等于3的正整数,判断它是不是一个素数。,read*,nj=int(sqrt(n*1.);i=2dowhile()i=i+1enddoif(ij)thenprint*,不是素数,可被,i,整除elseprint*,是素数endifend,一、,(mod(n,i)/=0).and.(ix1=g(x1)=x2=g(x2)=.g(x4)=x5.直到前后两次求出的x值很接近,即,这时就是所求的近似值,用迭代法求一元方程f(x)的根,其基本方法如下:,第49页,read(*,*)x,mdo20i=1,m,1x1=(-x*3-2.0*x*x-1.0)/2.0write(*,100)i,x1if(abs(x-x1).ge.1e-6)thenx=x1elsestopendifcontinueprint*,computhastconverged100format(1x,sqrt(,i2,)=,f12.5)end,例用迭代法求方程f(x)=x3+2x2+2x+1=0的一个解,直到满足:,改写为:x=g(x)形式X=(-x3-2x2-1)/2,第50页,牛顿迭代公式为:,在几何意义上:,所以,二、牛顿迭代法,第51页,已知:,求出:,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,例用牛顿迭代法求方程f(x)=x3-6x-1=0在2.5附近的一个实根,直到满足:,第52页,三、弦截法弦截法的算法思想如下:,(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)goto1020 x=x1*(f2-x2*f1)/(f2-f1)y=(x-2.0)*x+8.0)*x-16.0if(y*y10)theny1=yx1=xelsex2=xy2=yendifif(abs(y).gt.1E-6)goto20Print*,Therootofequationis:,xend,例:用弦截法求方程x3-2x2+8x-16=0的近似根。,第55页,5.5无循环变量的DO构造一般形式:构造名:DO块ENDDO注意:对于不带控制变量的DO构造,DO块中必须有EXIT语句,使它停止循环,否则循环将无休无止地一直进行下去,形成死循环。,第56页,DO构造也可在自身中再嵌DO构造,例如:FIRST:DO块1的第一部分SECOND:DO块2ENDDOSECOND块1的第二部分ENDDOFIRST,第57页,EXIT语句EXIT语句的作用是停止循环,使控制退出循环结构,因此又称出口语句。它的一般形式是:EXITDO构造名执行EXIT语句,其功能是导致循环终止。注意:1如果语句引用了DO构造名,则它属于该构造,否则属于它所出现的最内层DO构造。2对于多层嵌套的DO构造,尤为需要指明是从哪一个构造名的DO构造中退出。如当EXIT指明从第三层结构退出,则第三层与第三层内各层嵌套的DO构造都将被停止执行。3通常将EXIT语句与IF语句结合使用,即在DO构造内使用:IF(逻辑表达式)EXIT。当逻辑表达式为真时,EXIT语句被执行,循环终止,否则循环将继续进行。,第58页,例如:implicitnoneintegeri,jrealy,termy=0 xx:doj=1,1000ww:doi=1,1000term=1./(i*(i+1)y=y+termif(abs(term)=1.e-5)exitxxenddowwprint*,okenddoxxprint*,sum,y,term=,i,jend,第59页,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项,也因满足精度而不再加入下一项。,第60页,CYCLE语句CYCLE语句的一般形式为:CYCLEDO构造名CYCLE语句的功能是在循环中跳过它下面那部分的DO块,重新返回到块的第一个语句开始执行。运用CYCLE语句,可以在执行循环中某一次迭代时不执行下面的部分语句,使DO结构更为灵活。CYCLE语句与EXIT语句一样属于特定的DO构造。如果语句引用了DO构造名,则它属于该构
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 宣传消防面试题及答案
- 人力资源服务与员工关系处理及调解协议
- 系统集成方案调整补充协议
- 生物芯片研发、生产及市场推广战略合作协议
- 宠物抚养权转让及全面抚养费用协议
- 检测分析与环保标准制定服务协议
- 跨境电商温湿度监测设备租赁及数据服务协议
- 网络直播平台广告内容审核与广告效果评估合同
- ESG信息披露对上市公司企业价值的影响研究
- 健康医疗领域移动应用(APP)开发及数据管理合同
- 数字信号处理常用公式(不惧怕繁琐的推导)
- 2022年上海高中学业水平考试化学实验操作技能考试攻略
- 特选2023年广东省3+证书高职高考语文试卷(真题)和答案
- 盆腔脏器脱垂课件
- 二年级下册数学教案 -6.3 《求比一个数多或少几的数》 ︳青岛版
- 医疗机构麻精药品管理要点-课件
- 人工神经网络6HOPFIELD神经网络ppt课件
- 适老化居家环境设计与改造-项目三-适老化居家环境课件(PPT 37页)
- 安全现场文明施工措施费用清单
- 部编版道德与法治六年级下册【全册】知识点总结
- 签约仪式背景
评论
0/150
提交评论