a(1:3)=b(4:6) !类似于这种的要求左右数组元素个数相同
where形式上类似于if,但只用于设置数组。设有两个同样类型、维数和大小的数组a,b
b=a !a中小于3的元素赋值给b对应位置的元素
有点像C中的for循环:
其中triplet形如i=2:6:2,表示循环,最后一个数字省略则增量为1
Fortran中函数分两类:子程序(subroutine)和自定义函数(function)。自定义函数本质上就是学上的函数,一般要传递自变量给自定义函数,返回函数值。子程序不一定是这样,可以没有返值。传递参数要注意类型的对应,这跟C是一样的。
目的:把某一段经常使用的有特定功能的程序独立出来,可以方便调用。习惯上一般都把子程序放在主程序结束之后。
!给子程序起一个有意义的名字。可以传递参数,子程序无返回值与自定义函数不同之处。括号内也可以空着,代不传递参数。 …… !接下来的程序编写跟主程序没有任何别。 return !跟C不同,这里表示子程序执行后回到调用它的地方继续执行下面的程序。不一定放在最后。 !可以放在子程序的其他位置,作用相同;子程序中return之后的部分不执行。还可省略不写
调用:使用call命令直接使用,不需要声明。在调用处写:
和子程序的明显不同在于:需要在主程序中声明之后才能使用。调用方式也有差别。另外按照惯例用函数不去改变自变量的值。如果要改变传递参数的值,习惯上用子程序来做。
一般自定义函数也是放在主程序之后。
return !跟C不同,这里表示子程序执行后回到调用它的地方继续执行下面的程序。可以不写
也可以这样直接声明返回值类型,简洁些:
(1)注意类型的对应。Fortran中甚至可以传递数值常量,但只有跟函数定义的参数类型对应才会到想要的结果。如call ShowReal(1.0)就必须用1.0而不是1。
integer num(size) !可以定义一个数组,其大小是通过传递过来的参数决定的。这很实用。
!注意这里与在主程序中声明数组时,数组大小需要用常数来规定大小的规则不太一样,而这里也可以用参数变量赋值其数组大小。
(6)传递函数(包括自定义函数、库函数、子程序都是可以的)。类似于C中的函数指针需要在主程序和调用函数的函数中都声明作为参数传递的函数。如
(7)函数使用接口(interface):一段程序模块。以下情况必需:
在子程序或自定义函数中定义:
则a和c共用相同内存,b和d共用相同内存。
全局变量太多时会很麻烦。可以把它们人为归类,只需在定义时在common后面加上区间名。如
这样使用时就不必把所有全局变量都列出来,再声明common /groupe1/ c
就可以用a、c全局变量了。
可以使用block data程序模块。在主程序和函数中不能直接使用前面提到的data命令给全局变量赋初值。可以给它们各自赋初值;如果要使用data命令必须要这样:
Module不是函数。它用于封装程序模块,一般是把具有相关功能的函数及变量封装在一起。用法很单,但能提供很多方便,使程序变得简洁,比如使用全局变量不必每次都声明一长串,
使用:在主程序或函数中使用时,需要在声明之前先写上一行:
Module中有函数时必须在contains
命令之后(即在某一行写上contains
然后下面开始写函数,多所有函数都写在这个contains
之后)。并且module中定义过的变量在module里的函数中可直接使用,函数之间也可以直接相互调用,连module中的自定义函数在被调用时也不用先声明。
6、include
放在需要的任何地方,插入另外的文件(必须在同一目录下)。如:
Fortran里有两种读取文件的方式,对应于两种文件
!10,20是给文件编的号,除1,2,5,6的正整数都可,因为2、6是默认的输出位置(屏幕),1、5是默认的输入位置(键盘) !下面这一段用于确认指定名字的文件是否存在 !按一定格式输入输出,格式可以另外写并指定行代码,也可以直接写在read/write中 !1X代表一个空格。F6.3代表real型数据用占6个字符(含小数点),其中小数点后三位。 !常用的还有I3,用于整型数据,共占三个字符;A8,字符型,占8个字符。换行用 /