云南seo网站关键词优化软件,wordpress 免费 ssl,商贸行业网站建设公司,crm客户管理软件平台Fortran编程快速入门 1. 简介1.1 FORTRAN语言发展概况1.2 Fortran77和Fortran90的区别1.3 Fortran和C/C等大多数语言的不同1.4 简单的 Fortran 程序分析1.5 FORTRAN 源程序的书写格式1.6 编译环境配置 2. Fortran数据类型和变量2.1 数据类型2.2 变量2.2.1 命名规则2.2.2 隐含约… Fortran编程快速入门 1. 简介1.1 FORTRAN语言发展概况1.2 Fortran77和Fortran90的区别1.3 Fortran和C/C等大多数语言的不同1.4 简单的 Fortran 程序分析1.5 FORTRAN 源程序的书写格式1.6 编译环境配置 2. Fortran数据类型和变量2.1 数据类型2.2 变量2.2.1 命名规则2.2.2 隐含约定IN 规则2.2.3 IMPLICIT 语句隐式说明语句2.2.4 变量声明语法 2.4 第一个Fortran程序 3. 程序编译3.1 Fortran - Basic 语法3.2 Fortran变量用法实列3.3 Fortran - 常量3.3.1 例子 (Example) 3.4 Fortran - 运算符3.4.1 算术运算符 (Arithmetic Operators)3.4.1.1 例子 (Example) 3.4.2 关系运算符 (Relational Operators)3.4.3 逻辑运算符 (Logical Operators)3.4.3.1 例子 (Example) 3.4.4 Fortran中的运算符优先级3.4.4.1 例子 (Example) 1. 简介
大气、地球物理很多经典模型都提供了Fortran77源码为了使用这些模型学习Fortran77编程是有必要的。
1.1 FORTRAN语言发展概况
1适用于工程及科学计算的一种高级程序设计语言 21951年由约翰·贝克斯等人开始研究Fortran语言 31957年第一个Fortran程序在IBM704机上运行 41958和1962年先后推出FortranⅡ和FortranⅣ 51966和1978年先后颁布Fortran66
1.2 Fortran77和Fortran90的区别
Fortran奠定了高级语言发展的基础。Fortran的主要版本及差别按其发展历史Fortran编译器的版本其实很多。现在在广泛使用的是Fortran77和Fortran90另外现在还有95、2003和2008版本。Fortran77和Fortran90的区别
Fortran77 也称固定格式fixed format程序代码扩展名.f或.for
1若某行以C或c开头则该行被当成注释2每行前六个字符不能写程序代码可空着7~72为程序代码编写区73往后被忽略3太长的话可以续行所续行的第六个字符可以是0以外的任何字符。
Fortran90自由格式free format 扩展名.f90
1以!引导注释2每行可132字符行代码放在每行最前面3以续行放在该行末或下行初。
1.3 Fortran和C/C等大多数语言的不同
1不分大小写 2每句末尾不必要写分号 3程序代码命令间的空格没有意义 4不像CFortran不使用{ } 5数据类型多出了复数和逻辑判断类型。比如复数类型 6多出了乘幂运算**。乘幂除了整数还可以是实数形式。如开方开立方 7数组有一些整体操作的功能可以方便的对部分元素进行操作 8有些情况下可以声明大小待定的数组很实用的功能
1.4 简单的 Fortran 程序分析
Fortran 程序的基本结构 1一个 Fortran 源程序由一个或多个程序单位组成每个独立的程序单位以end语句结束。 2每个程序单位包括若干行不能一行写多条语句但可以几行写一条语句。 3语句前可不设标号也可根据需要设标号。 4各类语句在程序单位中的位置有一定规则。 5程序必须按规定格式书写。
1.5 FORTRAN 源程序的书写格式
Fortran77 源程序必须按以下格式书写 1每行只能在 80 列内书写并把 80 列分为 4 个区。 215 列标号区 15 位整数第 1 列为*或c时为注释行 3第 6 列续行标志区非空格或非零字符最多 19 个续行 4772 列语句区书写语句一行只能写一条语句 57380 列语句注释区一般作编号注释
1.6 编译环境配置
参考Fortran编程——VScode配置
2. Fortran数据类型和变量
2.1 数据类型
Fortran 处理六种类型 1整型Integer 2实型Real 3双精度Double precision 4复型Complex 5逻辑型Logical 6字符型Character
2.2 变量
2.2.1 命名规则
1变量名的第一个字符必须是字母 2在第一个字符后可跟 15 个字母或数字。如xm1totalk123…
注意几点 1变量名不区分大小写字母。如TOTALTotaltotal 代表同一变量 2变量名中的空格不起作用。如abca bcab ca b c 代表同一变量 3允许变量名与语言中具有特定含义的字“保留字”同名。但建议不要使用。如sin、read、end … 4尽量见名知义如:root、aver、result 等 5它不能超过31个字符。
2.2.2 隐含约定IN 规则
以 i、j、k、l、m、n 开头的变量为整型变量以其它字母开头的变量为实型变量“IN 规则”如
imaxm5number... 为整型变量
vh2aver... 为实型变量。注方便但只能用来区分整型与实型。
2.2.3 IMPLICIT 语句隐式说明语句
可以用 IMPLICIT 语句将某一字母开头的全部变量指定为所需的类型还可以用一个 IMPLICIT 语句同时指定几种类型。例如
implicit integer (act-v)
implicit real (ij)
implicit integer (ab)real(i,k)integer (x-z)2.2.4 变量声明语法
变量在类型声明语句中的程序或子程序的开头声明。 变量声明的语法如下
type-specifier :: variable_name例如 (For example)
integer :: total
real :: average
complex :: cx
logical :: done
character(len 80) :: message ! a string of 80 characters稍后您可以为这些变量赋值例如
total 20000
average 1666.67
done .true.
message “A big Hello from IOWIKI”
cx (3.0, 5.0) ! cx 3.0 5.0i您还可以使用内部函数cmplx,将值赋给复杂变量 -
cx cmplx (1.0/2.0, -7.0) ! cx 0.5 – 7.0i
cx cmplx (x, y) ! cx x yi字符类型 字符类型存储字符和字符串。 字符串的长度可以由len说明符指定。 如果未指定长度则为1。
character (len 40) :: name
name “Zara Ali”2.4 第一个Fortran程序
按照国际惯例写第一个Fortran程序“Hello world”。保存为hello.f program HelloWorldprint *,Hello,World!read(*,*)end注意如果是f90直接忽略代码前面的空格f77编码必须如上否则无法编译通过。
Fortran程序由一组程序单元组成如主程序模块和外部子程序或过程。每个程序包含一个主程序可能包含也可能不包含其他程序单元。 主程序的语法如下 -
program program_name
implicit none
! type declaration statements
! executable statements
end program program_name请注意
所有Fortran程序都以关键字program开头以关键字end program结尾后跟end program名称。implicit none语句允许编译器检查是否正确声明了所有变量类型。 您必须始终在每个程序的开头使用implicit none。较旧版本的Fortran允许一种称为隐式类型的功能即您不必在使用前声明变量。 如果未声明变量则其名称的第一个字母将确定其类型。以ijklm或n开头的变量名称被认为是整数变量其他变量是实变量。 但是您必须声明所有变量因为它是良好的编程习惯。 为此你用声明开始你的程序implicit none此语句将关闭隐式类型。Fortran中的注释以感叹号开头因为编译器会忽略此后的所有字符字符串除外。print *命令在屏幕上显示数据。
参考Fortran - Basic 语法
3. 程序编译
前提需要安装好Fortran开发环境。 在终端中输入
gfortran hello.f -o hello如果是windows系统这样就会生成一个hello.exe程序如果是linux系统就会生成一个不带后缀名的hello可执行程序。执行结果在终端中输入
./hello.exe
或者
./hello3.1 Fortran - Basic 语法
每个程序包含一个主程序可能包含也可能不包含其他程序单元。 主程序的语法如下
! 所有Fortran程序都以关键字program开头以关键字end program,后跟end program,名称。
! implicit none语句允许编译器检查是否正确声明了所有变量类型。 您必须始终在每个程序的开头使用implicit none 。
! Fortran中的注释以感叹号!开头因为编译器会忽略此后的所有字符字符串除外。
! print *命令在屏幕上显示数据。
! 压缩代码行是保持程序可读性的好方法。
! Fortran允许使用大写和小写字母。 除字符串文字外Fortran不区分大小写。program program_name! 关闭隐式类型implicit none ! type declaration statements ! executable statements print *,Hello,World!read(*,*)end program program_name让我们编写一个程序添加两个数字并打印结果 program addNumbers! This simple program adds two numbersimplicit none! Type declarationsreal :: a, b, result! Executable statementsa 12.0b 15.0result a bprint *, The total is , resultend program addNumbers3.2 Fortran变量用法实列
以下示例演示了屏幕上的变量声明分配和显示 - program variableTestingimplicit none! declaring variables 变量声明integer :: total real :: average complex :: cx logical :: done character(len80) :: message ! a string of 80 characters!assigning values 赋值total 20000 average 1666.67 done .true. message A big Hello from IOWIKI cx (3.0, 5.0) ! cx 3.0 5.0iPrint *, totalPrint *, averagePrint *, cxPrint *, donePrint *, messageend program variableTesting3.3 Fortran - 常量
常量是指程序在执行期间无法更改的固定值。命名常量具有值和名称。命名常量应在程序或过程的开头声明就像变量类型声明一样指示其名称和类型。使用parameter属性声明命名常量。例如
3.3.1 例子 (Example)
以下程序计算重力作用下垂直运动引起的位移。
real, parameter :: pi 3.1415927program gravitationalDisp! this program calculates vertical motion under gravity implicit none ! gravitational accelerationreal, parameter :: g 9.81 ! variable declarationreal :: s ! displacement real :: t ! time real :: u ! initial speed ! assigning values t 5.0 u 50 ! displacement s u * t - g * (t**2) / 2 ! output print *, Time , tprint *, Displacement ,s end program gravitationalDisp3.4 Fortran - 运算符
Fortran提供以下类型的运算符 算术运算符、关系运算符、逻辑运算符。
3.4.1 算术运算符 (Arithmetic Operators)
下表显示了Fortran支持的所有算术运算符。 假设变量A5变量B3然后
操作描述值加法运算符添加两个操作数。A B将给出8-减法运算符从第一个减去第二个操作数。A - B将给2*乘法运算符将两个操作数相乘。A * B将给出15/除法运算符用除分子除分子。A/B将给1**指数运算符将一个操作数提升到另一个操作数。A ** B将给出125
3.4.1.1 例子 (Example)
! 尝试以下示例来了解Fortran中可用的所有算术运算符 -program arithmeticOp! this program performs arithmetic calculationimplicit none ! variable declarationinteger :: a, b, c! assigning values a 5 b 3 ! Exponentiation c a ** b ! output print *, c , c! Multiplication c a * b ! output print *, c , c! Division c a/b ! output print *, c , c! Additionc a b ! output print *, c , c! Subtraction c a - b ! output print *, c , cend program arithmeticOp3.4.2 关系运算符 (Relational Operators)
下表显示了Fortran支持的所有关系运算符。 假设变量A10变量B20则
操作符号描述结果.eq.检查两个操作数的值是否相等如果是则条件变为真。A B不是真的。/.ne.检查两个操作数的值是否相等如果值不相等则条件变为真。A B是真的。.gt.检查左操作数的值是否大于右操作数的值如果是则条件变为真。A B不是真的。.lt.检查左操作数的值是否小于右操作数的值如果是则条件变为真。(A B) 为真.ge.检查左操作数的值是否大于或等于右操作数的值如果是则条件变为真。A B不是真的。.le.检查左操作数的值是否小于或等于右操作数的值如果是则条件变为真。A B是真的。
3.4.3 逻辑运算符 (Logical Operators)
Fortran中的逻辑运算符仅适用于逻辑值.true 和.false。
下表显示了Fortran支持的所有逻辑运算符。 假设变量A .true。 变量B .false。 那么 -
操作描述结果.and.称为逻辑AND运算符。 如果两个操作数都不为零则条件成立。A.and.B是假的。.or.称为逻辑OR运算符。 如果两个操作数中的任何一个非零则条件变为真。A.or.B是真的。.not.称为逻辑非运算符。 用于反转其操作数的逻辑状态。 如果条件为真则Logical NOT运算符将为false。A.not.B是真的。.eqv.称为逻辑等效运算符。 用于检查两个逻辑值的等效性。A .eqv.B是假的。.neqv.称为逻辑非等价运算符。 用于检查两个逻辑值的非等价性。A .neqv.B是真的。
3.4.3.1 例子 (Example) program logicalOp! this program checks logical operatorsimplicit none ! variable declarationlogical :: a, b! assigning values a .true. b .false. if (a .and. b) thenprint *, Line 1 - Condition is trueelseprint *, Line 1 - Condition is falseend ifif (a .or. b) thenprint *, Line 2 - Condition is trueelseprint *, Line 2 - Condition is falseend if! changing values a .false. b .true. if (.not.(a .and. b)) thenprint *, Line 3 - Condition is trueelseprint *, Line 3 - Condition is falseend ifif (b .neqv. a) thenprint *, Line 4 - Condition is trueelseprint *, Line 4 - Condition is falseend ifif (b .eqv. a) thenprint *, Line 5 - Condition is trueelseprint *, Line 5 - Condition is falseend ifend program logicalOp3.4.4 Fortran中的运算符优先级
运算符优先级确定表达式中的术语分组。 这会影响表达式的计算方式。 某些运算符的优先级高于其他运算符; 例如乘法运算符的优先级高于加法运算符。
3.4.4.1 例子 (Example) program precedenceOp! this program checks logical operatorsimplicit none ! variable declarationinteger :: a, b, c, d, e! assigning values a 20 b 10c 15d 5e (a b) * c/d ! ( 30 * 15 )/5print *, Value of (a b) * c/d is : , e e ((a b) * c)/d ! (30 * 15 )/5print *, Value of ((a b) * c)/d is : , e e (a b) * (c/d); ! (30) * (15/5)print *, Value of (a b) * (c/d) is : , e e a (b * c)/d; ! 20 (150/5)print *, Value of a (b * c)/d is : , e end program precedenceOp