Fortran学习笔记

复制代码
	这是我之前学习Fortran时做到笔记,分享出来当个备份!
	Fortran是一门非常古老的编程语言,但是至今依然有人在使用。
	建议利用闲暇时间学习!

1、编译命令:
g95 --c a.f90:将a.f90编译为名为a.o的目标文件。
g95 h.f90:编译h.f90并将其链接以生成可执行文件a.out。
g95 -c h1.f90 h2.f90 h3.f90:编译多个源文件。 如果顺利,则创建对象文件h1.o,h2.o和h3.o。
g95 -o a h1.f90 h2.f90 h3.f90:编译多个源文件并将它们链接到一个名为'a'的可执行文件。

2、print*, huge(a):返回变量a能存放的最大值。

3、integer(kind = 2) :: a:指定a变量的字节数。

4、kind(i):返回i变量所占字节数。

5、character (len = 40) :: a:指定字符串a的长度。

6、a(1:4):对字符串a切片。

7、数据类型的作用:它决定了变量内存的大小和布局; 可存储在该内存中的值范围; 以及可以应用于变量的操作集。

8、所有Fortran程序都以关键字program开头,以关键字end program+名称 结尾。

9、implicit none:变量显示声明。

10、Fortran中的注释以感叹号(!)开头。

11、Fortran的行连接符是:&,相当于C的"\"。

12、Fortran不区分大小写。

13、Fortran变量类型:Integer(整数),Real(实数),Complex(复数),Logical(逻辑),Character(字符)。

14、复数的初始化:cx = (3.0, 5.0) ! cx = 3.0 + 5.0i。cx = cmplx (x, y) ! cx = x + yi。

15、real, parameter :: pi = 3.14:声明常量。

16、算术运算符:+-*/**

17、判断:

fortran 复制代码
if (expression) then      
   ...... 
end if

或:

Fortran 复制代码
a: if (expression) then      
   ......
end if a

​ Fortran支持else。

多分支语句:

Fortran 复制代码
   a:select case (expression) 
       case (selector1)          
           ......
       case (selector2)           
           ......     
       case default          
           ......  
   end select a

case (91:100) :在91~100之间激活。

18、逻辑值:.true..false.

19、关系运算符:==/=><>=<=

20、逻辑运算符:.and..or..not..eqv..neqv.

21、循环:

fortran 复制代码
do var = start, stop [,step]    
   ......
end do

条件循环:

fortran 复制代码
do while (logical expr) 
   ......
end do

Fortran允许为循环设置标签。

22、跳转语句:
exit:相当于C语言里的break。
cycle:相当于C语言里的continue。
stop:终止程序。

23、a//b:讲a,b两个字符串拼接。

24、len(string):返回字符串的长度。

25、index(string,sustring):它找到字符串string中子字符串sustring的位置,如果找不到则返回0。

26、achar(int):它将整数转换为字符。

27、iachar(c):它将字符转换为整数。

28、trim(string):它返回删除了尾随空格的字符串。

29、scan(string, chars):对于"chars"中包含的任何字符的第一次出现,它从左到右搜索"string"(除非back = .true。)。 它返回一个给出该字符位置的整数,如果没有找到"chars"中的字符,则返回零。

30、verify(string, chars):它从左到右扫描"字符串"(除非back = .true。)第一次出现"chars"中没有包含的任何字符。 它返回一个给出该字符位置的整数,如果只找到"chars"中的字符,则返回零。

31、adjustl(string):它左对齐"字符串"中包含的字符。

32、adjustr(string):它右对齐"字符串"中包含的字符。

33、len_trim(string):它返回一个等于"string"(len(string))长度的整数减去尾随空格的数量。

34、repeat(string,ncopy):它返回一个长度等于"ncopy"的字符串乘以"string"的长度,并包含"ncopy"连接的"string"副本。

35、lle(char, char):比较第一个字符是否在词法上小于或等于第二个字符。

36、lge(char, char):比较第一个字符是否在词法上大于或等于第二个字符。

37、lgt(char, char):比较第一个字符是否在词法上大于第二个字符。

38、llt(char, char):比较第一个字符是否在词法上小于第二个字符。

39、call date_and_time(d, t):调用子程序获取时间,结果"年月日"返回到d字符串变量,"时分秒"返回到t变量。

40、real, dimension(5) :: array:创建一维数组,大小为5。

41、array = (/1.5, 3.2,4.5,0.9,7.2 /):初始化数组。

42、array(1):使用数组array的第一个数据。

43、integer, dimension (5,5) :: array_2:建立二维数组。

44、real, dimension(2:6) :: array_3:建立一个一维数组并指定索引号。

45、integer, dimension (-3:2,0:4) :: array_4:建立一个二维数组并指定索引号。

46、subroutine func(a) :定义函数func(a)。如果a是数组,那么就要在函数里声明一个同名数组来使用。

47、size(a):获取数组a的大小。

48、a(1:7) = 5:数组a的第1到第7个数据都是5。

49、a(8:) = 0:数组a第8个以后的数据都是0。

50、b(2:10:2)=1:数组b的第2到第10个元素每隔2个都是1。

51、dot_product(array_a, array_b):此函数返回两个输入向量的标量积,其长度必须相同。

52、matmul(array_a,array_b):它返回两个矩阵的矩阵乘积,它必须是一致的,即具有类似(m,k)和(k,n)的维数。

53、all(a>5):判断a数组中是否所有元素都大于5?

54、all(a>=5 .and. a<10):划定范围。

55、any(a>5):判断a数组中是否有元素都大于5?

56、count(a>5):统计数组a中大于5的数据个数。

57、maxval(a):找到数组a的最大值。

58、minval(a):找到数组a的最小值。

59、sum(a):对a的所有元素求和。

60、product(a):对a的所有元素求积。

61、allocated(array):检查是否分配了数组。

62、lbound(array, dim):它返回数组的最小有效下标。 如果没有将dim(维度)作为参数给出,则会得到一个整数向量,如果包含dim,则会得到具有该维度的较低维度的整数值。

63、ubound(array, dim):它返回可用的最大下标。

64、shape(source):它将数组的形状作为整数向量返回。

65、size(a,dim = 1):返回数组a中的数据数。

66、merge(tsource, fsource, mask):此函数连接两个数组。 如果mask中的条件是.true,它给出tsource中的元素。 如果掩码中的条件为.false,则为fsource。 tsource和fsource这两个字段必须具有相同的类型和相同的形状。 结果也是这种类型和形状。 面具也必须具有相同的形状。

67、pack(array, mask, vector):它通过掩码控制将数组打包到矢量。 逻辑数组掩码的形状必须与数组一致,否则掩码必须是标量。 如果包含向量,则它必须是秩为1的数组(即向量),其元素至少与掩码中为真的元素一样多,并且具有与数组相同的类型。 如果mask是一个值为.true的标量。 然后矢量必须具有与数组相同数量的元素。

68、spread(source, dim, ncopies):它返回一个与参数源相同类型的数组,其等级增加1。 参数dim和ncopies是整数。 如果ncopies为负数,则使用零值。 如果source是标量,则spread会变成带有ncopies元素的向量,这些元素都与source具有相同的值。 参数dim指示要扩展的索引。 它必须在1和1+的范围内(源的等级),如果源是标量,则dim必须是1。 参数ncopies是新维度中的元素数。

69、unpack(vector, mask, array):它将矢量分散到掩码控制下的数组中。 逻辑阵列掩码的形状必须与数组一致。 数组向量必须具有等级1(即它是向量),其具有至少与掩码中为真的元素一样多的元素,并且还必须具有与数组相同的类型。 如果数组作为标量给出,那么它被认为是一个与掩码具有相同形状的数组,并且到处都是相同的标量元素。结果将是一个与mask相同形状的数组,与vector类型相同。 值将是来自可接受的向量的值,而在数组中的其余位置中保留旧值。

70、reshape(source, shape, pad, order):它构造一个具有指定形状形状的数组,该数组从给定数组源中的元素开始。 如果不包括垫,那么源的尺寸必须至少是产品(形状)。 如果包含pad,则它必须与source具有相同的类型。 如果包含order,则它必须是一个形状与形状相同的整数数组,并且值必须是(1,2,3,...,n)的排列,其中n是形状中元素的数量,它必须小于或等于7。

71、interface......end interface:先声明函数及其内部的变量,后面再定义函数具体操作。

72、transpose (matrix):它转换矩阵(向右掰)。

73、x = cshift ( a, shift = 2):从a数组的第二个数据开始输出,再回环到a数组的第二个数据前。

74、x = eoshift ( a, shift = 2):从a数组左移两个位输出。

75、maxloc(array, mask):它返回数组数组中最大元素的位置,如果仅包含掩码的掩码,则返回位置,返回位置,结果为整数向量。

76、minloc(array, mask):它返回数组数组中最小元素的位置,如果仅包含掩码的掩码,则返回位置,返回位置,结果为整数向量。

77、real, dimension (:,:), allocatable :: a:声明二维动态数组a。

78、allocate ( a(s1,s2) ):为声明的动态数组a分配内存。

79、deallocate (a):释放内存。

80、read*, s1, s2:从控制台输入两个值,把它们存到变量s1、s2中。

81、data a /7,8,9,10,11/ :初始化一维数组a。

82、data b(1,:) /1,1,1/ :初始化二维数组的第一行。

83、data (c(i),i = 1,10,2) /4,5,6,7,8/ :对c数组的1~10元素范围内,以步长2依次赋值。

84、data (c(i),i = 2,10,2)/5*2/:对c数组的2~10元素范围内,以步长2依次赋值为2。

85、

fortran 复制代码
where( a<0 )
          ......
    elsewhere 
          ...... 
end where 

:对数组a中少于0的元素都执行......,不少于0点元素都执行......。

86、结构体:

fortran 复制代码
type type_name      
    ......
end type type_name

87、type(Books) :: book1 :创建Books类型的结构体对象book1。

88、book1%a = "C":对结构体对象book1的a元素赋值为""C""。

89、type(Books), dimension(2) :: list:建立一个有两个元素,每个元素类型是Books的数组。

90、list(1)%a = "C":给数组list的第一个元素的a赋值。

91、integer, pointer :: p1:声明一个指针。

92、allocate(p1):为指针分配内存,此时p1就可以当成一个变量来用。

93、integer, target :: t1 :t1是一个可以别指向的变量。

94、p1=>t1:p1指针指代t1变量。

95、nullify(p1):断开p1指针的指向。

96、associated(a):判断a变量释放存在?

97、associated(p1, t1):判断p1是否指向t1变量。

98、Print "(f10.7)", pi:输出长度为10,小数点后7位。

99、Print "(e16.4)", pi/100 :用科学记数法输出。

100、format语句不做介绍。

101、open (unit = number, file = "name"):打开文件。open参数:

unit=9~99:指定文件编号。

IOSTAT= ios:它是I/O状态标识符,应该是整数变量。如果open语句成功,则返回的ios值为零,否则为非零值。

ERR = err:它是一个标签,控件在出现任何错误时跳转到该标签。

FILE = fname:文件名,字符串。

STATUS = sta:它显示文件的先前状态。一个字符串,可以有三个值NEW,OLD或SCRATCH之一。关闭或程序结束时创建并删除临时文件。

ACCESS = acc:它是文件访问模式。可以具有两个值中的任何一个,SEQUENTIAL或DIRECT。默认为SEQUENTIAL。

FORM = frm:它给出了文件的格式化状态。可以具有两个值FORMATTED或UNFORMATTED中的任何一个。默认值为UNFORMATTED。

RECL = rl:它指定直接访问文件中每条记录的长度。

102、close(1):关闭unit指定的编号为1的文件。

103、write(1,*) x: 把x变量的内容输入到编号为1的文件。

104、read(2,*) p:把编号2所代表的文件的内容输入变量p。

105、定义函数:

Fortran 复制代码
function name(arg1, arg2, ....) 
   ......
end function [name]

106、如果函数有返回值,那么就要在函数内部定义一个与函数名一样的变量,这个变量

的值就是返回值。或将函数名定为:function name(arg1, arg2, ...)result(return_var_name)。

107、contains关键字放在一个子程序的定义前,说明这个子程序是内嵌(内联)的。

108、函数和子程序的区别:函数不修改其参数,子例程不返回值,但可以修改其参数。

109、模块定义:

fortran 复制代码
module name
    ......
end module [name] 

110、使用模块:use module_name

111、可以使用private和public属性控制模块代码的可访问性。主程序不可访问。但是,其他模块子程序可以访问它们。

112、ABS (A):它返回A的绝对值。

113、AIMAG (Z):它返回复数Z的虚部。

114、AINT (A [, KIND]):它将A的小数部分截断为零,返回一个实数,整数。

115、ANINT (A [, KIND]):它返回一个实数值,最接近的整数或整数。

116、CEILING (A [, KIND]):它返回大于或等于数字A的最小整数。

117、CMPLX (X [, Y, KIND]):它将实变量X和Y转换为复数X + iY; 如果Y不存在,则使用0。

118、CONJG (Z):它返回任何复数Z的复共轭。

119、DBLE (A):它将A转换为双精度实数。

120、DIM (X, Y):它返回X和Y的正差。

121、DPROD (X, Y):它返回X和Y的双精度实数。

122、FLOOR (A [, KIND]):它提供小于或等于数字A的最大整数。

123、INT (A [, KIND]):它将数字(实数或整数)转换为整数,将实部截断为零。

124、MAX (A1, A2 [, A3,...]):它返回参数的最大值,所有这些都是相同的类型。

125、MIN (A1, A2 [, A3,...]):它返回参数的最小值,所有这些都是相同的类型。

126、MOD (A, P):它返回A除以A的余数,两个参数的类型相同(A-INT(A/P)* P)。

127、MODULO (A, P):它返回A模P 😦 A-FLOOR(A/P)* P)。

128、NINT (A [, KIND]):它返回最接近的数字A的整数。

129、REAL (A [, KIND]):它转换为实际类型。

130、SIGN (A, B):它返回A的绝对值乘以P的符号。基本上它将B的符号传递给A。

131、ACOS (X):它以弧度为单位返回范围(0,π)中的反余弦值。

132、ASIN (X):它以弧度为单位返回范围(-π/ 2,π/ 2)的反正弦值。

133、ATAN (X):它以弧度为单位返回范围(-π/ 2,π/ 2)的反正切。

134、ATAN2 (Y, X):它以弧度为单位返回范围(-π,π)中的反正切。

135、COS (X):它以弧度返回参数的余弦值。

136、COSH (X):它以弧度为单位返回参数的双曲余弦值。

137、EXP (X):它返回X的指数值。

138、LOG (X):它返回X的自然对数值。

139、LOG10 (X):它返回X的常用对数(基数10)值。

140、SIN (X):它以弧度形式返回参数的正弦值。

141、SINH (X):它以弧度为单位返回参数的双曲正弦值。

142、SQRT (X):它返回X的平方根。

143、TAN (X):它以弧度为单位返回参数的正切值。

144、TANH (X):它以弧度形式返回参数的双曲正切值。

145、IGITS (X):它返回模型的有效位数。

146、EPSILON (X):它返回的数字几乎可以忽略不计。 换句话说,它返回最小值,使得REAL(1.0,KIND(X))+ EPSILON(X)不等于REAL(1.0,KIND(X))。

147、HUGE (X):它返回最大数量的模型。

148、MAXEXPONENT (X):它返回模型的最大指数。

149、MINEXPONENT (X):它返回模型的最小指数。

150、PRECISION (X):它返回小数精度。

151、RADIX (X):它返回模型的基础。

152、RANGE (X):它返回十进制指数范围。

153、TINY (X):它返回模型的最小正数。

154、EXPONENT (X):它返回模型编号的指数部分。

155、FRACTION (X):它返回数字的小数部分。

156、NEAREST (X, S):它返回给定方向上最近的不同处理器编号。

157、RRSPACING (X):它返回给定数字附近的模型数的相对间距的倒数。

158、SCALE (X, I):它将real乘以其基数乘以整数幂。

159、SET_EXPONENT (X, I):它返回数字的指数部分。

160、SPACING (X):它返回给定数字附近的型号的绝对间距。

161、BIT_SIZE (I):它返回模型的位数。

162、BTEST (I, POS):比特测试。

163、IAND (I, J):逻辑和。

164、IBCLR (I, POS):清楚一点。

165、IBITS (I, POS, LEN):位提取。

166、IBSET (I, POS):设置位。

167、IEOR (I, J):独家OR。

168、IOR (I, J):包容性或。

169、ISHFT (I, SHIFT):逻辑转变。

170、ISHFTC (I, SHIFT [, SIZE]):循环移位。

171、NOT (I):逻辑补充。

172、ACHAR (I):它返回ASCII整理顺序中的第I个字符。

173、ADJUSTL (STRING):它通过删除任何前导空格和插入尾随空白来调整字符串。

174、ADJUSTR (STRING):它通过删除尾随空白和插入前导空格来调整字符串。

175、CHAR (I [, KIND]):它返回机器特定整理顺序中的第I个字符。

176、IACHAR (C):它返回ASCII整理顺序中字符的位置。

177、ICHAR (C):它返回机器(处理器)特定整理顺序中字符的位置。

178、INDEX (STRING, SUBSTRING [, BACK]):它返回STRING中最左边的(最右边,如果BACK是.TRUE。)SUBSTRING的起始位置。

179、LEN (STRING):它返回字符串的长度。

180、LEN_TRIM (STRING):它返回字符串的长度,不带尾随空白字符。

181、LGE (STRING_A, STRING_B):词汇量大于或等于。

182、LGT (STRING_A, STRING_B):词汇大于。

183、LLE (STRING_A, STRING_B):词汇小于或等于。

184、LLT (STRING_A, STRING_B):词汇量小于。

185、REPEAT (STRING, NCOPIES):重复串联。

186、SCAN (STRING, SET [, BACK]):它返回属于SET的STRING最左边的索引(最右边,如果BACK是.TRUE。),如果没有,则返回0。

187、TRIM (STRING):删除尾随空白字符。

188、VERIFY (STRING, SET [, BACK]):验证字符串中的字符集。

189、KIND (X):它返回kind类型参数值。

190、SELECTED_INT_KIND (R):它返回指定指数范围的类型参数类型。

191、SELECTED_REAL_KIND ([P, R]):实物类型参数值,给定精度和范围。

192、LOGICAL (L [, KIND]):在具有不同种类类型参数的逻辑类型的对象之间转换。

193、precision(a):返回a变量的小数点精度。

194、range(a):返回变量a的指数的小数范围。

195、bit_size(i):i占了多少位?

196、selected_real_kind(p=10,r=99):返回精度为10位小数所需的种类值,范围至少为10-99到10 + 99。

------谙弆悕博士(Ailan Anjuxi)
相关推荐
50万马克的面包1 小时前
C语言:三大基础排序算法模板 冒泡 / 选择 / 插入)
c语言·笔记·算法·排序算法
罗超驿1 小时前
3.快乐数专题学习笔记——双指针法在LeetCode 202题中的应用
java·算法·leetcode·职场和发展
_深海凉_1 小时前
LeetCode热题100-小于 n 的最大数(字节高频题)
算法·leetcode·职场和发展
nashane1 小时前
HarmonyOS 6学习:Web组件本地资源跨域访问全解析与实战
前端·学习·harmonyos·harmonyos 5
wuxinyan1231 小时前
大模型学习之路009:问题解决-RAG 知识库系统能上传文档,但检索不到内容
人工智能·学习·rag
蓝桉~MLGT1 小时前
中级软考(软件工程师)——软件设计师高频核心考点大补充(架构设计、硬核计算与OS篇)
学习·中级软考
逻辑驱动的ken2 小时前
Java高频面试考点场景题27
java·开发语言·面试·职场和发展·求职招聘
June bug2 小时前
【雅思】阅读填空题和判断题
职场和发展·学习方法
海兰2 小时前
【第39篇】spring-ai-alibaba-graph-example学习路径概览
人工智能·spring boot·学习·spring·spring ai