Fortran77教程-5循环结构的实现
Fortran77结构化程序设计
![Fortran77结构化程序设计](https://img.taocdn.com/s3/m/709cf39a294ac850ad02de80d4d8d15abe2300c6.png)
Fortran77结构化程序设计Fortran77结构化程序设计章节一、引言1.1 程序设计的概述1.2 Fortran77的特点1.3 编写结构化程序的优势章节二、基本语法和数据类型2.1 Fortran77的语法规则2.2 数据类型和变量2.2.1 整型2.2.2 实型2.2.3 逻辑型2.2.4 字符型2.2.5 数组2.2.6 字符串章节三、控制结构3.1 顺序结构3.2 分支结构3.2.1 IF语句3.2.2 CASE语句3.3 循环结构3.3.1 DO循环3.3.2 WHILE循环3.3.3 循环控制语句章节四、子程序和函数4.1 子程序的定义和调用4.2 函数的定义和调用4.3 参数传递4.4 递归调用章节五、文件操作5.1 文件的打开和关闭5.2 读写文件的基本操作5.3 文件的格式化读写5.4 随机访问文件章节六、错误处理和调试技巧6.1 错误类型和处理方法6.2 调试工具和技巧章节七、实例应用7.1 计算圆的面积7.2 求解线性方程组7.3 求解微分方程7.4 图像处理附录:常用函数库A.1 标准数学函数库A.2 字符串处理函数库A.3 文件操作函数库A.4 其他常用函数库附件:示例代码文件法律名词及注释:1、Fortran77:一种高级编程语言,用于科学计算和工程应用。
2、数据类型:变量的属性,如整型、实型、字符型等。
3、分支结构:程序中根据条件选择不同执行路径的结构。
4、循环结构:程序中重复执行某段代码的结构。
5、子程序:独立的代码块,可以被多次调用。
6、函数:接受输入参数并返回结果的子程序。
7、文件操作:程序与外部文件的读写交互。
8、错误处理:处理程序执行过程中的错误和异常情况。
9、调试:通过检查和修复程序错误来确保程序正确执行。
FORTRAN77编程基础
![FORTRAN77编程基础](https://img.taocdn.com/s3/m/75d02b6d33687e21af45a9cf.png)
第三讲FORTRAN 77 编程基础1主要内容⏹FORTRAN 77 基础⏹数据结构⏹控制结构(选择与循环)⏹基本输入输出⏹函数与子程序⏹计时函数⏹文件操作FORTRAN 基础⏹FORTRAN语言发展概况●FOR mula TRAN slation●适用于工程及科学计算的一种高级程序设计语言●1951 年由约翰•贝克斯等人开始研发●1957 年第一个FORTRAN 程序在IBM704 机上运行●1966 和1978 年先后颁布FORTRAN66 和FORTRAN77●1991 和1997 年颁布了Fortran 90和Fortran 95●2004 年公布Frotran2003 标准,面向对象程序设计●2010 年公布Fortran 2008 标准FORTRAN 编译器⏹免费的FORTRAN 编译器⏹商业版FORTRAN 编译器●GNU FORTRAN /gfortran●G95●Intel Fortran 编译器(非商业版)●Power Station 、Compaq Visual Fortran (已停止更新)●Intel Fortran●PGI Fortran●Absoft Pro Fortran●Lahey Fortran程序开发环境⏹Linux 系统⏹Windows 系统●字符界面,命令行方式●Code::Blocks + GCC●Microsoft Visual Studio + Intel Visual Fortran ●Code::Blocks + GCC一个简单的编程示例parameter(n=100)real a(n, n), b(n, n), c(n, n)cdo j = 1, ndo i = 1, na(i,j) = 1.0/(i+j‐1)b(i,j) = 1.0c(i,j) = 0.0enddoenddocdo i = 1, ndo j = 1, ndo k = 1, nc(i,j) = c(i,j) + a(i,k) * b(k,j) enddoenddoenddocprint*, "c(1,1) = ", c(1,1)stopendFORTRAN 程序分析●一个FORTRAN 源程序由一个或多个程序单元组成每个独立的程序单元以“end”语句结束●每个程序单元包括若干行(一行不能写多条语句,但一条语句可以分几行写)●每个程序单元可包含语句行和非语句行(注释行)●语句行:可执行语句和非执行语句行●非执行语句在所有可执行语句行前面●语句可以根据需要设置标号●各类语句在程序单元中的位置必须满足一定规则●程序必须按规定的格式书写源程序书写格式●每行只能在72 列内书写,并把80 列分为4 个区●1~5列:标号区(1~5 位整数)如果第1 列为“* ”或“c ”,则为注释行●第6列:续行标志区续行符可以是任意非空格/非零字符最多19 个续行●7~72 列:语句区(一行只能写一条语句)●73~:被忽略,有的编译器会报错⏹FORTRAN 77 源程序必须按规定的格式书写(Fixed Format 固定格式)⏹源程序●以.f为扩展名●纯文本文件,可使用任何文本编辑器编写⏹编译与执行g77‐O2 –o输出文件名源程序文件名./输出文件名g77 ‐O2 –o hello hello.f./hellog77常用选项-o:指定生成的可执行文件的文件名,缺省为a.out -c:只编译不链接,即只生成目标文件(.o文件)-I path:指定或增加包含文件(如*.h)的搜索路径-L path:指定(增加)库文件的搜索路径-l name:与库文件lib name.a链接-O, -O1, -O2, -O3:优化开关-g:在目标码中加入更多信息,用于程序调试●英文字母:A B C D ... ... X Y Z●下划线和阿拉伯数字:_ 0 1 2 3 4 5 6 7 8 9●特殊符号:空格= + -* / ( ) , . ' : "☞FORTRAN 不区分大小写☞早期的FORTRAN 卡片不允许小写故很多FORTRAN 程序源代码都是大写的FORTRAN 数据结构⏹F77支持基本类型和构造类型的数据结构●基本类型●构造类型:数组、记录、文件●F77 不支持指针整型、实型、双精度、复型、逻辑型、字符型正、负整数和零,缺省取值范围为:[-231, 231-1]②实型常量(Real)小数或指数形式:0.876 →8.76E-1 →87.6E-2指数部分只能是整数,取值范围:[10-38, 1038]③双精度常量(Double precision)8 字节:0.125D+45,取值范围:[10-308,10308]④复型常量(Complex)8 字节:(实数,实数)⑤逻辑型常量(Logical)⑥字符型常量(Character)⏹变量类型整型、实型、双精度、复型、逻辑型、字符型⏹变量名●第一个字符必须是字母●后面可以跟1~5 个字母、下划线或数字现在的FORTRAN 编译器允许多于6 个字符(g77 最多支持约51个字符)●变量名中的空格不起作用。
Fortran77结构化程序设计
![Fortran77结构化程序设计](https://img.taocdn.com/s3/m/41f5d9830d22590102020740be1e650e53eacf67.png)
Fortran77结构化程序设计Fortran77结构化程序设计简介Fortran(Formula Translating System)是一种编程语言,特别适用于科学和工程领域的计算。
Fortran的第一版于1957年发布,至今已经发展到Fortran77版本。
Fortran77引入了结构化程序设计的概念,使得程序更易于编写和维护。
本文将介绍Fortran77结构化程序设计的基本原则、控制结构和常用语法。
基本原则结构化程序设计的目标是编写易读、易维护、易的程序。
为了达到这个目标,Fortran77结构化程序设计遵循以下基本原则:1. 模块化:将程序划分为小块的独立模块,每个模块负责完成特定的功能。
2. 单一入口:每个模块只有一个入口点,使得程序的执行流程清晰可见。
3. 自顶向下设计:从程序的总体结构开始,逐步细化到具体的算法和实现细节。
4. 注重可读性:使用有意义的变量和函数名,添加适当的注释,使得程序易于阅读和理解。
控制结构Fortran77提供了几种常用的控制结构来实现程序的流程控制:顺序结构顺序结构是Fortran77中最基本的控制结构,程序按照代码的顺序依次执行。
例如:fortranPROGRAM mnINTEGER :: i, sumsum = 0DO i = 1, 10sum = sum + iEND DOWRITE(,) 'Sum:', sumEND PROGRAM mn上述代码展示了一个简单的程序,通过循环计算1到10的和,并输出结果。
分支结构Fortran77提供了基本的分支控制结构:- `IF`语句:可以根据条件选择性执行代码块。
例如:fortranPROGRAM mnINTEGER :: iDO i = 1, 10IF (i < 5) THENWRITE(,) i, '小于5'ELSEWRITE(,) i, '大于等于5'END IFEND DOEND PROGRAM mn在上述代码中,根据变量`i`的值判断是否小于5,并分别输出不同的信息。
fortran循环结构及基本语句
![fortran循环结构及基本语句](https://img.taocdn.com/s3/m/bb3eab7fbf1e650e52ea551810a6f524ccbfcb2d.png)
fortran循环结构及基本语句Fortran中的循环结构包括DO循环和DO WHILE循环。
基本语句包括赋值语句、条件语句和IO语句。
1.DO循环结构:DO循环结构用于重复执行一段代码块,语法如下:DO variable = start, end, step!代码块ENDDO在循环开始前,将变量初始化为start的值,然后执行代码块。
然后将变量增加step的值,并检查是否达到end的值,如果没有达到则继续执行代码块,直到达到end的值为止。
2.DOWHILE循环结构:DOWHILE循环结构用于在满足条件时重复执行一段代码块,语法如下:DO WHILE (condition)!代码块ENDDO在每次循环开始前,检查condition是否为真,如果为真则执行代码块,然后再次检查condition。
只有当condition为假时,循环才会结束。
3.赋值语句:赋值语句用于将一个值赋给一个变量,语法如下:variable = expression可以使用算术运算符和函数来计算expression的值,并将结果赋给变量。
4.条件语句:条件语句用于根据条件选择执行不同的代码块,常用的条件语句有IF语句和SELECTCASE语句。
-IF语句的语法如下:IF (condition) THEN!代码块1ELSE IF (condition) THEN!代码块2ELSE!代码块3ENDIF根据condition的值选择执行代码块1、代码块2或代码块3-SELECTCASE语句的语法如下:SELECT CASE (expression)CASE (value1)!代码块1CASE (value2)!代码块2CASEDEFAULT!代码块3ENDSELECT根据expression的值选择执行相应的代码块,如果没有匹配的值,则执行默认的代码块。
5.IO语句:IO语句用于输入和输出数据,常用的IO语句有WRITE和READ语句。
Fortran程序设计循环结构
![Fortran程序设计循环结构](https://img.taocdn.com/s3/m/ab2661441eb91a37f1115c89.png)
循环变量的UM=0. I=1 DO WHILE(1./ I**2>=1E-6) SUM=SUM+1./I**2 I=I+1 ENDDO
例:求两个整数的最大公约数 (DO WHILE 结构程序见DIVISOR.F90) read *, m,n
do while (m/=n) do while (m>n) m=m-n end do
do while (n>m)
n=n-m end do end do print *, '最大公约数=',m
也称“循环变量”
行号
行号
循环终端语句:
循环终端语句为一般的执行语句。 F90 规 定 : 循 环 终 端 语 句 可 以 是 除 了 GOTO 、 块 IF 、 CASE 、 CYCLE 、 DO 、 ELSE 、 ELSE IF 、 END IF 、 END 、 END SELECT 、 EXIT 、 SELECT CASE 、 STOP 和RETURN语句以外的任一可执行语句,如打印语句、赋 值语句、输入语句、逻辑IF语句等都可以作为终端语句。 特殊的循环终端语句是: END DO(常用于无语句标号时 ) 和CONTINUE(常用于有语句标号时 )。END DO语句使老 的CONTINUE语句显得没有什么用处了,虽然F90的向下 兼容性使CONTINUE语句仍然可用,但新编写的程序应该 尽量使用以END DO结束的块DO构造
end
例:打印“九九表”,即 1×1=1
1×2=2
……
循环结构的Fortran程序设计
![循环结构的Fortran程序设计](https://img.taocdn.com/s3/m/4dc28a1eb207e87101f69e3143323968001cf46f.png)
3 Fortran循环结构程序设计的其它问题
implicit none integer m,i,j read*,m j=sqrt(real(m)) do i=2,j if(mod(m,i).eq.0) exit end do if(i>>1)then print*,m,'是素数' else print*,m,'不是素数' end if End
三、do while循环举例
例1:输入一个整数,输出其位数。
分析:输入的整数存入变量m中,用变量n来统计m的位数,程序为:
Integer:: m,n=0 read*,m Do while (m>0) n=n+1 m=m/10 end do print*,‘n=’,n End 比如:129 ↙ n=3
(4)对于循环次数确定的循环问题也可以使用do while语句来实现,比如:求5!
integer:: m=1,n=1 do while (m<=5) n=n*m m=m+1 end do print*,n End
二、do while循环的执行过程
Do while循环的执行过程可示意为右图,说明如下:
分析:最大公约数在[1,min(m,n)]范围内,且同时能被m和n整除,因此利用do i=min(m,n),1搜寻,一旦mod(m,i)=0、mod(n,i)=0则此时的i就是最大公约数,并利用exit退出循环。然后利用最大公约数,求出最小公倍数。程序为:
If(条件)exit
表示条件为真执行exit终止循环,为假时exit不执行,将继续执行循环。
(2)循环变量与参数表达式数据类型不一致时,其处理方法与赋值语句相同,即先计算参数表达式、并把结果转换成循环变量类型,然后进行处理。比如,“do i=1.3,5.9,2.6”相当于“do i=1,5,2”
Fortran77中文帮助教程
![Fortran77中文帮助教程](https://img.taocdn.com/s3/m/a3849687b9d528ea81c779d7.png)
第一章 FORTRAN语言程序设计初步...................................................................................................1 1.1 FORTRAN语言发展概况..........................................................................................................1 1.2 简单的FORTRAN程序分析......................................................................................................1 1.3 FORTRAN 源程序的书写格式................................................................................................1 1.4 Fortran程序的编辑与运行 ........................................................................................................1 1.5 常 量 ..........................................................................................................................................1 1.5.1 整型常量 .........................................................................................................................1 1.5.2 实型常量 .........................................................................................................................1 1.6 变 量 ..........................................................................................................................................2 1.6.1 变量的概念 .....................................................................................................................2 1.6.2 变量名 .............................................................................................................................2 1.6.3 变量类型 .........................................................................................................................2 1.7 Fortran内部函数 ........................................................................................................................2 1.8 Fortran算术表达式 ....................................................................................................................3 1.8.1 算术运算符和运算优先级 .............................................................................................3 1.8.2 表达式运算中的类型问题 .............................................................................................3 1.8.3 运算的误差问题 .............................................................................................................3 1.9 赋值语句 ....................................................................................................................................3 1.10 简单输出语句 ..........................................................................................................................3 1.11 简单输入语句 ..........................................................................................................................4 1.12 PARAMETER语句 ..................................................................................................................5 1.13 END,STOP,PAUSE语句 ....................................................................................................5 总结 ...................................................................................................................................................5
第5章 循环 fortran
![第5章 循环 fortran](https://img.taocdn.com/s3/m/c3bfef26ed630b1c59eeb565.png)
例5-2 使用循环来计算2+4+6+8+10 PROGRAM EX0502 IMPLICIT NONE INTEGER, PARAMETER :: LIMIT=10 ! 计数器的上限 INTEGER COUNTER ! 计数器 INTEGER :: ANS = 0 ! 拿来累加使用 DO COUNTER=2, LIMIT, 2 ANS = ANS + COUNTER END DO WRITE(*,*) ANS ! STOP END
1.确定性循环
(1)变量用来控制循环次数,一般称为循环变量; (2)表达式1 代表循环变量的初值; (3)表达式2 代表循环变量的终值; (4)表达式3 代表循环变量的步长,缺省步长为1。 (5)循环次数的计算按下面公式:
MAX ((表达式2 - 表达式1+ 表达式 3)/表达式3,0)
例5-3 DO 循环的嵌套使用
PROGRAM EX0503 IMPLICIT NONE INTEGER I, J DO I=1, 3 DO J=1, 3 WRITE ( *, "(I2, I2)" ) I, END DO WRITE (*,*) "ANOTHER CYCLE" END DO END 显式循环(DO END DO)
第三节 循环结构
署名的循环
例5-8
功能是循环时能明确地知道END DO这个描述的位置是否正确 。
PROGRAM EX0508 IMPLICIT NONE INTEGER :: I, J OUTER: DO I=1, 3 ! 循环取名为OUTTER INNER: DO J=1, 3 ! 循环取名为INNER WRITE ( *, " ('( ',I2,' ,' ,I2, ') ') " ) I,J END DO INNER ! 结束INNER这个循环 END DO OUTER ! 结束OUTTER这个循环 !STOP END
FORTRAN语言-FORTRAN77结构化程序设计课程设计
![FORTRAN语言-FORTRAN77结构化程序设计课程设计](https://img.taocdn.com/s3/m/29d1a472c950ad02de80d4d8d15abe23482f03f9.png)
FORTRAN语言-FORTRAN77结构化程序设计课程设计一、课程设计背景FORTRAN是一种编程语言,最早被用于解决科学和工程领域的计算问题。
它是一种高级语言,可以处理数值计算、科学计算和工程计算等问题。
FORTRAN语言对于科学计算领域来说至关重要,许多科学计算的软件都是使用FORTRAN语言编写的。
本课程设计旨在帮助学生掌握FORTRAN语言的基本知识,了解FORTRAN77结构化程序设计的基本理论和方法,并通过程序设计实践来巩固和深化所学知识。
二、课程设计目标本课程设计的主要目标是:•掌握FORTRAN语言的基本语法和数据类型;•了解FORTRAN77结构化程序设计的基本理论和方法;•了解FORTRAN语言在科学计算领域的应用;•能够使用FORTRAN语言进行简单的程序设计;•培养学生的分析和解决问题的能力。
三、课程设计内容1. FORTRAN语言的基本语法和数据类型本部分主要包括以下内容:•程序的基本结构和格式;•变量的定义和使用;•常量的使用;•运算符和表达式;•控制结构:分支语句和循环语句;•数组和数组的使用;•子程序的定义和使用;•文件的输入和输出。
2. FORTRAN77结构化程序设计的基本理论和方法本部分主要包括以下内容:•结构化程序设计的基本概念;•模块化程序设计的基本原理;•数据流程图和程序流程图的绘制方法;•程序的调试和测试方法。
3. FORTRAN语言在科学计算领域的应用本部分主要介绍FORTRAN语言在科学计算领域的应用,例如在物理、化学、地质、天气预报等领域中的应用。
学生可以了解FORTRAN语言在实际应用中的重要性和应用范围。
4. 程序设计实践本部分主要是学生进行FORTRAN语言的程序设计实践,设计内容可从课本和其他相关资料中选择。
四、课程设计要求本课程设计要求学生结合所学知识,完成以下任务:1.编写一个简单的FORTRAN程序,例如计算圆周率或者计算三角函数等;2.编写一个FORTRAN程序,读入10个整数,计算它们的平均值;3.编写一个FORTRAN程序,利用子程序计算简单的各种图形的面积。
fortran循环结构及基本语句..
![fortran循环结构及基本语句..](https://img.taocdn.com/s3/m/8711eb37bd64783e09122bd7.png)
循环体的循环次数事先不确定(如[例5.2]中循环结构),这类循环 结构称为非确定性循环,或称“条件型”循环,使用条件型循环语 句(如DO WHILE循环语句)实现这类循环结构。条件型循环又分 “当型”循环和“直到型”循环。
初值循环变量v v≤终值 真 v+步长v 假
判定条件 真 循环体
假 循环体
DO循环语句执行过程说明:下面DO循环语句的循环次数为5: M=1;N=5;L=1
DO I=M,N+5,L+1
write(*,*)I,M,N,L
!输出1、3、5、7、9
M=M+1;N=N*I;L=2*L+I ENDDO
程序运行后,输出结果为:
1 3 5 7 9 1 2 3 4 5 5 5 15 75 525 1 3 9 23 53 计算表达式e1,e2,e3 e1 v 计算循环次数r:MAX(INT((e2-e1)/e3+1),0)r r 0 假
假
判定条件 真
计数型
当型
直到型
[例5.1] 求S=1+2+3+…+N的值(N由键盘输入,N>2)。编写程序。 解:求解这一问题,将执行N-1次加法运算。 如果将等式写成S=0+1+2+…+N,则执行N次加法运算。 重复问题易采用循环结构实现。 用S保存和,用N保存最大求和值,用I作计数器。编写程序如下:
循环体dowhile循环语句在每次循环体执行前都要计算表示循环控制条件的逻辑表达式其计算结果决定循环体是否继续执行循环体的执行过程必须对循环控制条件产生影响
第五讲
循环结构及基本语句
5.1 循环结构概述
对于问题规模较大的重复问题适宜采用循环结构。
fortran 循环语句
![fortran 循环语句](https://img.taocdn.com/s3/m/60bd4e52571252d380eb6294dd88d0d233d43cdc.png)
fortran 循环语句
在Fortran中,有多种类型的循环语句可以使用。
下面是一些常见的循环语句类型:
1. DO循环:
DO循环用于执行一系列语句指定的次数。
它有两种形式:
- DO循环的计数形式:
DO i = start, end, step
! 执行的语句
END DO
在计数形式中,循环变量i从start开始,以步长step增加,直到达到或超过end。
- DO循环的无限形式:
DO
! 执行的语句
IF (condition) EXIT
END DO
在无限形式中,循环会无限循环,直到满足条件condition,然后跳出循环。
2. DO WHILE循环:
DO WHILE循环用于在满足某个条件的情况下重复执行一系列语句。
DO WHILE (condition)
! 执行的语句
END DO
在DO WHILE循环中,先检查条件是否满足,如果满足,则执行循环体中的语句。
然后再次检查条件,如果仍然满足,则继续执行。
循环终止的条件是条件不再满足。
3. DO UNTIL循环:
DO UNTIL循环与DO WHILE循环类似,不同之处在于它会在条件为真之前重复执行一系列语句。
语法如下:
DO
! 执行的语句
END DO
在DO UNTIL循环中,先执行循环体中的语句,然后检查条件是否满足。
如果条件为假,则继续循环。
循环终止的条件是条件为真。
这些是在Fortran中经常使用的循环语句。
使用适当的循环语句可以帮助您更有效地编写程序。
Fortran程序设计循环结构上
![Fortran程序设计循环结构上](https://img.taocdn.com/s3/m/f6bf3d32ff00bed5b9f31d89.png)
应用举例
例 6-1 求1+1/2+1/3+……+1/N的值。
例6-2 求一批数中负数的个数及负数的总和。要求数据一 个一个地由键盘输入,输入的数据为0时终止循环。
6.3 带循环变量的DO结构
带循环变量DO结构的一般形式
[DO结构名:] DO, V=E1,E2[,E3]
循环体 END DO [DO结构名] V是循环控制变量,可以是整型或实型。 E1是循环控制变量的初始值; E2是循环变量的终止 值;E3是循环变量的增量。 E1、E2、E3可以是整型、实型的常数、变量或表达 式,当为表达式时,其中涉及的变量应具有具体的值。 符号可正可负。
EXIT语句
1. EXIT语句:
格式:EXIT [DO 结构名] 作用:停止循环,将控制转移到当前循环或指定结构之外。 单独使用将无条件终止循环,一般的用法是有条件的控 制循环出口。格式为: IF(逻辑表达式)EXIT [DO 结构名] 功能:当条件为真时,停止正在进行的循环,将控制转 移到EXIT后指定的结构之外,若没有指定结构名,则跳 出当前循环。
DO M END DO 执行过程: 从DO语句进入循环,执行读语句、累加、输出;然后遇到 ENDDO语句,然后返回循环体的第一条语句,继续执行循环体语 句,一直进行下去。 该DO 结构是一个无休止的的循环,称为死循环 要终止该循环必须添加一个EXIT语句。
例2:读入某战士打靶的成绩,计算其平均成绩。
INTERGER:: S,MARK,I
REAL::AVE S=0 DO I=1,10 READ *,MARK
S=S+MARK
END DO AVE=S/10.0 WRITE(*,*)‘AVE=‘,AVE END 带循环变量的循环结构
Fortran77教程-5循环结构的实现
![Fortran77教程-5循环结构的实现](https://img.taocdn.com/s3/m/1d4a90d126fff705cc170a6d.png)
10
$ $
判断n是否为素数 logical w integer r read(*,*) n w=.true. i=2 j=sqrt(real(n)) r=mod(n,i) if(r.eq.0) then w=.false. else i=i+1 end if if((i.le.j).and.w) goto 10 if(w) then write(*,*) n, ' is', ' a prime number' else write(*,*) n, ' is not', ' a prime number' end if end
逻辑IF语句可作为DO循环的终端语 句,但其内嵌语句不能是上述控制语句!
DO 10 I = 1,50 K=I*1 PRINT *,I,K IF(K.GT.500) GOTO 100
9
10
继续语句(CONTINUE语句)
形式:
CONTINUE
DO 20 , I=1, 10 , 2 PRINT *, I 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
4. 正常出口&非正常出口;
12
DO 循环的嵌套(多重循环) 一个循环体内又完整的包含另一个循环结构
第五章 fortran循环结构
![第五章 fortran循环结构](https://img.taocdn.com/s3/m/8c322c621ed9ad51f01df20c.png)
分析下面的程序:
INTEGER X,Y,Z,K X=1 Y=7 Z=2 DO K=X,Y,Z+1 X=2 Y=Y+X Z=Z*K PRINT *, K ,X,Y,Z END DO END 程序的执行结果为: 1 2 9 4 2 11 7 2 13 2 8 56
例
INTEGER K DO K=1,5,2 K=K+1 PRINT *,K END DO END 编译时将给出错误信息: error FOR3598: assignment to DO variable K detected between K and =
例5.3 Fibonacci数列定义如下: F1=1 F2=1 Fn=Fn-1+Fn-2 (n>2) 求Fibonacci数列的前30项。
例5.4 所谓“水仙花数”是指一个三位整数,其各位数字 立方和等于该数本身。例如,153就是一个水仙花数。输 出全部“水仙花数”。
在[100,999]范围内,对所有整数逐一验证 是否符合的条件,输出符合条件的数。这 种方法称为穷举法。
例
INTEGER X DO X=1.2,5.6,2.4 PRINT *,X END DO END 程序执行后的输出结果为: 1 3 5 如果循环变量的步长为0,程序在编译和连接时 都没有问题,但在执行过程中求循环执行次数时 将出现语法错,即进行了除零运算。这是应当避 免的。
计算e1、e2、e3的值 e1→i 计算循环次数r r=0? N 执行循环体 Y
(3) 退出循环后循环变量的值与最后一次循 环时循环变量的值不同,前者比后者多 一个步长。例如: DO K=1,10,2 L=K END DO PRINT *,K,L END 程序的执行结果为: 11 9
Fortran基础教程
![Fortran基础教程](https://img.taocdn.com/s3/m/e539ec1bf12d2af90242e6d8.png)
⑶第6列:续行标志区
(非空格或非零字符;最多19个续行)
⑷7~72列:语句区
(书写语句;一行只能写一条语句)
⑸73~80列:语句注释区
(一般作编号注释)
2016/6/1 12
3.4 Fortran程序的编辑与运行
Fortran PowerStation 4.0集成开发环境 简 介
3.5 常 量
说明: ⑴一个数值用指数形式表示时有两种表达方式: ①一个基本实数后面跟指数部分。 例: 0.876→8.76E-1 -2589.4→-2.5894E+3 ②一个整数后面跟指数部分。 例: 0.876→876E-3 -2589.4→-25894E-1
2016/6/1 20
3.5 常 量
量
注意几点: ⑴变量名不区分大小写字母。 例:TOTAL,Total,total 代表同一变量 ⑵变量名中的空格不起作用。 例:abc,a bc,ab c,a b c 代表同一变量 ⑶变量名尽量做到“见名知义” AVER、SUM、Imax ⑷允许变量名与语言中具有特定含义的字(“保留字”) 同名。 例:sin,read,open,end,… 建议不要使用fortran中具有特定含义的字作变量名
Fortran语言是一种适合于科学 和工程计算问题的程序设计语言; 也是计算机高级语言发展史上使用 最早的一种程序设计语言。
2016/6/1
4
3.1 Fortran语言的发展概况
Fortran语言的发展过程:
• 1951年由约翰· 贝克斯等人开始研究Fortran语言; • 1957年第一个Fortran程序在IBM704机上运行; • 1958和1962年先后推出FortranⅡ和FortranⅣ; • 1966和1978年先后颁布Fortran66和Fortran77; • 1991年颁布了Fortran90。 • 现在已经有了Fortran 95, Fortran 2003
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
5. 如果v的类型和 e1、e2 、 e3的类型不一致, 先将e1、e2 、 e3的类型化成v的类型,然后处 理 DO 20,X=1.5,3.6,1.2 循环次数:r =INT((3.6- 1.5+ 1.2)/ 1.2)=2 循环次数:r =INT((3- 1+ 1)/ 1)=3 6. 如果计算出循环次数 r<0 时,按 r=0 处理, 避免使用实型的循环变量! 即一次也不执行循环 用整型的循环变量时,计算
逻辑IF语句可作为DO循环的终端语 句,但其内嵌语句不能是上述控制语句!
DO 10 I = 1,50 K=I*1 PRINT *,I,K IF(K.GT.500) GOTO 100
9
10
继续语句(CONTINU 10 , 2 PRINT *, I 20 CONTINUE
作用: 将流程转移到逻辑上的下一个操作 优点:1.循环范围清晰,易识别; 2.使一般可执行语句不再作为终端 语句,仅执行其语句本身功能; 3.不用记哪些语句不能作终端语句
10
DO 循环的一些规定 1. 循环变量可以在循环体中被引用,但 不应再被赋值;
DO 20 , N=1, 100 DO 20 , N=1, 100 M=2*N N=2*N PRINT *, M PRINT *, N 20 CONTINUE 20 CONTINUE
20
3. 用READ语句和GO TO语句实现当型循环
自学!
5.4 直到型循环的实现
用逻辑if语句可实现直到型循环。 C 求1-1/2+1/3+...+1/99-1/100的值 integer sign sum=1.0 deno=2.0 sign=1 10 sign=(-1)*sign term=sign/deno sum=sum+term deno=deno+1 if(deno.le.100) goto 10 write(*,*) sum end
统计平均成绩 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
22
C Fibonacci数列问题 C 1,1,2,3,5,8,13,21,34... f1=1.0 f2=1.0 write(*,*) f1 write(*,*) f2 n=3 f=f1+f2 10 write(*,*) f f1=f2 f2=f f=f1+f2 n=n+1 if((n.le.30).and.(f.le.1e5)) goto 10 end
20 10
10
4. 可以从内层循环根据需要将控制转到外层循 环,但不允许从外层循环将控制转到内层循环
14
C
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
2. 循环变量的初值、终值和步长值在执 行循环体期间不能改变;
DO 20 , I=K, J, M K=2*K J=J+1 M=M/2 PRINT *, K, J, M 20 CONTINUE
11
3. 可以用转移语句从循环体内转到循环 体外,也可以在循环体内转移,但不允 许从循环外转到循环内;
DO 10 , I=1, 100 …… IF (I*I.GE.500) GOTO 100 非正常出口 …… 10 CONTINUE 正常出口 …… 100 PRINT *, I, I*I
GOTO语句破坏了语句 直到 N 30 顺序执行的正常状况,不 GOTO <标号> 符合结构化原则,因此一 属于直到型循环 般不提倡使用GOTO语句!
3
5.2 用DO语句实现循环
DO s[, ] v = e1, e2 [, e3]
循环终端 语句标号 循环 变量 循环变 量初值 循环变 量终值 循环变 量增量
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
21
C
判断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 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
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
4. 正常出口&非正常出口;
12
DO 循环的嵌套(多重循环) 一个循环体内又完整的包含另一个循环结构
注意事项: 1. 嵌套循环的各层不允许使用同一个变 量名作为循环控制变量;
DO 20 I=1, 5 …… DO 10 I=2, 10, 2 …… CONTINUE …… CONTINUE
13
10
20
2
5.1 用GOTO语句实现循环
例:打印30个学生的学号和成绩
N=1 1 N 100 READ (*,*) NUM, GRADE WRITE (*,*) NUM, GRADE 输入NUM,GRADE N=N+1 IF ( N.LE. 30 ) GOTO 100 打印NUM,GRADE END N 1 N
第一章 第二章 第三章 第四章 第五章 第六章 第七章 第八章
算法 计算机和计算机程序 Fortran语言程序设计初步 逻辑运算和选择结构 循环结构的实现 Fortran的数据结构 数据的输入、输出 常用算法的程序设计举例
1
第五章 循环结构的实现
循环操作:重复执行一组指令 (或一个程序段) 循环分类: 无条件的循环 有条件的循环
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
10 then
$
$
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
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
DO 10 N=1, 30 READ (*,*) NUM, GRADE 10 WRITE (*,*) NUM, GRADE END
DO语句 循环体
4
DO s[, ] v = e1, e2 [, e3]
DO语句几点说明:
1. e1、e2 、 e3可以是常数、变量或表达式
C=5.0 DO 10,T= C,50.0/2.0,0.5
DO 10,I=10,1,2 出的循环次数是绝对正确的! 循环次数:r =INT((1- 10+ 2)/.2)= -3