Fortran基本用法
fortran 语言编程

fortran 语言编程Fortran 语言编程Fortran(Formula Translation)是一种面向科学计算和工程计算的高级编程语言。
它于1957年诞生于IBM,是最早被广泛采用的科学计算语言之一,目前已经发展到第四个版本(Fortran 2018)。
Fortran是一种编译型语言,它通过编写源代码并使用编译器将其转换成机器语言来执行。
本文将详细介绍Fortran语言的基础知识、语法规则和常用的编程技巧,以帮助读者了解和掌握这门强大的科学计算语言。
第一步:安装Fortran编译器要开始编写和运行Fortran程序,首先需要安装Fortran编译器。
有多种Fortran编译器可供选择,其中最常用的是GNU Fortran(gfortran)和Intel Fortran Compiler(ifort)。
可以从官方网站或其他可信的来源获得这些编译器的安装程序,并按照提示进行安装。
第二步:编写并编译Fortran程序在开始编写Fortran程序之前,需要了解Fortran的基本语法规则。
Fortran使用固定格式或自由格式,固定格式的源代码按照列格式排列,每行的前6列被保留用于行号和注释,从第7列开始是可执行代码。
自由格式没有列格式的限制,更加灵活,但在编译阶段需要指定自由格式。
下面是一个简单的Fortran程序示例,用于计算并输出两个数的和:fortranprogram additionimplicit noneinteger :: a, b, sumprint *, "Enter two numbers:"read *, a, bsum = a + bprint *, "The sum is:", sumend program addition将以上代码保存为一个以.f90为后缀名的文件(例如addition.f90),然后使用编译器将其编译成可执行程序。
fortran 条件编译

fortran 条件编译Fortran 条件编译Fortran 是一种广泛应用于科学计算领域的编程语言,它具有强大的数值计算能力和高效的执行速度。
为了适应不同的计算环境和需求,Fortran 提供了条件编译的功能,可以根据不同的条件选择性地编译代码。
在本文中,我们将探讨 Fortran 条件编译的用法和一些常见的应用场景。
一、条件编译的基本语法在 Fortran 中,条件编译使用预处理指令来实现,这些指令以 `#` 开头。
常见的条件编译指令有 `#ifdef`、`#ifndef`、`#else` 和`#endif`。
下面是一个简单的例子:```fortran#ifdef DEBUGwrite(*,*) "Debug mode"#elsewrite(*,*) "Release mode"#endif```在上面的例子中,如果在编译时定义了 `DEBUG` 宏(使用 `-DDEBUG` 编译选项),则会输出"Debug mode";否则,会输出"Release mode"。
通过条件编译,我们可以根据需要在代码中插入或排除特定的语句块,从而实现灵活的代码控制。
二、条件编译的应用场景1. 调试模式和发布模式在软件开发过程中,我们通常会将代码分为调试模式和发布模式。
调试模式下,我们可以输出更多的调试信息,以便于定位问题;而发布模式下,我们希望代码更加精简和高效。
通过条件编译,我们可以在调试模式下输出调试信息,在发布模式下禁用这些信息,从而实现两种不同的编译版本。
2. 平台兼容性由于不同的操作系统和硬件平台的差异,我们可能需要针对不同的平台进行编译和优化。
通过条件编译,我们可以根据不同的平台定义不同的宏,然后根据这些宏来编写平台特定的代码。
这样,我们就可以在不同的平台上编译出适应性更强的程序。
3. 功能选择在某些情况下,我们可能希望根据用户的需求选择性地编译代码中的某些功能。
fortran基本用法

fortran基本用法不大熟悉fortran,保存下来备查。
转自:/node/45目录:一、说明二、概述三、数据类型及基本输入输出四、流程控制五、循环六、数组七、函数八、文件一、说明本文多数内容是我读彭国伦《Fortran 95 程序设计》的笔记。
只读到第九章,主要是3~9章,都是最基本的用法(原书共16章)。
这里主要摘录了我看书过程中总结的一些Fortran和C不同的地方,主要是语法方面。
希望这份笔记能够给学过C但没有接触过Fortran的同学带去一些帮助。
要想得更清楚些,推荐看一下原书,觉得作者真的写得很好,很清楚;如果有C语言的基础,看完前九应该很快的,花一两天就行了。
觉得如果耐心看完本文,基本功能应该也可以顺利用起来了。
外,由于我之前没有用过Fortran,这次为了赶文档看书又看得很粗浅,大多数东西看过之后都没得及仔细想,只是按着作者的意思去理解。
所以这份笔记还处于纸上谈兵的层次。
如果有不妥的方,希望大家指正。
谢谢!文中蓝色的部分是程序代码,!后面的内容为注释。
二、概述1、名词解释Fortran=For mula Tran slator/Translation一看就知道有什么特色了:可以把接近数学语言的文本翻译成机械语言。
的确,从一开始,IBM设计的时候就是为了方便数值计算和科学数据处理。
设计强大的数组操作就是为了实现这一目标。
ortran奠定了高级语言发展的基础。
现在Fortran在科研和机械方面应用很广。
2、Fortran的主要版本及差别按其发展历史,Fortran编译器的版本其实很多。
现在在广泛使用的是Fortran 77和Fortran90。
ortran 90在Fortran 77基础上添加了不少使用的功能,并且改良了77编程的版面格式,所以编程时推荐使用90。
鉴于很多现成的程序只有77版本,有必要知道77的一些基本常识,至少保证能够看77程序。
以下是77和90的一些格式上的区别。
FORTRAN90用法总结

FORTRAN90用法总结
Fortran90是Fortran的最新标准程序设计语言,它是在Fortran77
基础上的新增功能,支持面向对象的功能,同时也支持可变参数,数据语
句和开发语句,使其具有更高的强大功能。
它也支持宏的使用,以帮助程
序编写者更好的实现一些高级程序功能,以提高程序性能,提高程序易用性。
下面将重点介绍Fortran90的五大用法。
第一,利用Fortran90进行函数的编写。
Fortran90的函数可实现参
数的多次组合,通过对用户函数的调用,就可达到想要的结果,而不用写
复杂的循环程序,这有助于提高程序的可管理性,降低程序的出错率。
第二,通过宏的使用来完成Fortran90的程序编写。
宏语言有助于程
序的复杂编写和优化,通过它可以大大提高程序的性能,节约程序的开发
时间,从而提高程序的可用性。
第三,Fortran90的数组操作功能。
Fortran90支持数组的多维操作,能够进行大数组操作,从而编写出简洁的程序,节约存储空间,提高程序
的执行效率。
第四,Fortran90的指针操作功能。
它可以完成复杂数据的指针操作,以实现数据的重排、排序、和传输,可以让程序编写者有效地运用指针操作,提高程序性能和稳定性。
最后,Fortran90的结构化编程功能。
fortran关系运算符

fortran关系运算符Fortran关系运算符Fortran是一种编程语言,它经常用于科学计算和数值分析。
在Fortran中,关系运算符用于比较两个值之间的关系,并返回一个逻辑值(真或假)。
本文将介绍Fortran中常用的关系运算符及其用法。
1. 等于运算符(==)等于运算符(==)用于判断两个值是否相等。
如果两个值相等,则返回真(.TRUE.),否则返回假(.FALSE.)。
例如:```INTEGER :: a, ba = 10b = 20IF (a == b) THENWRITE(*,*) "a等于b"ELSEWRITE(*,*) "a不等于b"ENDIF```2. 不等于运算符(/=/)不等于运算符(/=/)用于判断两个值是否不相等。
如果两个值不相等,则返回真(.TRUE.),否则返回假(.FALSE.)。
例如:```INTEGER :: a, ba = 10b = 20IF (a /= b) THENWRITE(*,*) "a不等于b"ELSEWRITE(*,*) "a等于b"ENDIF```3. 大于运算符(>)大于运算符(>)用于判断一个值是否大于另一个值。
如果第一个值大于第二个值,则返回真(.TRUE.),否则返回假(.FALSE.)。
例如:```INTEGER :: a, ba = 10b = 20IF (a > b) THENWRITE(*,*) "a大于b"ELSEWRITE(*,*) "a不大于b"ENDIF```4. 小于运算符(<)小于运算符(<)用于判断一个值是否小于另一个值。
如果第一个值小于第二个值,则返回真(.TRUE.),否则返回假(.FALSE.)。
例如:```INTEGER :: a, ba = 10b = 20IF (a < b) THENWRITE(*,*) "a小于b"ELSEWRITE(*,*) "a不小于b"ENDIF```5. 大于等于运算符(>=)大于等于运算符(>=)用于判断一个值是否大于或等于另一个值。
fortran中do循环用法

fortran中do循环用法Fortran中的do循环是一种非常常见的循环结构,用于重复执行一段代码块。
do循环有多种用法,下面将详细介绍。
1. 基本用法do循环最基本的用法是指定一个循环变量和一个循环范围,例如:```do i = 1, 10! 待执行的代码块end do```上述代码表示从1到10依次对i进行赋值,并执行待执行的代码块。
在每次循环中,i的值都会自动递增1。
2. 指定步长有时候需要指定循环变量每次递增或递减的步长,可以使用step参数实现,例如:```do i = 1, 10, 2! 待执行的代码块end do```上述代码表示从1到10以步长2依次对i进行赋值,并执行待执行的代码块。
在每次循环中,i的值都会自动递增2。
3. 循环嵌套在实际应用中,经常需要在一个循环内部再嵌套另一个循环来完成更复杂的任务。
例如:```do i = 1, 10do j = 1, 5! 待执行的代码块end doend do```上述代码表示先对i进行循环,每次循环内部再对j进行循环,执行待执行的代码块。
在每次循环中,i和j的值都会自动递增1。
4. 循环控制有时候需要在循环内部根据一些条件来控制循环的执行。
Fortran提供了break和cycle语句来实现。
break语句用于跳出当前循环,例如:```do i = 1, 10if (i == 5) thenexit ! 跳出当前循环end if! 待执行的代码块end do```上述代码表示当i等于5时跳出当前循环。
cycle语句用于跳过当前迭代,直接进入下一次迭代,例如:```do i = 1, 10if (mod(i,2) == 0) thencycle ! 跳过偶数迭代end if! 待执行的代码块end do```上述代码表示当i为偶数时跳过当前迭代,直接进入下一次迭代。
以上就是Fortran中do循环的详细用法介绍。
通过合理使用do循环和相关语句可以使程序更加简洁高效。
fortran class用法

fortran class用法Fortran中的类(class)是面向对象编程的重要组成部分,它允许程序员创建包含数据和方法的自定义数据类型。
以下是关于Fortran中类的用法的全面解释:1. 类的声明:在Fortran中,我们可以使用`TYPE`关键字来声明一个类,该类可以包含数据成员和方法。
例如:TYPE :: Person.CHARACTER(LEN=20) :: name.INTEGER :: age.CONTAINS.PROCEDURE :: SetName.PROCEDURE :: SetAge.PROCEDURE :: PrintInfo.END TYPE Person.在上面的示例中,我们声明了一个名为Person的类,它包含了名为name和age的数据成员,以及名为SetName、SetAge和PrintInfo的方法。
2. 方法的定义:在Fortran中,我们可以使用`PROCEDURE`关键字来定义类的方法。
方法可以被用来修改数据成员或执行其他操作。
例如:SUBROUTINE Person::SetName(newName)。
CLASS(Person) :: this.CHARACTER(LEN=20), INTENT(IN) :: newName.this%name = newName.END SUBROUTINE SetName.SUBROUTINE Person::SetAge(newAge)。
CLASS(Person) :: this.INTEGER, INTENT(IN) :: newAge.this%age = newAge.END SUBROUTINE SetAge.SUBROUTINE Person::PrintInfo()。
CLASS(Person) :: this.PRINT , "Name: ", this%name.PRINT , "Age: ", this%age.END SUBROUTINE PrintInfo.在上面的示例中,我们定义了SetName、SetAge和PrintInfo方法来修改和打印Person类的数据成员。
fortran的双冒号用法

在Fortran中,双冒号(::)用于表示变量的类型声明或数组的索引。
1. 类型声明:双冒号用于指定变量的数据类型。
例如,在定义一个整型变量时,可以使用双冒号后跟数据类型的名称,如下所示:
```fortran
integer :: variable_name
```
上述代码声明了一个名为`variable_name` 的整型变量。
2. 数组索引:双冒号用于指定数组的索引。
在Fortran中,数组的索引通常在数组名后面使用双冒号和索引值来表示。
例如:
```fortran
array(1:n) = values
```
上述代码将`values` 赋值给数组`array` 的第`1` 到第`n` 个元素。
需要注意的是,双冒号在不同的上下文中可能有不同的用途。
以上是双冒号在Fortran中的常见用法,具体用法取决于代码的语境和编写者的意图。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2、基本输入输出
输入:read(*,*) a
!从键盘读入
输出:write(*,*) "text" !在屏幕上输出。Fortran 77 用 'text'。Fortran 90
implicit none
! Require all variables to be explicitly declared
! 这个一般都是要写上的。下面会进一步说明。
integer :: ierr
character :: yn
real :: radius, height, area real, parameter :: pi = 3.1415926536 !这是常量的声明方法
Fortran 程序的主要结构就是这样了。一般还会有些 module 的部分在主函数前,函数在主函 数后。
三、数据类型及基本输入输出 1、数据类型,声明及赋初值 (1)integer: 短整型 kind=2, 长整型 kind=4
integer([kind=]2) :: a=3 如果声明成 integer:: a,则默认为长整型。 !"::" 在声明并同时赋初值时必须要写上;类型名后面有形容词时也必须有;其他情况可略 去 !所谓形容词,可以看一下这个。比如声明常数 real,parameter :: pi=3.1415926 。parameter 就是形容词。 (2)real:单精度 kind=4(默认),双精度 kind=8
else ……
end if
!没必要跟 C 语句多时用{}了,因为有 end if
end if
end if
(4) 算术判断:
program example
implicit none
real c
write (*,*) "input a number"
read (*,*) c if(c) 10,20,30 !10,20 和 30 为行代码,根据 c 小于/等于/大于 0,执行 10/20/30 行的程序
我的 Fortran 基本用法小结 高级语言和算法组 heavensky
目录: 一、说明 二、概述 三、数据类型及基本输入输出 四、流程控制 五、循环 六、数组 七、函数 八、文件
一、说明
本文多数内容是我读彭国伦《Fortran 95 程序设计》的笔记。只读到第九章,主要是 3~9 章, 都是些最基本的用法(原书共 16 章)。这里主要摘录了我看书过程中总结的一些 Fortran 和 C 不同的地方,主要是语法方面。希望这份笔记能够给学过 C 但没有接触过 Fortran 的同学 带去一些帮助。要想弄得更清楚些,推荐看一下原书,觉得作者真的写得很好,很清楚;如 果有 C 语言的基础,看完前九章应该很快的,花一两天就行了。觉得如果耐心看完本文, 基本功能应该也可以顺利用起来了。
Fortran 77: 固定格式(fixed format),程序代码扩展名:.f 或.for (1)若某行以 C,c 或*开头,则该行被当成注释; (2)每行前六个字符不能写程序代码,可空着,或者 1~5 字符以数字表明行代码(用作格 式化输入输出等);7~72 为程序代码编写区;73 往后被忽略; (3)太长的话可以续行,所续行的第六个字符必须是"0"以外的任何字符。
10 write (*,*) "A"
goto 40
!goto 可实现跳到任意前面或后面的行代码处,但用多了破坏程序结构
20 write (*,*) "B"
!cycle 相当于 C 里的 continue
end if
! Compute area. The ** means "raise to a power."
area = 2 * pi * (radius**2 + radius*height)
! 指数运算比 C 方便
! Write the input variables (radius, height) ! and output (area) to the screen.
复数显然方便了科学计算,满足了工程方面的需求
a=(1.0,2.0) ! a=1+i (6)多出了乘幂运算(**)。乘幂除了整数还可以是实数形式。如开方,开立方
a=4.0**0.5,a=8.0**(1.0/3.0)。 (7)数组有一些整体操作的功能;可以方便的对部分元素进行操作 (8)有些情况下可以声明大小待定的数组,很实用的功能
Fortran 77 中给变量赋初值常用 DATA 命令,可同时多个变量赋初值 data a,b,string /1, 2.0, 'fortran'/
与 C 不同的是,Fortran 中变量不声明也能使用,即有默认类型(跟 implicit 命令有关)。按照 默认的规定,以 i,j,k,l,m,n 开头的变量被定义为 integer,其余为 real。取消该设置需在程序声 明部分之前加 implicit none。彭国伦建议一般都使用该语句。 另一点关于声明的不同是 Fortran 有"等价声明": integer a,b
!一般" "和' '都可
print *,"text" !只能屏幕输出
(*,*)完整写为(unit=*,fmt=*)。其中 unit 为输入/输出位置,如屏幕,文件等;fmt 为格式。
如果这两项都写成*,则按默认的方式进行,即上面描述的。print 后面的*表示按默认格式
输出。
四、流程控制 1、运算符 (1)逻辑运算符 == /= > >= < <= !Fortran 90 用法 .EQ. .NE. .GT. .GE. .LT. .LE. !Fortran 77 用法
interactive_loop: do !do 循环,Fortran 中的循环可以加标签,如 do 前 !面的 interactive_loop 就是标签
! Prompt the user for radius and height and read them.
write (*,*) 'Enter radius and height.' !屏幕输出 read (*,*,iostat=ierr) radius,height !键盘输入。isotat 的值用于判断
real([kind=]8) :: a=3.0 还有指数的形式,如 1E10 为单精度,1D10 为双精度 (3)complex 单精度和双精度
complex([kind=]4) b (4)character
character([len=]10) c !len 为最大长度 (5)logical
logical*2 :: d=.ture. (等价于 logical(2)::d=.ture.) (6)自定义类型 type:类似于 C 中的 struct
read(*,'(a1)') yn
if (yn=='y' .or. yn=='Y') exit yn_loop
if (yn=='n' .or. yn=='N' .or. yn==' ') exit interactive_loop
end do yn_loop
!结束内嵌 do 循环
end do interactive_loop end program cylinder
Fortran 90:自由格式(free format), 扩展名:.f90 (1)以"!"引导注释; (2)每行可 132 字符,行代码放在每行最前面; (3)以&续行,放在该行末或下行初。 以下都是讨论 Fortran 90。
3、Fortran 的一些特点和 C 不同,在下面涉及具体方面时可以看到。这里只是大致提一些。 (1)不分大小写 (2)每句末尾不必要写分号 (3)程序代码命令间的空格没有意义 (4)不像 C,Fortran 不使用{ } (5)数据类型多出了复数和逻辑判断类型。比如复数类型 complex :: a !声明复数的方法。
[ ]中的内容可省略,下同。
再看一段实用一些的程序,好有点感性认识。程序用于计算圆柱的表面积,要求输入底面半 径和高。其中展示了 Fortran 的一些特色用法。程序摘自维基。其实是一个叫 的网上引用的维基的网页。推荐去看看!能查到不少有意思的东西。
program cylinder !给主函数起个名字 ! Calculate the area of a cylinder. ! ! Declare variables and constants. ! constants=pi ! variables=radius squared and height
4、Fortran 的基本程序结构
先看一看所谓的"Hello Fortran"程序。
program main
!程序开始,main 是 program 的名字,完全自定义
write(*,*) "Hello" !主程序
stop
!终止程序
end [program[main]] !end 用于封装代码,表示代码编写完毕。
write (*,'(1x,a7,f6.2,5x,a7,f6.2,5x,a5,f6.2)') & !"&"表示续行。这里 !还显示了格式化输出
'radius=',radius,'height=',height,'area=',area