资源描述:
《第2章 Fortran程序设计基础》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第4章循环结构流程控制顺序结构、选择结构、循环结构P1A块成立不成立入口出口GOTO循环F77允许使用GOTO语句来实现转移。GOTO语句的一般形式为:GOTO(语句标号)。由于GOTO语句破坏了语句顺序执行的正常状况,不符合结构化原则,因此一般不提倡使用GOTO语句。只有在一个基本结构内部可以使用GOTO语句。利用GOTO语句可以实现循环处理。如果在逻辑IF语句中使用GOTO语句就可以实现有条件的循环,循环操作能够在一定条件下结束。Do循环当需要执行的循环次数为已知时,用DO语句实现循环比较方便。它的一般形式为:DO[[标号][,]]循环变量=初值式,终
2、值式[,增量式]例:循环读入学生的学号和成绩30次并打印。DO10,N=1,30,1READ*,NUM,GRADE10PRINT*,NUM,GRADE上面是一个循环,第一行DO语句称为循环语句,DO后面的数10是一个标号,表示循环的范围到标号为10的语句为止,也就是反复执行READ语句和PRINT语句。DO语句中的N是“循环变量”,用它来控制循环次数,“N=1,30,1”的意思是:N的初值为1,终值为30,每执行一次循环N的值增加1。当N再变化到31时,由于它已超过了指定的终值30,不再执行循环。Do语句特点在上述DO语句的一般形式中,当循环变量的增量(步
3、长值)为1时增量式可不写。循环变量初值、终值和步长可以分别是常数、变量或表达式。如果是变量则它应预先被赋值。如果是表达式,则先计算出表达式的值。循环次数可以从循环初值、终值和步长计算出来:次数=INT((终值-初值+增量)/增量)。如果计算出的循环次数<0时,则按0处理,即一次也不执行循环。例:对于D0I=1,10,2其循环次数=INT((10-1+2)/2)=5次。I按序分别取值为:1,3,5,7,9。对于D0I=10,1,2则循环次数=0次。I不可取值,程序运行到这里时将跳过此循环。循环变量的初值、终值和步长可以为正或负。初值、终值可以为零。但步长不应
4、为0,否则循环变量的值永远不会超过终值,从而陷入死循环。例:对于D0I=-1,-3,-1其循环次数=INT((-3+1-1)/(-1))=3次。I按序分别取值为:-1,-2,-3。例:Doi=1.5,10.0,1.5循环次数?如果循环变量的类型和初值、终值和步长的类型不一致,则按赋值的规则处理,即需先将初值、终值和步长的类型转化成循环变量的类型,然后进行处理。为避免错误,应尽量使循环变量类型与初值、终值和步长的类型一致。例:对于D0I=1.5,3.6,1.2不要根据INT((3.6-1.5+1.2)/1.2)=2而认为循环次数为2,而应当先将实型量转化为整
5、型量,即变成相当的循环语句DOI=1,3,1其循环次数为3次而不是2次。例:对于D0X=1.5,3.6,1.2由于循环变量不是整型的而是实型的,它的循环次数为2次。X取值分别是1.5,2.7。例:doi=1.2,6.6,0.2循环次数为?由于实型数在运算和存储时有一些误差,因而循环次数的理论值与实际值之间会有一些差别。这种情况在程序设计中常有发生,而且比较隐蔽不易发现。所以应该避免使用实型的循环变量,用整型循环变量计算出的循环次数是绝对准确的。例:对于D0X=0.0,50.0,0.1理论循环次数=INT(50.1/0.1)=501,但实际上在许多计算机上它
6、只执行500次循环。原因是实数在内存中的误差使得增量值不是准确的0.1,由于循环的误差积累,到执行完500次循环后X的值可能已超过50.O,因而停止执行循环。改用整型循环变量时,则循环改写为:D0I=0,500;X=I/10。DO循环执行步骤(1).计算初值式、终值式、增量式的值,并将它们转换成循环变量的类型。(2).将初值赋予循环变量。(3).计算应循环的次数。(4).检查循环次数,若≤0则跳过循环体,执行循环终端语句下面的一个执行语句。如果>0,则执行循环体。(5).执行终端语句时,循环变量增值。(6).循环次数减1。(7).返回(4),重复执行(4)
7、、(5)、(6)、(7)。用do语句实现循环说明:(1)可用e1,e2,e3的值求出循环次数。计算公式:r=Int(e2-e1+e3)/e3①e3=0时为死循环例:doi=1.2,6.6,0.2r=int(6-1+0/0),0)(因为循环变量I是整型)②e1e2且e3>0,则循环次数为0循环终端语句F90规定:循环终端语句可以是除了GOTO、块IF、CASE、CYCLE、DO、ELSE、ELSEIF、ENDIF、END、ENDSELECT、EXIT、SELECTCASE、STOP和RETURN语句以外的任一可执行语句,如打印语句、赋
8、值语句、输入语句、逻辑IF语句等都可以作为终端语句。特殊的循环终端