fortran循环结构的实现5(注意事项)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
13
10 20
2. 对于任何形式的循环,都不允许循环的交叉; 对于任何形式的循环,都不允许循环的交叉;
DO 10 I=1, 5 DO 20 J=1, 3 M=I*J CONTINUE CONTINUE DO 10 I=1, 10 …… DO 10 J=0, 20, 2 …… CONTINUE
10 20
1. e1、e2 、 e3可以是常数、变量或表达式
C=5.0 DO 10,T= C,50.0/2.0,0.5 10, C,50.0/2.0, DO 10,T=5.0,25.0,0.5 10,T=5.0,25.0,
2. e1、e2 、 e3的值可以正或负, e1、e2的 的值可以正或负, 值可以为0 值可以为0, e3的值不应为0 的值不应为0 3. 脱离循环的条件:循环变量沿变化的 脱离循环的条件: 方向超过终值
15
5.3 当型循环的其他实现方法
1. do while语句 语句 * 统计平均成绩 integer count sum=0.0 count=0 read(*,*) score do 10 while(score.ge.0.0) sum=sum+score count=count+1 read(*,*) score 10 continue aver=sum/count write(*,*) 'count=',count write(*,*) 'average=',aver end
17
2. 用块 和GO TO语句实现当型循环 用块IF和 语句实现当型循环
判断n是否为素数 判断 是否为素数 read(*,*) n j=sqrt(real(n)) i=2 do 10 while((i.le.j).and. $ (mod(n,i).ne.0)) i=i+1 10 continue if(i.gt.j) then write(*,*) n,' is', $ ' a prime number' else write(*,*) n,' is not', $ ' a prime number' end if end C C 判断n是否为素数 判断 是否为素数 read(*,*) n j=sqrt(real(n)) i=2 if((i.le.j).and.(mod(n,i).ne.0)) i=i+1 goto 10 end if if(i.gt.j) then write(*,*) n,' is', ' a prime number' else write(*,*) n,' is not', ' a prime number' end if end
7
循环终端语句&继续语句( 循环终端语句&继续语句(CONTINUE语句) 语句)
循环终端语句 定义: 定义: 循环体中带有语句标号的最后一个语句
20 10 DO 10 I = 1,50 1, K=I*1 PRINT *,I,K 循环体
规定: 规定: 下列语句不能作为DO循环的终端语句: 循环的终端语句:
11
3. 可以用转移语句从循环体内转到循环 体外,也可以在循环体内转移, 体外,也可以在循环体内转移,但不允 许从循环外转到循环内; 许从循环外转到循环内;
DO 10 , I=1, 100 …… IF (I*I.GE.500) GOTO 100 非正常出口 …… 10 CONTINUE 正常出口 …… 100 PRINT *, I, I*I
20
10
打印九九表 open(1,file='out.dat') do 10 i=1,9 do 20 j=1,9 k=i*j write(*,*) i,'*',j,'=',k continue write(*,*) write(*,*) continue $ end 20 10
C C C C C
百钱买百鸡 100元钱买 只鸡 元钱买100只鸡 元钱买 公鸡5元 只 公鸡 元/只 母鸡3元 只 母鸡 元/只 小鸡1元 只 小鸡 元/3只 integer x,y,z do 10 x=0,19 do 20 y=0,33 z=100-x-y if(15*x+9*y+z.eq.300) write(*,*) x,y,z continue continue end
4. 正常出口&非正常出口; 正常出口&非正常出口;
12
DO 循环的嵌套(多重循环) 循环的嵌套(多重循环) 一个循环体内又完整的包含另一个循环结构 注意事项: 注意事项: 1. 嵌套循环的各层不允许使用同一个变 量名作为循环控制变量; 量名作为循环控制变量;
DO 20 I=1, 5 …… DO 10 I=2, 10, 2 …… CONTINUE …… CONTINUE
16
*
10 $
辗转相除求最大公约数 integer m,n,r,t read(*,*) m,n if(m.lt.n) then t=m m=n n=t end if r=mod(m,n) do 10 while(r.ne.0) m=n n=r r=mod(m,n) continue write(*,*) 'The greatest', ' common divisor is', n end
循环操作: 循环操作:重复执行一组指令 或一个程序段) (或一个程序段) 循环分类: 循环分类: 无条件的循环 有条件的循环
2
5.1 用GOTO语句实现循环 GOTO语句实现循环
例:打印30个学生的学号和成绩 打印30个学生的学号和成绩
N=1 1⇒ N 100 READ (*,*) NUM, GRADE WRITE (*,*) NUM, GRADE 输入NUM, 输入NUM,GRADE N=N+1 IF ( N.LE. 30 ) GOTO 100 N.LE. 打印NUM, 打印NUM,GRADE END N +1 ⇒ N
GOTO语句破坏了语句 GOTO语句破坏了语句 直到 N > 30 顺序执行的正常状况,不 GOTO <标号> <标号 标号> 符合结构化原则,因此一 属于直到型循环 般不提倡使用GOTO语句! 般不提倡使用GOTO语句!
3
5.2 用DO语句实现循环 DO语句实现循环
DO s[, ] v = e1, e2 [, e3]
DO 20 , N=1, 100 DO 20 , N=1, 100 M=2*N N=2*N PRINT *, M PRINT *, N 20 CONTINUE 20 CONTINUE
2. 循环变量的初值、终值和步长值在执 循环变量的初值、 行循环体期间不能改变; 行循环体期间不能改变;
DO 20 , I=K, J, M K=2*K J=J+1 M=M/2 PRINT *, K, J, M 20 CONTINUE
统计平均成绩 integer count sum=0.0 count=0 read(*,*) score if(score.ge.0.0) then sum=sum+score count=count+1 read(*,*) score goto 10 end if aver=sum/count write(*,*) 'count=',count write(*,*) 'average=',aver end
DO 10 I = 1,50 1, K=I*1 PRINT *,I,K IF( IF(K.GT.500) GOTO 100
9
10
继续语句(CONTINUE语句) 继续语句(CONTINUE语句) 形式: 形式: CONTINUE
DO 20 , I=1, 10 , 2 PRINT *, I 20 CONTINUE
作用: 作用:
ቤተ መጻሕፍቲ ባይዱ
将流程转移到逻辑上的下一个操作 将流程转移到逻辑上的下一个操作 优点: 循环范围清晰,易识别; 优点:1.循环范围清晰,易识别; 2.使一般可执行语句不再作为终端 语句,仅执行其语句本身功能; 语句,仅执行其语句本身功能; 3.不用记哪些语句不能作终端语句
10
DO 循环的一些规定 1. 循环变量可以在循环体中被引用,但 循环变量可以在循环体中被引用, 不应再被赋值; 不应再被赋值;
8
GOTO语句, DO语句, STOP语句, GOTO语句, DO语句, STOP语句, END语句, END语句, END IF语句,块IF语句, IF语句, IF语句, ELSE语句 ELSE语句 ,ELSE IF语句,等 IF语句,
逻辑IF语句可作为 逻辑IF语句可作为DO循环的终端语 句,但其内嵌语句不能是上述控制语句! 但其内嵌语句不能是上述控制语句!
19
* 用π2/6≈ 1/12+1/22+...+1/n2,求π值 值 read(*,*) n sum=0.0 i=1 10 if(i.le.n) then term=1.0/(i*i) sum=sum+term i=i+1 goto 10 end if pi=sqrt(6.0*sum) write(*,*) 'pi=',pi end
第一章 第二章 第三章 第四章 第五章 第六章 第七章 第八章
算法 计算机和计算机程序 Fortran语言程序设计初步 Fortran语言程序设计初步 逻辑运算和选择结构 循环结构的实现 Fortran的数据结构 Fortran的数据结构 数据的输入、输出 常用算法的程序设计举例
1
第五章 循环结构的实现
10 then
$
$
18
*
10
* 统计平均成绩 integer count sum=0.0 count=0 read(*,*) score do 10 while(score.ge.0.0) 10 sum=sum+score count=count+1 read(*,*) score continue aver=sum/count write(*,*) 'count=',count write(*,*) 'average=',aver end
3. 嵌套DO循环中,可以共用一个循环终端语句; 循环中,可以共用一个循环终端语句;
DO 10 I=1, 10 …… DO 20 J=0, 20, 2 …… CONTINUE CONTINUE
20 10
10
4. 可以从内层循环根据需要将控制转到外层循 环,但不允许从外层循环将控制转到内层循环
14
C
5
4. 循环次数计算公式为:r =INT((e2- e1+ e3)/ e3) 循环次数计算公式为:
DO 20,I=1,10,2 20,I=1,10, 循环次数: INT((10循环次数:r =INT((10- 1+ 2)/ 2) =INT(5.5)=5次 INT(5.5)=5次
5. 如果v的类型和 e1、e2 、 e3的类型不一致, 如果v 的类型不一致, 先将e 先将e1、e2 、 e3的类型化成v的类型,然后处 的类型化成v的类型, 理 DO 20,X=1.5,3.6,1.2 20,X=1.5,3.6, 循环次数: INT((3.6循环次数:r =INT((3.6- 1.5+ 1.2)/ 1.2)=2 循环次数: INT((3循环次数:r =INT((3- 1+ 1)/ 1)=3 6. 如果计算出循环次数 r<0 时,按! 处理, 避免使用实型的循环变量! 避免使用实型的循环变量 r=0 处理, 即一次也不执行循环 用整型的循环变量时, 用整型的循环变量时,计算 循环次数: INT((1循环次数:r =INT((1- 10+ 2)/.2)= -3
循环终端 语句标号 循环 变量 循环变 量初值 循环变 量终值 循环变 量增量
DO 10 N=1, 30 READ (*,*) NUM, GRADE 10 WRITE (*,*) NUM, GRADE END
DO语句 DO语句 循环体
4
DO s[, ] v = e1, e2 [, e3]
DO语句几点说明: 语句几点说明:
DO 10,I=10,1,2 10,I=10, 出的循环次数是绝对正确的! 出的循环次数是绝对正确的!
6
DO 循环执行过程
s DO s[, ] v = e1, e2 [, e3] …… 循环体 …… DO语句 DO语句
DO 计算e1、e2 、 e3的值 计算e 循 e1 ⇒ v 环 计算循环次数:r =INT((e - e + e )/ e ) 计算循环次数: 2 1 3 3 属 当r > 0 于 循环体语句 当 v + e3 ⇒ v 型 r −1 ⇒ r 循 环 适用范围:循环次数已知 适用范围:
相关文档
最新文档