资源描述:
《子程序的定义及使用》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第九讲子程序的定义及使用9.1Fortran子程序概述FORTRAN90子程序,也称过程,划分为两类:函数和子例行程序。函数是指产生一个运算结果且通过操作数调用执行的子程序。子例行程序是指可产生多个处理结果且通过CALL语句调用执行的子程序。每类子程序又划分为标准子程序和用户自定义子程序。用户自定义子程序又划分为内部子程序、外部子程序和模块子程序。FORTRAN90的子程序分类FORTRAN90子程序子例行程序标准子例行程序用户自定义子例行程序内部子例行程序外部子例行程序模块子例行程序函数标准函数用户自定义函数内部函数外部函数模块函数语句函数
2、标准子程序内部子程序外部子程序模块子程序标准子程序内部子程序外部子程序模块子程序使用标准函数需要注意以下几点:标准函数对变元的个数和类型有明确的规定和要求。要求有一个变元,如函数SIN(x);要求两个变元,如函数MOD(m,n);要求多个变元,如函数MAX(x1,x2,…,xn)。要求变元类型为整型,如函数MOD(m,n);,要求变元类型为实型,如SIND(x);要求变元类型为整型、实型、双精度、复型等多种类型,如ABS(x)。标准函数的函数值只有一个,且有明确的类型规定。多数函数函数值类型与变元类型相同,如函数SQRT(9.0D0)=3.0
3、D0,类型都为双精度;也有函数函数值类型与变元类型不相同,如函数INT(8.5)=8,变元类型为实型,而函数值类型为整型。对于“弧度”和“角度”单位,使用不同的三角函数。函数变元必须写在函数名后括号内,变元可是常数、变量或表达式,少数标准函数变元要求变量,如LOG(v)IMPLICIT语句不能改变一个标准函数的类型。9.2语句函数在求解实际问题时,特别是在求解有关科学与工程数值计算问题时,常常会遇到计算一些数学表达式,如:这些数学表达式在程序中多次出现,需要重复书写它们,不但浪费了宝贵的时间和精力,而且也容易出错。任何数学表达式实际上都可表示
4、成一元、二元或多元函数关系,即F(x1,x2,…,xn),这些函数关系如果没有对应的标准函数,则需要用户设法定义新的函数来实现它们。FORTRAN90提供了语句函数定义功能来定义一些简单的函数,用于实现有关的函数关系。用户自定义语句函数其使用方法与标准函数相同,可以作为操作数在表达式中调用。一般形式为:F(x1,x2,…,xn)=<表达式>F为函数名,x1,x2,…,xn为虚拟变元(或称形式参数或哑元)。要求:不能重名,只能为普通变量名。类型可用隐含规则定义,也可用类型声明语句定义,但须放在该语句函数定义语句之前。下面程序通过语句函数实现[例
5、9.2]问题。PROGRAMF72F(x1,x2,x3)=3.14159*(x1+x2/60.0+x3/3600.0)/180.0A=F(36.0,43.0,27.0)B=F(15.0,24.0,0.0)C=F(8.0,16.0,54.0)S=COS(A)**2-4*SIN(B)*TAN(C)WRITE(*,*)A,B,C,SENDprogram调用一般形式为:语句函数名([<实在参数表>])说明:<语句函数名>同语句函数定义语句中的语句函数名相同。<实在参数表>为实在参数或实参,其个数、次序和类型应与定义语句中形式参数一致。实在参数之间用逗
6、号分隔。实参可是常数、变量、数组元素、函数名、表达式。当调用语句函数时,其执行过程如下:首先计算实参表达式的值;将实参值赋予对应的形参,即形实参结合用被赋值的形参对语句函数定义语句中的表达式进行求值运算;将运算后的表达式值转换为函数名类型,并将其按函数值返回到调用位置。使用语句函数的一些规定:一个语句函数只能在一行内定义。如果太长,可续行书写。语句函数定义语句是非执行语句。语句函数只有一个函数返回值,函数名与函数值符合赋值规则。定义语句函数,右端表达式中可调用已定义语句函数或标准函数,但不能调用该语句函数自己,即不能递归调用。H(x1,x2)
7、=x1*x1+x2*x2F(x1,x2)=SQRT(H(x1,x2))语句函数的形式参数不允许为数组或下标变量或常量。DIMENSIONA(10),B(2,3)F1(x,y)=x+A(1)+y-B(1,2)!表达式中可以引用数组元素F(C)=C+100语句函数名属于局部变量,只能在定义它的程序单位中引用。语句函数可无形参,称为无参函数,圆括号不能省略,即:F()。[例9.1]计算空间一点P(x,y,z)的方向弦,其计算公式如下:其中:α、β、γ为点P到原点直线与坐标轴x、y、z的夹角。PROGRAMF7_1F(a,b,c,r)=r/SQRT(
8、a*a+b*b+c*c)WRITE(*,*)'输入x,y,z:'READ(*,*)x,y,zDA=F(x,y,z,x)DB=F(x,y,z,y)DG=F(x,y,z