fortran子程序【精选】

合集下载

FORTRAN子程序ppt课件

FORTRAN子程序ppt课件

算法:弦截法的基本思路与“二分法” f(x) 相似,它是取f(x1)与f(x2)连线与x轴的
f(x2)
交点x,从(x1,x)与(x,x2)两个区间中舍
去一个,舍取的方法为: 1、如果f(x)与f(x1)异号,则用x作为新 的x2,这就舍去了原来的(x,x2)区间。 2、如果f(x)与f(x1)同号,则用x作为新
24
精选课件ppt
7.2 函数子程序(外部函数)
语句函数只能用一个语句定义,而且只 能在定义它的程序段中使用。
分析:函数f(X)是用两个表达式定义的,不 能用简单的语句函数来表示。怎么办? FORTRAN提供了一种方法,就是把函数的 计算部份从程序中独立出来,并按一定的格 式编成一个单独的子程序段,称为外部函数 或函数子程序。
(4) 编译独立。如果每个子程序是以一个 文件存贮的。则可以单独进行编译。 这样使得便于编写,便于维护,并能 实现软件共享。
函数值取x2的的 符号,取x1的绝 对值
X2=X
FX2=FX
END IF
IF((ABS(X1-X2).GT.1E-5).AND.(ABS(FX).GT.1E-6))
& GOTO 10
IF(FX.GT.1E-6)X=(X1+X2)/2.0
WRITE(*,*)X
15
END
精选课件ppt
例 2:用语句函数采用弦截法求X3-2X2-7X+4=0的根。
实元和对应的虚元进行结合,即实元的值传 给虚元(称为虚实结合过程);
求表达式e的值;
11
精选课件ppt
语句函数的引用过程
根据语句函数名的类型和表达式e求值结果,按 赋值规则得到函数引用的值由函数名带回,并 控制返回到原表达式函数引用处,继续计算表 达式值。

Fortran程序设计之子程序

Fortran程序设计之子程序


前者用双撇号作定界符,后者用单撇号作定界符, 而将字符串的单撇号用两个单撇号表示,系统会 自动将其处理为字符串的一个单撇号字符。
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

fortran函数定义与子例子程序

fortran函数定义与子例子程序

fortran函数定义与子例子程序Fortran 语法备忘录 (中级1)——转载2010-03-10 19:12转载于目录:【主程序】【语句函数】【内在过程】【内部过程】【外部过程】◆外部函数◆外部子程序◆EXTERNAL属性和哑过程◆INTENT属性◆OPTIONAL属性◆哑元改名◆关键字变元INTRINSIC属性◆类属过程◆过程接口INTERFACE◆超载操作符◆自定义操作符◆超载赋值号【模块】【块数据】【指针】【主程序】!-----------------------------------------------------------------------[PROGRAM [程序名]][说明部分][可执行部分][CONTAINS内部过程]END [PROGRAM [程序名]]!-----------------------------------------------------------------------【语句函数】 f(x)=x**2+1【内在过程】 max,abs,sin,char。

【内部过程】 Contains与宿主程序共享变量名, 外部过程FUNCTION, SUBROUTINE都可以有自己的内部过程。

通常没有说明语句。

没有哑元,无哑实结合。

使用内部过程的规则:在宿主中不要定义子程序名和函数名的类型,也不能指定它们是有EXTERNAL属性。

宿主中的变量名和数组名等在内部过程中有效,有相同的数值。

但同一名若在内部过程中又进行了类型声明,则此名被视为其过程中的独立变量,无相同的数值。

内部过程中也可引用另一内部过程。

例:!-----------------------------------------------------------------------program internalreal a,b,ccall findprint *,ccontainssubroutine findread *, a,bc=sqrt(a**2+b**2)end subroutine findend!-----------------------------------------------------------------------【外部过程】过程=函数&子程序哑元调用方式:传址调用call by adress,即传递4字节的变量的内存地址。

FORTRAN 90第八章子程序

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子程序

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

第六讲 Fortran中的子程序

第六讲 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

Fortran PPT课件1 (17)外部子例行子程序

Fortran PPT课件1 (17)外部子例行子程序

6.3 外部子例行子程序
哑元类型可以按隐含规则确定,当哑元是数组名 时,必须在子例行子程序体内用类型说明语句或维 数语句说明其类型、维数和各维的上、下界,当哑 元是指针时,也必须在子例行子程序体内用类型说 明语句说明。
6.3 外部子例行子程序
外部子例行子程序的调用 call 子例行程序名(a1,…,an) 例:以初速度和角度,计算标枪的投射距离
6.3 外部子例行子程序
! 把0~360的角度转换成0~2PI的弧度 subroutine Angle_TO_Rad( angle, rad ) implicit none real angle, rad real, parameter :: pi=3.14159 rad = angle*pi/180.0 return end
6.3 外部子例行子程序
! 由角度、切线速度来计算投射距离 subroutine Get_Distance( angle, speed, distance ) implicit none real angle, speed ! 传入的参数 real distance ! 准备传回去的结果 real rad, Vx, time ! 内部使用 real, parameter :: G=9.81 call Angle_TO_Rad( angle, rad ) ! 单位转换 Vx = speed*cos(rad) ! 水平方向速度 time = 2.0*speed*sin(rad) / G ! 在空中飞行时间 distance = Vx * time ! 距离 = 水平方向速度 * 飞行时间 return end
program ex0806 implicit none integer, parameter :: players = 5 real :: angle(players) = (/ 30.0, 45.0, 35.0, 50.0, 40.0 /) real :: speed(players) = (/ 25.0, 20.0, 21.0, 27.0, 22.0 /) real :: distance(players) integer :: I do I=1, players call Get_Distance( angle(i), speed(i), distance(i) ) write(*,"('Player ',I1,' =',F8.2)") I, distance(i) end do end

fortran子程序【精选】

fortran子程序【精选】

parameter (n1=3,n2=3,n3=3)
dimension a(n1,n2)
dimension b(n2,n3),c(n1,n3)
open(5,file='input.dat')
call getmat(a,n1,n2)
call getmat(b,n2,n3)
call matpro(a,n1,n2,b,n3,c)
20 continue end
real w(5,5) call readin(w)
输入矩阵 1,2,3,4,5 2,3,4,5,1
call opp(w,x1,x2) write(*,100) x1,x2 100 format(1x,'The two sum of',
3,4,5,1,2
$ ' oppusite angles elements:',
subroutine sub(ch) charact...er*(*) ch end
11
(4)如果实参是变量或数组元素,在调用子程序时, 对应的虚实参数实际上将共用同一存储单元。
program main
subroutine sub(x,a)
integer a,c(3)
integer x,a
data c/3*0/
4,5,1,2,3 5,1,2,3,4
$ /1x,'x1=',f8.2,' x2=',f8.2) end
9
主要区别:
1. 形式不一样(function、subroutine、call),无虚参 时括号使用不一样。
2. 子程序名的意义不一样。函数子程序名代表函数值, 通过其传递数据,需要类型说明;而子例行程序名仅 为了调用使用,通过虚实参传递数据。

fortran 子程序参数

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.值传递:将参数的值传递给子程序,子程序中对参数的修改不会影响主程序中的参数值。

fotran90子程序

fotran90子程序
华中科技大学土木工程与力学学院 《Fortran语言》
2/90

FORTRAN子程序分为:
内部子程序 FORTRAN子程序 外部子程序

内部函数子程序
内部子例行程序
外部函数子程序 外部子例行子程序 FORTRAN 77的子程序
1)函数子程序; 2)子例行程序; 3)数据块子程序(后章介绍)
华中科技大学土木工程与力学学院 《Fortran语言》
FUNCTION MYEXP(X) REAL MYEXP N=0 T=1 S=1 DO 10 ,WHILE(ABS(T).GT.1E-5) N=N+1 2 T=T*X/N x S=S+T CONTINUE MYEXP=S END
e e sinh(x) 2
x
x
10
x x x e 1 x ... 2! 3! n 0 n!
华中科技大学土木工程与力学学院 《Fortran语言》
18/90
11.1 函数子程序
11.1.2 函数子程序的调用:
在函数调用时,实参的值传递给对应位 置上的形参,程序就接着转去执行函数 体内的执行语句。在遇到End或Return 语句返回调用单位,并把函数值带回,然 后继续参与主程序的表达式的运算。 4)如果函数没有形参,则在调用时也没 有实参,但括号不能丢。
华中科技大学土木工程与力学学院 《Fortran语言》
10/90
11.1 函数子程序
11.1.1 函数子程序的定义:
函数子程序中函数名的类型说明被省略 时, 则该函数名也遵循隐含类型规则。 函数名后的括号中存放虚参,虚参之间以
逗号相隔, 没有虚参时,括号是不能少的.
函数子程序就象主程序一样,其函数体内

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 子程序参数

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的用法

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子程序

语句函数小结: 引用语句函数时,给定的实元必须和对应的
虚元个数相等,类型一致,位置相符。在进
行虚实结合时,虚元与实元不是以名字相同 传值,而是按位置类型一一传值。
在同一程序单位中不允许变量名与函数名同名, 但允许变量与虚元同名。
例: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-子程序浅

FORTRAN90-子程序浅
20
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子程序参数

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子程序

fortran子程序

Implicit none
Integer::M,N,K,L Read*,M,N CALL S(M,N,K,L) PRINT*,K,L
所有的输入、输出
END
Fortran 90 调用的执行过程
1、计算实元值(作为输出的可预先无值)
2、虚实按地址结合:虚元按顺序借用实元存储单元 3、运行权至子程序的第一句,直至遇子程序的 END语句返回到主调程序: ①运行权返回至CALL语句的下一个语句 ②虚实脱离结合,但子程序运行时造成的实元 值的改变将保留。
Fortran 90
练习: 计算函数Sinh(x)的值,当ex的通项值小于等于1E6时停止。计算公式如下:
e e Sinh ( x) 2 2 3 n x x x x e 1 x ....... 2! 3! n 0 n!
x
x
将ex的计算编写成外 部函数,便于重用
……
READ*,A,B D=F(A,B,c)
REAL::M,N,L,F_RESULT
F_RESULT=M+N L=M-N
虚元表 结果名
PRINT*,C,D
END
END
实元表
Fortran 90
子程序END语句写法 END END FUNCTION END FUNCTION 函数名 子程序END语句功能 1、函数单位的结束标志 2、将控制返回到主调程序。
4、函数子程序的调用是表达式中。 而子例子程序必须通过CALL语句来调用。 CALL 子程序名(实元表)
Y=F(实元表)
Fortran 90
例:编写子例行子程序求K=M+N,L=M-N 主程序输入2,3调用子程序求2+3,2-3的值。
重点:子程序 的输入、输出

多重积分Fortran子程序------

多重积分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;积分值清零。

(完整word版)FORTRAN经典入门程序20例

(完整word版)FORTRAN经典入门程序20例

对于FORTRA的初学者。

这些例子可作为小练习1.例题:计算工资问题。

每小时工资为RATE如果工作超过40小时,加班呢部分工资是正常时间工资的1.5倍。

C Payroll with overtimeprogram payrollreal rate, hours, payread (*,*) rate, hoursif (hours>40) thenpay=40*rate+(hours-40)*1.5*rateelsepay=hours*rateEND IFprint *, "rate=" , rateprint *, "hours=" , hoursprint *, "pay=" ,payend2•学生成绩问题。

大于80为A级。

大于60小于80为B级。

小于60为C级。

IF的嵌套。

注意空格可以看清楚else if ,e nd if,pri nt 的内容•PROGRAGRADESTUDENTREA0GRADEIF (GRADE .GE. 80) THENPRINT*,GRADE, "GRADE=>A"ELSEIF (GRADELT.60) THENPRINT*,GRADE"GRADE=>C"ELSEPRINT*,GRADE"GRADE=>B"END IFEND IFEND3. 三个数按从小到大排序。

PROGRA M AXMINREALA,B,C,TREA0A,B,CIF (A.GT.B) THENT=AA=BB=TELSEEND IFIF (B.GT.C) THENT=BB=CC=TELSEEND IFIF (A.GT.B) THENT=AA=BB=TEND IFPRINT*,A,B,CEND4. 运用EISE IF语句。

重做例子2PROGRAM2READ*,*) GRADEIF (GRADE .GE. 80.0) THENPRINT*, GRADE, "=>A"ELSE IF(GRADE .GE. 70.0) THENPRINT*, GRADE, "=>B"ELSE IF(GARDE .GE. 60.0) THENPRINT*, GRADE, "=>C"ELSEPRINT*, GARDE, "=>D"END IFEND3x 6,x 05. 计算y 2x 2x 8,x 0PROGRAEQUATIONREAD*,*) XIF (X .GE. 0.0) Y=3*X+6IF (X .LT. 0.0) Y=-X**2+2*X-8PRINT*, "X=" ,X, "Y=" ,YEND6. CONTINUED句。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1. 变量作虚参
(1)对应实参可以是同一类型的常量、变量、数组元 素和表达式。
(2)如果实参是常量或表 达式时,对应的虚参 变量值不应当改变。
3. 调用不一样。函数子程序一般在表达式中调用,子例 行程序通过call调用。
4. 用途不一样。只需得到一个计算值,一般采用函数子 程序的形式;希望通过子程序的运算得到一批数据, 应采用子例行程序。另外,使用子例行程序来完成一 些特定的操作。
10
三、 虚参实参数据传递
子程序中的虚参可以是变量名、数组名、函数名、 子例行程序名以及星号。
一行打印20个 “*”号,打两行。
8
subroutine opp(a,s1,s2) real a(5,5) s1=0
求矩阵两对角 线元素之和
do 10 i=1,5 s1=s1+a(i,i) 10 continue s2=0 do 20 i=1,5 j=5-i+1 s2=s2+a(i,j)
subroutine readin(a) real a(5,5) do 10 i=1,5 read(*,*) (a(i,j),j=1,5) 10 continue end
3
4
5
call sum(5,y3) call sum(6,y4) call sum(7,y5)
i i i
y i1
i1
i1
6
7
y=(y1+y2+y3)/(y4+y5)
i i
write(*,100) 'y=',y
i1
i1
format(1x,a,e13.6)
end
subroutine sum(n,s) integer n
1 (x 0)
else
y=-1.0
函数子程序必须以function
end if end
语句开头,end语句结束。
2
说明: 1. 函数名的取名方法与变量
名同,遵循I—N隐含约定, 否则需采用类型说明语句。
function myabs(x)
real myabs 定义法. 二
2. 函数名后的虚参可以是变量名、数组名和子程序名。 如没有虚参,一对圆括号不能省。
6. 同一源程序文件中,主程序和子程序先后次序无关紧要。
7. 函数子程序的调用形式与语句函数完全相同。 必须在调用程序中使外部函数名与函数子程序定义中函
数名的类型完全一致。必须保证函数名的类型、虚参的类 型与调用处的函数名以及实参类型一一对应。
4
function mye调用, 不代表某个值。
real s
s=0 do 10 i=1,n
子例行子程序必须以
s=s+i continue end
subroutine语句开头, 以end语句结束。
6
说明: 1. 子例行子程序取名法则与变量名同。 2. 如果没有虚参,程序名后的一对括号必须省略不写。
3. 子例行子程序也是独立的程序单位,return语句、 语句标号、变量的定义和使用与函数子程序相同。
第 九 章 数组 第 十 章 语句函数 第十一章 子程序 第十二章 数据共用存储单元
和数据块子程序 第十三章 文件
1
Fortran程序往往由一个主程序和若干个子程序组成。
Fortran的子程序有函数子程序、子例行子程序和数 据块子程序三种。
子程序可以被主程序调用,也可以被其他子程序调 用。Fortran77中的子程序不能递归调用。
4,5,1,2,3 5,1,2,3,4
$ /1x,'x1=',f8.2,' x2=',f8.2) end
9
主要区别:
1. 形式不一样(function、subroutine、call),无虚参 时括号使用不一样。
2. 子程序名的意义不一样。函数子程序名代表函数值, 通过其传递数据,需要类型说明;而子例行程序名仅 为了调用使用,通过虚实参传递数据。
n=0
t=1
s=1 do 10 while(abs(t).gt.1e-5)
n=n+1 t=t*x/n
ex 1 x x2 x3 2! 3!
s=s+t
10 continue
myexp=s
end
real myexp
write(*,*) 'Enter x:'
read(*,*) x
sinh(x) ex ex 2
y=(myexp(x)-myexp(-x))/2.0 write(*,100) 'sinh(',x,')=',y
100 format(1x,a,f5.2,a,e13.6)
end
5
二、 子例行子程序
主程序
100
子例行 子程序标志
子例行子程序
10
call sum(3,y1)
call sum(4,y2)
20 continue end
real w(5,5) call readin(w)
输入矩阵 1,2,3,4,5 2,3,4,5,1
call opp(w,x1,x2) write(*,100) x1,x2 100 format(1x,'The two sum of',
3,4,5,1,2
$ ' oppusite angles elements:',
4. 子例行子程序靠形参实参虚实结合传递数据,可返 回两个以上的数值。(优点)
7
5. 子例行子程序必须用独立的call语句调用。而函数子 程序的调用总是出现在表达式中,参与运算。
subroutine astar write(*,100) 100 format(1x,20('*')) end
call astar call astar end
一、 函数子程序
主程序 类型说明 子程序标志 函数名(虚参)
函数子程序 (外部函数)
write(*,*) y(5.0),y(0.0),y(-6.0) end
real function y(x) if(x.gt.0.0) then
y=1.0
1 (x 0)
y


0
(x 0)
else if(x.eq.0.0) then y=0.0
3. 在函数子程序流程返回调用单位之前,必须把所求得 的函数值赋给函数名(不带括号和虚参)。
4. 函数子程序流程执行到return或end语句时,立即返回 到调用单位。return语句在子程序中可以有多处,如 果紧邻end 可以省去。
3
5. 函数子程序中除虚参外的任何变量都不与其他程序单 位有关系,语句标号也是独立的。
相关文档
最新文档