预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共96页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

第七讲子程序7.1语句函数一、语句函数的概念上例三次使用同一公式,下面利用FORTRAN提供的语句函数来简化之,程序可改写如下:规定:语句函数是在使用的程序段内部用一个语句定义的函数,必须在程序段的开头定义,且只能在该段的内部使用。二、语句函数的定义使用规定使用规定三、语句函数的引用三、语句函数的引用语句函数的引用过程这一过程是由计算机系统来完成的,用户可不必担心。三、语句函数的引用例1:二分法:F(X)=X**3-6.0*X-1.0 100READ(*,*)X1,X2 FX1=F(X1) FX2=F(X2) IF(FX1*FX2.GT.0.0)GOTO100 10X=(X1+X2)/2.0 FX=F(X) IF(SIGN(FX,FX1).EQ.FX)THEN X1=X FX1=FX ENDIF IF(SIGN(FX,FX2).EQ.FX)THEN X2=X FX2=FX ENDIF IF((ABS(X1-X2).GT.1E-5).AND.(ABS(FX).GT.1E-6)) &GOTO10 IF(FX.GT.1E-6)X=(X1+X2)/2.0 WRITE(*,*)X END算法:弦截法的基本思路与“二分法” 相似,它是取f(x1)与f(x2)连线与x轴的 交点x,从(x1,x)与(x,x2)两个区间中舍 去一个,舍取的方法为: 1、如果f(x)与f(x1)异号,则用x作为新 的x2,这就舍去了原来的(x,x2)区间。 2、如果f(x)与f(x1)同号,则用x作为新 的x1,这就舍去了原来的(x1,x)区间。 如果f(x1)与f(x2)异号,则它们之间的连线必然交x轴于x点 有x=x2-(x2-x1)*f(x2)/(f(x2)-f(x1)) 3、再根据新的x1,x2,找到与x轴的交点x,重复上述步骤。LOGICALS F(X)=X**3-2.0*X**2-7.0*X+4.0 S(A,B)=SIGN(A,B).EQ.A 10READ(*,*)X1,X2 F1=F(X1) F2=F(X2) IF(S(F1,F2))GOTO10 F0=1.0 20IF((ABS(X1-X2).GT.1E-5).AND.(ABS(F0).GT.1E-6))THEN X=X2-(X2-X1)/(F2-F1)*F2 F0=F(X) IF(S(F0,F1))THEN X1=X F1=F0 ENDIFIF(S(F0,F2))THEN X2=X F2=F0 ENDIF GOTO20 ENDIF IF(ABS(F0).GT.1E-6)X=(X1+X2)/2.0 WRITE(*,*)X END 语句函数小结:语句函数定义中的函数名和虚元是具有类型的,可以用类型说明语句说明其类型或按隐含约定确定其类型。如:在语句函数定义的语句中,也可出现其他的语句函数引用,但被引用的语句函和须在它前面已定义。不允许引用自身或在它后面定义的语句函数。引用语句函数时,给定的实元必须和对应的虚元个数相等,类型一致,位置相符。在进行虚实结合时,虚元与实元不是以名字相同传值,而是按位置类型一一传值。例:程序第一行的X是语句函数的虚拟参数,第二行的X是变量名,它们彼此独立,无任何关系。第三行计算出Y的值等于2.0。第四行引用语句函数,分别将1.0,2.0,3.0代替语句函数定义语句中右边表达式的X,计算出F(1.0),F(2.0),F(3.0)。第五行F(x)中的X是变量名,其值为3.0,此时F(X)相当于F(3.0)7.2函数子程序(外部函数)7.2函数子程序(外部函数)一个FORTRAN程序可以由一个以上程序单位组成,这程序单位分别称为主程序和子程序,每个程序单位都可由FORTRAN编译程序单独进行编译,进行语法检查,生成目标代码,最后再连接装配在一起,成为一个可执行程序,图1是一个可执行FORTRAN程序的结构示意图,其中每个方框代表一个单独的程序单位,可以看到,一个FORTRAN程序必须有一个主程序,而且只能有一个主程序,一个程序中,可以根据需要包含任意数量的子程序,子程序可以被主程序调用,也可以被其它子程序调用,但不能发生直接或间接地自已调用自己,如图2中所示的调用关系是错误的。主程序主程序FORTRAN子程序FUNCTION函数名(a1,a2,…,an)子程序是一个独立的程序单位,其主要特点:(3)位置独立。子程序可以放在主程序之前或之后都无所谓,执行时总是从主程序开始执行。二、外部函数的定义二、外部函数的定义说明:注意: (1)函数名的命名规则和类型都与变量相同 (2)虚参可以是变量名、数组名和过程名,但不允许用常量和数组元素。 例:functionfat(n,x(i)) 它表示了函数自变量的个数,顺序和类型 (3)虚参是一个属于该函数子程序的局部变量。虚元的类型也可以用