Fortran程序设计之子程序
FORTRAN90第6章子程序
Fortran 90
子程序程序体的写法
分为说明部分和执行部分。 1、说明部分应对程序体内一切变量、数组等实体 (包括虚元)作出说明,同时还要说明函数结果 变量名,但不可说明函数名。 2、执行部分中必须对函数结果名至少赋值一次。
例2.计算y=f(x)+g(x)值。
其中
f(x)=x+sin30° x+1,f(x)>0 g(x)= 0, f(x)=0 x-1, f(x)<0 要求用外部函数求g(x)的值。
Fortran 90
PROGRAM MAIN IMPLICIT NONE REAL::X,Y,F,G,GF READ*,X F=X+SIN(30*3.1415926/180) G=GF(X,F) Y=F+G G,GF不能同名 PRINT*,Y END
Fortran 90
最简单的源程序的结构
主程序: 单位定义 说明部分 子程序: 计算或处理
输入
调用子程序 输出 END
Fortran 90
子程序分类
用于完成复杂的计算
1、函数子程序
分为内部函数子程序 外部函数子程序 2、子例行子程序 分为内部子例行子程序 外部子例行子程序
返回 一个或多个值
用于完成复杂计算 ,返回一个或多个 值,或用于其它数 据处理
247.0
4.0
Fortran 90
6.3 完成复杂 计算任务,返回一个或多个值,或用于其它数 据处理
Fortran程序设计(第七章-函数与子程序(上))
QUESTION???
12
!函数子程序 Function MyExp(x) result (exp_res)
Real::Exp_res,x,s,t integer::n
N=0 T=1 S=1 do while (ABS(T)>1E-5) N=N+1 T=T*X/N S=S+T end do
Exp_res=S END FUNCTION
可以是变量名、数组名、过程名、指针等。
函数调用
函数子程序的调用形式与内在函数的引用形式相同,函数 子程序的调用应出现在表达式中。调用形式:
函数名(实元表)
注意:实元与虚元个数、类型、位置一一对应,但实元与虚元 名字可以不同。
例7-2 编写函数子程序,求
x
x2
x31Biblioteka 1 21 23xn 1 23 n
5.主调程序和被调用程序间的数据传递主要是通过虚实结合实现。
系统函数调用
方法:写出相应的函数名字,并在后面的括号中给出所要 计算的自变量值
如:SQRT(9.0)、ABS(X) 注意: (1)每个函数对所需自变量的个数和自变量类型有明确的 规定和要求。 (2)系统函数的函数返回值也具有一定的类型。一般返回 值与自变量类型一致。 (3)函数引用时,自变量必须写在括号里,自变量可以是 常数、变量或表达式。
外部过程 (在主程序外部,用户编写)
对过程有如下说明:
模块过程 (在模块文件中)
1.过程作为子程序不能独立运行,只供其它程序单元调用。
2.过程的调用方法是书写过程名,后跟用一对圆括号括起来的实元表。
3.过程单元中的虚元的个数可以有多个,它们都要写在一对圆括号内。
4.当一个过程被调用时,调用它的主程序或子程序称作主调程序。
FORTRAN 90第八章子程序
3.语句函数表达式 语句函数表达式说明函数与参数的对应关系,在函数表达式中,可以包含常量、 变量、函数虚参(虚参必须包含在表达式中)、FORTRAN 90内在函数、数组以及 前面已经说明了的语句函数。 4.关于语句函数的进一步说明 (1)只有当函数关系简单,可以用一个语句描述函数与参数的对应关系时, 才能使用语句函数。 (2)语句函数是非执行语句,语句函数的定义语句要放在一个程序单位的 所有其他说明语句之,并放在所有可执行语句之前。 (3)语句函数只有在本程序单元中才有意义。也就是说,不能使用其他程 序单元中的语句函数。
8.2.2 函数子程序的调用
定义函数子程序的目的是为了调用。不仅主程序可以调用一个函数子程序, 函数子程序也可以调用其它的函数子程序,甚至于还可以调用本身(递归调 用)。调用程序称为主调程序单元,而被调用的函数子程序称为被调程序单 元。调用一个函数子程序的方法和调用内在函数和语句函数的方法基本相 同: 1. 调用时应该用实参代替函数子程序定义部分的虚参,实参和虚参的类 型要相同。 和语句函数一样,实参可以是常量、变量、表达式等。 2. 调用程序单位中的变量不能与函数子程序同名。函数值的类型由函数 定义程序单元决定,与调用程序单元无关。 3. 当函数名的类型不满足I—N隐含规则时,在调用程序单元中要对函数 名的类型给出说明(如例 8.4 中的主程序EXAM3的第2句。)
1.语句函数名
在语句函数定义格式中,f称为函数名,函数名的组成规则与变量名相同。 如果没有在语句函数定义语句前用类型语句说明该函数名的数据类型,则 该语句函数的函数值的类型按其函数名遵守I—N隐含规则。如f函数隐含为 实型函数,而nf则隐含为整形函数。
F(X,Y)=X**2+Y**2
INTEGER F(X,Y)=X**2+Y**2 NF(X,Y)=X**2+Y**2
fortran子程序
说明: 1. 函数名的取名方法与变量 名同,遵循I—N隐含约定, 否则需采用类型说明语句。
function myabs(x) real myabs 定义法二 .
2. 函数名后的虚参可以是变量名、数组名和子程序名。 如没有虚参,一对圆括号不能省。 3. 在函数子程序流程返回调用单位之前,必须把所求得 的函数值赋给函数名(不带括号和虚参)。 4. 函数子程序流程执行到return或end语句时,立即返回 到调用单位。return语句在子程序中可以有多处,如 果紧邻end 可以省去。
第 九 章 数组
第 十 章 语句函数
第十一章 子程序
第十二章 数据共用存储单元 和数据块子程序
第十三章 文件
1
Fortran程序往往由一个主程序和若干个子程序组成。 Fortran的子程序有函数子程序、子例行子程序和数 据块子程序三种。 子程序可以被主程序调用,也可以被其他子程序调 用。Fortran77中的子程序不能递归调用。
100
一行打印20个 “*”号,打两行。
8
subroutine opp(a,s1,s2) 求矩阵两对角 real a(5,5) 线元素之和 s1=0 do 10 i=1,5 subroutine readin(a) s1=s1+a(i,i) real a(5,5) 10 continue do 10 i=1,5 s2=0 read(*,*) (a(i,j),j=1,5) do 20 i=1,5 10 continue j=5-i+1 end s2=s2+a(i,j) 20 continue real w(5,5) end call readin(w) call opp(w,x1,x2) 输入矩阵 write(*,100) x1,x2 1,2,3,4,5 100 format(1x,'The two sum of', 2,3,4,5,1 3,4,5,1,2 $ ' oppusite angles elements:', 4,5,1,2,3 $ /1x,'x1=',f8.2,' x2=',f8.2) 5,1,2,3,4 end
在c++主程序中调用fortran子例程
在c++主程序中调用fortran子例程一、引言C语言和Fortran是两种不同的编程语言,广泛应用于不同的领域。
在某些情况下,可能需要将Fortran程序嵌入到C程序中,以便更好地利用Fortran的优势。
在这种情况下,如何在C主程序中调用Fortran子例程成为了一个重要的问题。
本文将介绍如何在C主程序中调用Fortran子例程,并给出一些示例代码。
二、基本步骤1. 编写Fortran子程序:首先需要编写一个Fortran子程序,该程序可以作为一个独立的程序运行,也可以作为主程序的一个子例程。
2. 编译Fortran子程序:使用Fortran编译器将Fortran子程序编译成可执行文件。
3. 创建C主程序:创建一个C主程序,用于调用Fortran子例程。
4. 链接C和Fortran程序:使用C编译器将C主程序和Fortran 可执行文件链接成一个完整的程序。
三、示例代码下面是一个简单的示例代码,展示如何在C主程序中调用Fortran子例程:Fortran子程序(example.f90):```fortransubroutine add(a, b, result) bind(c, name="add")use iso_c_binding, only: c_intimplicit noneinteger(c_int), intent(in) :: a, binteger(c_int), intent(out) :: resultresult = a + bend subroutine add```这个Fortran子程序接受两个整数参数,并返回它们的和。
它使用了iso_c_binding模块来声明C兼容的变量类型。
C主程序(main.c):```c#include <stdio.h>#include <stdlib.h>#include <complex.h>#include "example.f90"int main() {int result;int a = 5, b = 10;complex c;c = (complex) a + (complex) b; // 将整数转换为复数,以便在C和Fortran之间传递数据类型兼容的数据call add(a, b, result); // 调用Fortran子例程并将结果保存到变量result中printf("Result: %d\n", result); // 输出结果return 0;}```这个C主程序调用了上面定义的Fortran子程序add,并将结果保存到变量result中。
FORTRAN95第六章 Fortran 过程程序设计
普通的外部函数子程序形式之二为:
例6.2 利用函数子程序,计算N的阶乘。
! 计算N!的函数子程序
function fact (n)
!fact为外部函数子程序名, n为哑元
implicit none
integer:: n,i
! 说明哑元n和函数体中所用变量i的类型
real*8:: fact
! 说明函数名的类型
fact=1d0
!函数名作为变量名使用
do
write(*,*)'输入正整数m:'
read (*,*)m
if (m>0) exit
write(*,*)'输入了一个负整数或零,重输!'
end do
do
write(*,"('输入正整数n(n<=',i4,'):')")m
read (*,*)n
if (n>0 .and. n<m) exit
read *,n
h=(b-a)/n
do i=1,n-1
s=s+f (a+i*h) !调用语句函数f的语句
end do
s=h*(f (a)+f (b)+2.0*s)/2.0 !调用语句函f
write ( *,"('定积分的值为: ',f10.6)")s
fortran 子程序参数
fortran 子程序参数摘要:I.引言A.Fortran 子程序的概念B.Fortran 子程序的作用II.Fortran 子程序参数的定义与使用A.参数的定义1.内部参数2.外部参数B.参数的传递1.值传递2.引用传递C.参数的返回值1.返回值的概念2.返回值的类型III.Fortran 子程序的调用A.调用子程序的方式1.外部调用2.内部调用B.调用子程序的参数1.参数的传递方式2.参数的默认值IV.Fortran 子程序参数的实例分析A.实例介绍B.实例代码解析1.定义子程序2.调用子程序C.实例总结V.结论A.Fortran 子程序参数的重要性B.Fortran 子程序参数的应用场景C.展望Fortran 子程序参数的未来发展正文:I.引言Fortran(Formula Translation)是一种高级编程语言,广泛应用于数值计算、科学计算等领域。
在Fortran 程序设计中,子程序(Subprogram)是一种重要的程序组织方式,可以将程序划分为更小的、可重用的功能模块。
子程序参数是子程序与主程序之间进行数据交换的关键,正确理解和使用子程序参数对于编写高效的Fortran 程序具有重要意义。
II.Fortran 子程序参数的定义与使用A.参数的定义Fortran 子程序参数分为内部参数和外部参数。
1.内部参数:在子程序内部定义的参数,仅在子程序内部使用,与外部程序无关。
内部参数的定义格式如下:```fortraninteger :: a, b, sum```2.外部参数:在子程序外部定义的参数,可以在子程序内部和外部程序中使用。
外部参数的定义格式如下:```fortraninteger, external :: a, b, sum```B.参数的传递Fortran 子程序参数的传递方式有值传递和引用传递两种。
1.值传递:将参数的值传递给子程序,子程序中对参数的修改不会影响主程序中的参数值。
F77第十一章
总结
函数子程序和子例行子程序的不同点: 1、定义语句不同 2、名字的作用不同 3、调用方法不同 4、用途不同:
函数子程序带回一个值。 子例行子程序可以带回一批值(数组),或者完
成特定的操作。(如:交换,排序等)
11.3 实参和虚参之间的数据 传递
在Fortran程序设计中子程序的虚参可以是变量 名、数组名、函数名、子例行程序名和星号 ‘*’。
function s(a)
do 10 r=1,5,2
integer a
c=s(r)
pi=3.14159
print 100,r,c
s=2*pi*a
10 continue
return
100 format(1x,’r=’,i1,’ c=‘,f6.3) end
end
例2:求a,b,c三个数的平均值。
第十一章 子程序
第十一章 子程序
函数子程序 子例行程序 实参和虚参之间的数据传递 利用子程序实现程序的模块化设计 在子程序中的SAVE语句和DATA语句 程序举例
第十一章 子程序
在实际工作中,经常要编制一些求解特定问 题的程序,如:排序、求积分、解线性方程 组、插值等。如果每使用一次就编写一次, 程序就会显得冗长、累赘。因此常把它们编 制成独立的程序单位,需要时可随时调用。
dimension s(1000)
function cpt(x,m)
read *,n x(1000)
dimension
read *,(s(i),i=1,n)
t=0.0
aver=cpt(s,n)
do 10 i=1,m
print *,’aver=‘,aver
t=t+x(i)
end
fortran语言程序设计知识点
fortran语言程序设计知识点Fortran语言是一种面向科学与工程计算的编程语言,因其在数值计算和科学应用方面的高效性而受到广泛使用。
本文将重点介绍Fortran语言程序设计的一些重要知识点。
一、基础语法1.1 变量与数据类型在Fortran中,变量是用于存储数据的容器。
常见的数据类型包括整型(INTEGER)、实型(REAL/DOUBLE PRECISION)、复数型(COMPLEX)、逻辑型(LOGICAL)等。
变量的命名需遵循一定规则,如以字母开头,长度不超过31个字符等。
1.2 运算符与表达式Fortran支持常见的算术运算符(如+、-、*、/)以及逻辑运算符(如. AND.、. OR.、. NOT.)等。
表达式由变量、常数和运算符组成,可以进行数值运算和逻辑判断。
1.3 控制结构Fortran提供循环结构(DO)、条件结构(IF-THEN-ELSE)和选择结构(SELECT CASE)等控制语句,用于控制程序的流程。
二、数组与数据处理2.1 数组定义与操作Fortran中数组是由相同类型的数据元素组成的集合。
可以使用DIMENSION语句定义数组的维度和大小,通过下标访问和修改数组元素。
2.2 数组运算与函数Fortran提供了许多对数组进行运算和处理的函数,如数组求和(SUM)、最大最小值(MAX、MIN)、数组重排(RESHAPE)等,方便对数据进行统计和处理。
2.3 文件读写操作Fortran支持对文件进行读写操作,可以通过OPEN语句打开文件,使用READ和WRITE语句读取和写入数据。
可以根据需要设置文件的访问模式和格式。
三、过程与模块3.1 过程(Subroutine/Function)过程是一段独立的代码块,可接受传入参数并返回值。
在Fortran中,过程可以是子程序(Subroutine)或函数(Function)。
子程序用于完成一系列操作,而函数则返回一个值。
3.2 模块(Module)Fortran中的模块是一个编译单元,用于组织和管理相关的过程和变量。
Fortran子程序
函数与子程序
子程序和主程序之间最大不同在于:主程序的程序代码,在程序一开始 就自动被执行,而子程序的代码只有在被‚调用‛才会执行。
一个包含子程序的Fortran程序在结构上大致如下:
program main ← 主程序 „„ „„ ←主程序代码 „„ end program main ←主程序结束 subroutine sub1() ←第1个子程序 „„ „„ ←子程序码 „„ end subroutine sub1 ←第1个子程序结束 subroutine sub2() ←第2个子程序 „„ „„ ←子程序码 „„ end subroutine sub2 ← 第2个子程序结束
函数与子程序
使用common还有一些技巧,见下面实例。主程序中有全局变量a,b, 子程序中有大小为2的数组a(2),根据使用相同内存空间的策略,a等于 a(1),而b等于a(2)。
program ex0814 implicit none real :: a,b common a,b ! 把浮点数a,b放在全局变量中 a = 1.0 b = 2.0 call ShowCommon() stop end subroutine ShowCommon() implicit none real :: a(2) common a ! 把数组a放在全局变量中 write(*,*) a(1), a(2) return end
传递参数与使用全局变量都可以在 不同程序之间共享数据,简单的说,当 需要共享的变量不多,而且只由少数几 个程序需要使用这些数据时,就使用参 数;当共享大笔数据,或是有很多个不 同程序都要使用这些数据时,就使用全 局变量。
函数与子程序
2、BLOCK DATA 的使用 关于common设臵初值的方法,common变量不能直接在子 程序或主程序中使用DATA来设臵初值,要在BLOCK DATA程序模块中使用DATA命令来设臵初值,看一个程序:
FORTRAN子程序
语句函数小结: 引用语句函数时,给定的实元必须和对应的
虚元个数相等,类型一致,位置相符。在进
行虚实结合时,虚元与实元不是以名字相同 传值,而是按位置类型一一传值。
在同一程序单位中不允许变量名与函数名同名, 但允许变量与虚元同名。
例:F(X) =XX+X+1.0 X =3.0 Y=(X+3.0)/2.0 Z=F(1.0)+F(2.0)+F(3.0)
语句函数的引用过程
当程序执行到一个语句函数的引用时,要经过 下列几个过程: 当实元为表达式时,先求出表达式的值,然后 控制转到语句函数定义语句去执行; 实元和对应的虚元进行结合,即实元的值传给 虚元(称为虚实结合过程); 求表达式e的值;
语句函数的引用过程
根据语句函数名的类型和表达式e求值结果,按 赋值规则得到函数引用的值由函数名带回,并 控制返回到原表达式函数引用处,继续计算表 达式值。 这一过程是由计算机系统来完成的, 用户可不必担心。
7.2 函数子程序(外部函数)
语句函数只能用一个语句定义,而且只 能在定义它的程序段中使用。
分析:函数f(X)是用两个表达式定义的,不 能用简单的语句函数来表示。怎么办? FORTRAN提供了一种方法,就是把函数的 计算部份从程序中独立出来,并按一定的格 式编成一个单独的子程序段,称为外部函数 或函数子程序。
语句函数小结: 在语句函数定义的语句中,也可出现其他的语句 函数引用,但被引用的语句函和须在它前面已定义。 不允许引用自身或在它后面定义的语句函数。 例:S(A, B, C) = (A+B+C) / 2.0
PP (A, B, C) = SQRT (S(A, B, C) A)
PP 函数引用了它前面所定义的S函数
FORTRAN90-子程序浅
100
Program Main REAL MYEXP WRITE(*,*) ‘Enter X:’ READ(*,*)X Y=(MYEXP(X)-MYEXP(-X))/2.0 WRITE(*,100)’Sinh(‘,X,’)=‘,Y FORMAT(1X, A, F5.2, A, E13.6) END
9
f(x) = x * x + 2 * x + 5 x = 3.0 y = x * f(1.0) WRITE(*,*) y END
24.00000
10
四、语句函数的应用
例:利用二分法求方程x3-x2-1=0在[0,3]上的实根。
Real::a=0.0,b=3.0,m Fa=a**3-a*a-1.0; Fb=b**3-b*b-1.0 m=(a+b)/2; Fm=m**3-m*m-1.0 Do while (Fm>1.0e-6) If(fm*fa>0) then a=m;Fa=Fm Else b=m Endif m=(a+b)/2.0; Fm=m**3-m*m-1.0 Enddo Write(*,*)’方程的根为:‘,m End
Program Main
REAL W(5,5)
CALL READIN(W) CALL OPP(W,X1,X2) WRITE(*,100)X1,X2 100 FORMAT(1X, ‘The two sum of opposite angles &
elements:’/1X,’X1=‘,F8.2,’X2=‘,F8.2)
(1)
SUBROUTINE SUB(B) DIMENSION B(-1:5) . . . END
B(-1) B(0) B(1) B(2) B(3) B(4) B(5)
Fortran子程序
主程序的任务是将50-100之间的每个数依次调用 主程序的任务是将50-100之间的每个数依次调用 50 PRIME函数子程序 求出那些使PRIME 函数值为1 函数子程序, PRIME函数值为 PRIME 函数子程序 , 求出那些使 PRIME 函数值为 1 的自 然数并求这些数的和。 然数并求这些数的和。
8.2 函数子程序 一、 函数子程序的定义
[类型说明 FUNCTION 函数名 虚参表 类型说明] 函数名(虚参表 虚参表) 类型说明 函数体 END 函数名的作用: 函数名的作用:函数的标识 代表该函数的函数值 虚参可以是变量名、数组名、 虚参可以是变量名、数组名、子程序名 返回调用程序之前:函数名= 返回调用程序之前:函数名=表达式
8.1 语句函数 语句函数——
一、语句函数的定义 定义格式: 定义格式: f (x1, x2,...,xn ) = e
f:语句函数名, x:虚参, e:表达式 :语句函数名, :虚参, : 1. 语句函数名 函数名的组成规则与变量名相同 语句函数不能与同一个程序单元中的变量同名。 语句函数不能与同一个程序单元中的变量同名。 可在语句函数定义语句前用类型语句说明该函数名 的数据类型,否则该语句函数的函数值的类型按其 的数据类型, 函数名遵守I N隐含规则。 函数名遵守I—N隐含规则。
注意: 注意: 函数用一条语句可以定义时, 函数用一条语句可以定义时,才用语句函数的 形式定义函数。 形式定义函数。 语句函数定义语句是非执行语句, 语句函数定义语句是非执行语句,放在本程序 单位中的所有执行语句之前,说明语句之后。 单位中的所有执行语句之前,说明语句之后。 语句函数只在本程序单位中有意义。 语句函数只在本程序单位中有意义。 表达式的类型与函数名的类型应一致。 表达式的类型与函数名的类型应一致。
fortran语言的基本概念
fortran语言的基本概念Fortran语言的基本概念概述Fortran(Formula Translation)是一种用于科学计算和数值分析的高级编程语言。
它是最早的编程语言之一,由IBM公司在20世纪50年代开发。
Fortran语言以其高效、可靠和快速的特点,长期被广泛应用于科学和工程计算领域。
基本结构Fortran程序以程序单元作为基本的执行单位,程序单元分为主程序和子程序两种类型。
主程序•主程序是Fortran程序的入口点,每个Fortran程序必须包含一个主程序。
•主程序由PROGRAM关键字定义,后接程序名称。
•主程序内包含了程序的执行逻辑和控制流程,通过调用子程序完成具体的计算任务。
•子程序是主程序的辅助部分,用于定义重复使用的计算任务或功能模块。
•子程序由SUBROUTINE或FUNCTION关键字定义。
•SUBROUTINE用于定义过程(Procedure),只执行特定的计算任务,不返回结果。
•FUNCTION也是定义过程,但它还可以返回一个值作为结果。
变量与数据类型Fortran语言使用变量来存储和操作数据,变量需要先进行声明。
Fortran提供了多种数据类型,用于存储不同类型的数据。
声明变量•变量声明使用DIMENSION或INTEGER/REAL/COMPLEX/LOGICAL等关键字。
•变量声明语句通常出现在主程序的开头或子程序的参数列表中。
数据类型•INTEGER用于表示整数类型的数据。
•REAL用于表示浮点数类型的数据。
•COMPLEX用于表示复数类型的数据。
•LOGICAL用于表示逻辑类型的数据,可取值为TRUE或FALSE。
Fortran语言提供了多种控制流程语句,用于在程序中实现条件判断和循环操作。
条件判断•IF-THEN语句用于根据条件执行不同的代码块。
•IF-THEN-ELSE语句可根据条件选择执行不同的代码块。
循环•DO语句用于实现循环操作,可指定循环的起始值、结束值和步进值。
多重积分Fortran子程序------
多重积分Fortran子程序-------VEGAS.F流程图说明:这里只是对子程序的算法和如何分层做详细介绍,对打印输出和其他一些东西都做略过。
还有这个子程序中涉及的变量很多,而且变量的意义也变化,所以下面涉及到的变量我都会在画流程图前加以适当的说明。
1.子程序所涉及的变量及其的意义:有用输入参数:FXN:被积函数。
ACC:所要求的精度。
NDIM:被积函数的变量的个数。
NCALL:投点的总数。
ITMX:要求的叠代的次数。
NPRN:打印的要求(具体要求略过)。
子程序内部的参数及其意义:TI(A VGI):数值积分的结果。
IT:叠代的次数。
X(I,J):各随机变量的分布,J表示各个变量。
ERR(SD):数值积分的误差。
ALPH0:变化区间的参数。
RAND(20):[0,1]的随机数列。
X(J):用于积分的坐标等。
2.主要的程序模块和各模块的功能总的流程图:3.各模块的流程图1)初始化设定各个参数该部分的主要工作就是给各参数输入初始值,下面简述各个初始化的参数以及各参数的意义或在以下何模块里要用到。
ALPH=1.5; 这是在7中用到,作为变换分布的参数。
CALLS=NCALL;投点的总数。
XND=ND=50;区间分为50份。
NDM=ND-1=49;为以下处理方便。
IT=0;叠代初始为零。
SI=0;SI2=0;SWGT=0;SCHI=0;SCALLS=0;以上五个变量均是叠代参数,在5中用。
2)初始化内部分布:变量的意义:RC:分层的间隔。
NDIM:变量的个数。
XI(I,J):变量的区间的分布。
XND:区间分层数。
XNDM=XND-1。
DR:求和号。
初始化的分布是一个均匀分布,实现的流程图如下:3) 初始叠代参数:这不仅仅是初始化的过程了,而是大的循环的一部分,每改变一次变量的分布,就需要初始化叠代参数一次。
下面简述各个初始化的参数以及各参数的意义或在以下何模块里要用到。
IT=IT+1;叠代的次数。
TI=0;积分值清零。
fortran子程序参数
fortran子程序参数一、引言Fortran是一种广泛应用于科学计算和工程领域的编程语言。
在Fortran程序中,子程序是一种常用的模块化程序设计方法,允许将重复的任务或功能封装在单独的程序段中,以提高代码的可读性和可维护性。
在Fortran子程序中,参数传递是一种常见的操作,用于将数据从一个程序段传递到另一个程序段。
本文档将介绍Fortran子程序参数的基本概念、传递方式以及注意事项。
二、参数传递的基本概念在Fortran中,子程序参数可以通过传值、传引用和传指针等方式进行传递。
传值是将参数作为副本传递给子程序,子程序对参数的修改不会影响原始变量的值。
传引用是将参数的地址传递给子程序,子程序对参数的修改会影响原始变量的值。
传指针是将变量的地址以指针的形式传递给子程序,子程序可以通过指针访问和修改该变量的值。
三、参数传递的方式1.传值参数:传值参数是通过将数据拷贝到子程序中传递的。
在函数调用时,会将原始变量的值复制一份给函数参数,函数对参数的修改不会影响原始变量。
例如:```scsssubroutinemy_subroutine(value_param)implicitnoneinteger,intent(in)::value_param...endsubroutinemy_subroutine```在上面的代码中,`value_param`是一个传值参数,子程序对它的修改不会影响原始变量。
2.传引用参数:传引用参数是将原始变量的地址传递给子程序。
子程序可以通过该地址访问和修改原始变量的值。
例如:```scsssubroutinemy_subroutine(ref_param)implicitnoneinteger,pointer::ref_param...endsubroutinemy_subroutine```在上面的代码中,`ref_param`是一个指向整数的指针,子程序可以通过该指针访问和修改原始变量。
fortran subroutine的用法
fortran subroutine的用法Fortran子程序(Subroutine)是指Fortran编程语言中一个常用的独立执行程序。
Fortran子程序是一种对主程序可以被多次引用的可重用的模块,可被通过特定的函数声明来完成较复杂的任务。
与函数不同,它不会返回任何值也不会接收任何参数,因此运行的结果只能写入和/或输出给主程序。
包括Fortran的多种编程语言,如C,C++等,都有子程序的用法。
1. Fortran子程序的定义:Fortran子程序是指一个独立的程序,可以被引用多次,可以用来完成更为复杂的任务,它不会返回任何值。
2. Fortran子程序的声明:子程序的声明由特定的子程序声明构成,语法如下:[SUBCOMMON subroutineDDORTY] [CHARACTER*(*) name] [EXTERNAL name] [PARAMETER (param,…)] name(list of arguments) [INTEGER*4 │ INTEGER │LOGICAL │ REAL │ DOUBLE │ CHARACTER │ COMPLEX function]其中,参数SUBCOMMON子程序提供了一种定义并发要求子程序的方式;PARAMETER子程序声明提供了一种定义常量的方式;EXTERNAL子程序姆挨本声明是一种定义要调用程序库函数的方式;CHARACTER子程序姆挨本声明提供了一种定义字符串变量的方式;而FUNCTION子程序姆挨本声明提供了定义函数的方法,在本子程序中定义的函数的参数和返回值必须是自定义的。
3. Fortran子程序的编写:子程序的编写和普通Fortran程序一样,采用fortran写程序语言,运行环境推荐使用fortran编译器(compiler)。
在子程序中,程序可以使用多个定义在主程序中的变量(全局变量),也可以使用局部变量,局部变量的定义使用clause选项,放在子程序声明里。
fortran 子程序参数
fortran 子程序参数(最新版)目录1.Fortran 子程序参数概述2.Fortran 子程序参数的定义与声明3.Fortran 子程序参数的传递与使用4.Fortran 子程序参数的优点与局限性正文1.Fortran 子程序参数概述在 Fortran 编程语言中,子程序是一种可以实现代码重用的模块化程序结构。
通过将一些功能相似的代码组织成一个子程序,可以提高代码的可读性、可维护性和可重用性。
为了实现子程序之间的数据交互,Fortran 提供了一种名为“子程序参数”的机制,用于在子程序之间传递数据。
2.Fortran 子程序参数的定义与声明Fortran 子程序参数的定义与声明主要包括以下几个步骤:(1)在主程序中定义子程序。
使用“subroutine”关键字定义一个子程序,并给子程序起一个名字。
例如:```fortransubroutine my_subroutine```(2)在子程序中声明参数。
在子程序内部,使用“implicit none”语句关闭隐式参数,然后通过“parameter”语句声明子程序参数。
例如:```fortranimplicit noneparameter :: x = 0, y = 0```(3)在主程序中声明子程序参数。
在主程序中,使用“interface”语句声明子程序参数,并指定参数的类型和名称。
例如:```fortraninterface my_subroutinesubroutine my_subroutine(real :: x, real :: y)end interface```3.Fortran 子程序参数的传递与使用Fortran 子程序参数的传递与使用主要包括以下几个步骤:(1)在主程序中调用子程序。
在主程序中,使用子程序名和括号内的参数列表调用子程序。
例如:```fortrancall my_subroutine(3.14, 2.71)```(2)在子程序中使用参数。
第六讲 Fortran中的子程序
一、子例行程序的定义
子例行程序是以Subroutine 语句开头,并以End语句结束的一 个程序段,其定义的一般格式为:
Subroutine 子例行程序名(虚参表)
子例行程序体 end
2015/12/20 12
注意: (1)子例行程序的命名方法与变量相同。虚参由变量、数组 名(不能是数组元素,常数、表达式)充当,当有多个虚参 时,之间用“ ,” 分隔,没有虚参时子例行程序名后面的一对 括号可以省略; (2)子例行程序的设计方法与函数子程序相同,但不能有对 子例行程序名的赋值语句(因为其名字没有值)。
第六讲 Fortran中的子程序
实际中的程序由若干个程序单元组成,但是有且只有一个主 程序( Program main ),其它的都是子程序。子程序是构造 大型实用程序的有效工具,设计程序要善于利用子程序,因 此,本讲学习Fortran中的子程序:函数子程序和子例行程序。 此外,在Fortran中还有一种类似与函数子程序的语句函数。
2015/12/20 15
分析:牛顿迭代公式为:
program newton f(x)=7*x**4+6*x**3-5*x**2+4*x+3 f ( xn ) df(x)=28*x**3+18*x**2-10*x+4 xn 1 xn ' f ( xn ) read*,x0,e !x0=-1.0,e=0.0001 x1=x0 首先要给个迭代初值 x0 , x2=x1-f(x1)/df(x1) 代入公式的右边计算 x1 , do while(abs(x1-x2)>e) 再把 x1 代入计算出 x2 , … , x1=x2 x2=x1-f(x1)/df(x1) 当第n次和第(n+1)次计算 end do 结果差不多时(在规定的 print*,x1,f(x1) 精度内),则计算结果就 end
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
•
前者用双撇号作定界符,后者用单撇号作定界符, 而将字符串的单撇号用两个单撇号表示,系统会 自动将其处理为字符串的一个单撇号字符。
5
字符串中含有单引号或双引号的处理
•
当字符串中又含有单撇号时例如要将I'M A STUDENT作为一个字符串来处理,为了区分'是 字符串中的字符还是定界符,可采用两种方式表 示:
!
•
直接常量
•
用单引号或双引号(有的地方又称单撇号、 双撇号)括起来的字符串
4
字符常量
•
!
符号常量
program hello implicit none character(len=*), parameter :: & message = "Hello, I am a computer." print *, message end program
6
字符变量赋值
program test_sign implicit none real :: number character(len=8) :: number_sign read *, number if (number > 0) then number_sign = "positive" else if (number == 0) then number_sign = "zero" else number_sign = "negative" end if print *, number, "is ", number_sign end program
•
按ASCII码值判定字符串s1小于字符串s2。
•
结果为逻辑值
16
program char_comp implicit none character(4) :: a, b a='abcd' b='efgh' print*,a>=b print*,lge(a,b) end program
3
字符常量
•
!
符号常量
program hello implicit none character(len=*), parameter :: & message = "Hello, I am a computer." print *, message end program
13
program explore_character_set ! Prints the character with given character code ! in the default kind implicit none integer :: code print *, "Type a character code" read *, code print "(i5, 3a)", code, ">", achar(code), "<" end program
8
•
字符串的输入
•
自由格式输入
•
可以用单引号或双引号把字符串括起来,也可以 不括 但最好是括起来,否则有些字符(如/)无法输入
•
•
格式输入
•
不能使用引号
• •
输入多余的字符将被忽略 输入不足则在后面补空格
9
program char_input1 implicit none character(2) :: a,b read*,a print*,a read'(A)',b print*,b end program
10
program char_input1 implicit none character(2) :: a,b read*,a print*,a read'(A)',b print*,b end program
10
Character Collating Sequences 字符对比序列
6
字符串的长度
•
字符串的长度就是字符串中所包含的字 符个数 可用函数len进行查询
• • • • •
•
len("love") is 4 len("Good morning.") is 13 len(" ") is 1 len(" ") is 4 len("bg7*5 ad") is 8
•
字符串数组
•
character(len=20), dimension(5, 9, 7) :: string_array
•
空字符
•
"",''
2
program test_character implicit none character(len=:),allocatable :: line_4 line_4="" print*,line_4,len(line_4),sizeof(line_4) line_4="test" print*,line_4,len(line_4),sizeof(line_4) line_4="testtest" print*,line_4,len(line_4),sizeof(line_4) end program
• •
"I'M A STUDENT" 'I''M A STUDENT'
•
前者用双撇号作定界符,后者用单撇号作定界符, 而将字符串的单撇号用两个单撇号表示,系统会 自动将其处理为字符串的一个单撇号字符。
That was a "story"可表示为'That was a "story"' 或"That was a ""story"""
• • •
ASCII,也是ISO/IEC 646:1991 多字节字符,ISO/IEC 10646:-1:2000 判断大小就是以此为序
11
achar和iachar函数
• • •
achar(i)返回ASCII码i所代表的字符 iachar(a)返回字符a的ASCII码 一般来说
12
•
program explore_character_set ! Prints the character with given character code ! in the default kind implicit none integer :: code print *, "Type a character code" read *, code print "(i5, 3a)", code, ">", achar(code), "<" end program
• • •
iachar与ichar等价 achar与char等价 区别是char和ichar采用机器内置对比序列,而achar和 iachar采用ASCII对比序列
•
这里i的默认的种别参数为1,但iachar和ichar返回的整 数的默认种别参数是4 这里a的长度可以超过1,但是只有第一个字符起作用
!
•
直接常量
•
用单引号或双引号(有的地方又称单撇号、 双撇号)括起来的字符串
4
字符串中含有单引号或双引号的处理
•
当字符串中又含有单撇号时例如要将I'M A STUDENT作为一个字符串来处理,为了区分'是 字符串中的字符还是定界符,可采用两种方式表 示:
• •
"I'M A STUDENT" 'I''M A STUDENT'
5
字符变量赋值
program test_sign implicit none real :: number character(len=8) :: number_sign read *, number if (number > 0) then number_sign = "positive" else if (number == 0) then number_sign = "zero" else number_sign = "negative" end if print *, number, "is ", number_sign end program
第5章 字符数据
字符串的声明
•
定长度的字符串
•
character(len=7) :: string_7
•
动态字符串