第六讲 Fortran中的子程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第六讲 Fortran中的子程序
实际中的程序由若干个程序单元组成,但是有且只有一个主 程序( Program main ),其它的都是子程序。子程序是构造 大型实用程序的有效工具,设计程序要善于利用子程序,因 此,本讲学习Fortran中的子程序:函数子程序和子例行程序。 此外,在Fortran中还有一种类似与函数子程序的语句函数。
其中:f 称为函数名,x1、x2、…、xn称为虚参,e是关于虚参 的一个有效表达式。
(1)语句函数名:其取名及数据类型与变量相同。
比如:
F(x,y)=x**2+y*y→定义了一个实型函数F NF(x,y)=x**2+y*y→则定义了一个整型函数NF
又比如:Double precision FF FF(x,y)=x**2+y**2→定义了一个双精度型函数FF 注意在同一程序单元中,语句函数名不能与某个变量同名。
Integer Function f(x1,x2,…,xn) 函数体 end


Function f(x1,x2,…,xn) Integer f 函数体 end
如果没有这样的显式说明,则按照I-N规则。
2015/12/20 8
2、函数不能有同名虚参。而虚参的类型可以在函数体中说 明,没有说明则服从I-N规则; 3、在函数体中至少要有一个语句给函数名赋值,这种赋值 语句的格式为: 函数名=表达式 切莫在函数名后加入括号,错误地写成: 函数名(虚参)=表达式。
函数体
eBiblioteka Baidud
2015/12/20 6
其中,类型说明用于说明函数名的类型;函数名的命名方法 与变量名相同;虚参可以是简单变量和数组变量,但不能是 常数、数组元素、表达式。 function sm(m,n,l) sm=0 比如:求 do i=m,n if(l>0)then 100 S1 n 2 sm=sm+i**l n 1 else 140 S2 n3 sm=sm+(1.0*i)**l n 100 end if 30 1 end do S3 n 20 n end program main 程序的运行结果为: write(*,*)'s1=',sm(1,100,2) S1=338350.000000 write(*,*)'s2=',sm(100,140,3) S2=7.291440E+07 write(*,*)"s3=",sm(20,50,-1) S3=9.514656E-01 end 2015/12/20
二、函数子程序的调用
定义函数子程序的目的是为了调用,在 Fortran 中不仅主程 序可以调用函数子程序,而且函数子程序也可调用其它的函 数子程序,甚至调用本身(叫递归调用)。常把调用程序叫 主调程序单元,而被调用的函数子程序叫被调程序单元。 调用函数子程序的方法与调用内部函数及语句函数基本相同: (1)调用时应该用实参(可以是常量、变量、表达式等)代 替函数子程序中的虚参,实参和虚参的类型要相同;
§1
语句函数
就是用一条语句定义一个函数,比如:f ( x, y ) x 2 y x 2 2 y 2
就可以用Fortran的一条语句写出来:
f ( x, y) x * *2 * y sqrt ( x * *2 y * *2)
2015/12/20 1
一、语句函数的格式
f ( x1 , x2 , x3 ,, xn ) e
2015/12/20
2
(2)语句函数的虚参---即语句函数的自变量
1、称其为“虚参”是因为其本身是没有值的,只有在函数被 调用时才用实际意义(叫实参)代替; 2、可以按照普通变量对待虚参,但是一个语句函数中虚参不 能同名,但不同语句函数中虚参可以同名,虚参也可以和程 序中的变量同名; 3、虚参的类型说明与变量的类型说明方法与规则相同,而且 对与虚参同名变量同时有效; 4、当存在多个虚参时,之间用“,”分隔,如果没有虚参则函 数名后的括号是不能省略的。 (3)语句函数表达式 给出函数与参数之间的对应关系,可由虚参(必须包含所有的 虚参)、常量、变量、数组、 Fortran 的内部函数及在其前面 说明了的语句函数。
7
程序说明: 1 、整个程序由主程序和 1 个函数子程序组成,二者的位置不 分先后,因为程序执行时总是从主程序开始的; 2、函数子程序Function SM(m,n,l)中,缺省类型说明时,则 函数SM及其虚参标量m、n、l的类型遵守I~N规则; 3、主程序中的第2~4语句都要输出SM的值,其调用了函数子 程序SM。 函数子程序的定义还应注意以下问题: 1、函数值的类型说明方法可使用:
2015/12/20
5
§2
函数子程序
语句函数的不足是必须要在一条语句中完成对函数的定义, 因此只能用于较简单的函数,对于复杂的函数关系、无法用 一条语句完成时,需要用到本节的函数子程序。
一、函数子程序的定义
函数子程序是以Function 语句开头,并以End语句结束的一个 程序段,其可以独立自成一个程序文件,也可以和调用它的 程序单元合并成一个程序文件。其定义的一般格式为: [类型说明符] Function 函数名(虚参表)
2015/12/20 3
此外,还需注意的是:
1、只有当函数关系简单到,可以用一条语句描述函数与参数 的对应关系时,才能使用语句函数;
2、语句函数是非执行语句,要放在一个程序单元的所有其它 说明语句之后,并放在所有可执行语句之前; 3、语句函数只有在本程序单元中才有意义,即不能使用其它 程序单元中的语句函数; 4、语句函数中的虚参必须是变量,不能是常量、数组元素和 内部函数等; 5、语句函数是有类型的,因此语句函数表达式的类型一定要 与其函数名同类型。
二、语句函数的调用
语句函数一经定义,就可以在同一程序单元中调用它,调用 的方法与内部函数相同,即:
2015/12/20
函数名(实参表)
4
需要注意下面2个问题: 1、调用时可以使用常量、变量、内部函数及其表达式作为实 参代替对应的虚参位置,但要保证实参和虚参具有完全相同 的类型,并且实参是可以计算值的(即调用前实参中包含的 变量全部已经赋值); 2、实参和虚参个数相同。 比如: integer x,f f(x)=5*x**3-2*x**2+7*x+6 print*,f(-1),f(0),f(1) End 运行结果为:-8 6 16
相关文档
最新文档