




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第八讲 子程序,在程序设计中,常会遇到某些程序段需多次重复使用,为此,将这些需要重复使用的程序段单独编制成子程序,该子程序用以实现某些特定功能(例如:计算平均值、计算方差等)并可供其它程序单元多次调用,以处理不同的数据。,第八讲 子程序,Fortran的应用程序一般由一个主程序和若干个子程序组成。主程序或子程序分别是一个独立的程序单元。主程序单元为Fortran应用程序提供程序执行的入口。Fortran应用程序必须有一个且只能有一个主程序单元。主程序单元可以调用子程序单元,各子程序单元之间也可互相调用。调用子程序的程序单元称为调用程序单元,被调用的子程序单元称为被调用程序单元 。,第八讲 子程
2、序,Fortran的子程序单元有函数子程序、子例行程序和数据块子程序。 函数子程序单元用以计算一个值。 子例行程序单元不仅可以计算一个或一批值,还可进行某些非数值计算。 数据块子程序单元用以给公用区中的数据赋初值。,第八讲 子程序,8.1 语句函数,8.5 可调数组,8.2 函数子程序,8.3 子例行子程序,8.4 虚实结合,8.6 程序举例,8.1语句函数,语句函数通过一句代码定义来实现某种特定的处理功能,它是Fortran 77时代的遗留产物。严格来说,语句函数不属于程序单元的范畴。但是在实际应用中,语句函数以其灵活的应用、小巧的结构在程序中发挥着重要的作用。 在实际的编程过程中,程序员往
3、往会遇到这种情况:一些简单的函数会在一个程序单元中的不同地方重复用到,而Fortran系统并不提供这种内部函数。此时可采用语句函数。,一、语句函数的概念,引例:计算W0.2P(X)+0.3P(Y)+0.5P(Z) 其中P(T)=0.812T3+1.256T2-3.378T+0.689,WRITE(*,*)请输入X,Y,Z的值: READ(*,*)X,Y,Z P1 0.812*X*3+1.256*X*2-3.378*X+0.689 P2 0.812*Y*3+1.256*Y*2-3.378*Y+0.689 P3 0.812*Z*3+1.256*Z*2-3.378*Z+0.689 W0.2*P1+0
4、.3*P2+0.5*P3 WRITE(*,*)W END,如果能定义一个函数p(t),然后分别使用x,y,z等参数来调用p(t),将会有效简化程序量:,P(T) 0.812*T*3+1.256*T*2-3.378*T+0.689 WRITE(*,*)请输入X,Y,Z的值: READ(*,*)X,Y,Z P1P(X) P2 P(Y) P3 P(Z) W0.2*P1+0.3*P2+0.5*P3 WRITE(*,*)W,W END,注意:只有当函数可以用一个表达式表示时才能定义成语句函数,而对于那些不能用表达式表示的功能或分段表示的函数是不能定义成FORTRAN语句函数的。,在程序中有时可能在好几处
5、需要进行同样的某种表达式计算,而这种计算又不是某个内部函数所能完成的,这时,程序设计者可以自已来定义一个语句函数,通过引用语句函数来实现这种特殊运算。,二、语句函数的定义,语句函数定义的形式: f_name(x,x)=e,使用规定,1)语句函数定义语句必须位于该程序段的说明语句之后,第一个可执行语句之前。它是非执行语句。,2)语句函数名的命名规则与变量名相同,若语句函数前面没有用类型说明语句进行显式说明,则语句函数的返回值遵循默认的IN规则。在一个程序单位内,语句函数名不能与其它名字(如变量名、数组名等)相同。,使用规定,3)语句函数定义中的虚参只能是变量名,不能是常量、表达式或数组元素,虚参
6、表中的各虚参之间用逗号分隔,各虚参不能同名,虚参的类型说明与变量相同。由于虚参不代表实在的变量,因此虚参名可以与程序中的其他变量同名。 4)语句函数中的虚拟参数,本身没有具体的数值。只有当程序中的语句函数被引用时,用实际的变量(实参)代替虚参的情况下,才能得到语句函数的返回值。,F(X)=X*X+2*X X=3.0 Z=F(1.0)+F(X) WRITE(*,*)X END,5)e是含有x1,x2,xn的表达式,在这个表达式中,除必须包含有关虚参外,还可以包含常量,变量,外部和内部函数和已定义过的语句函数。语句函数通过表达式得到一个函数值,此函数值的类型必须与函数名的类型一致。,6)语句函数的
7、类型即是语句函数名的类型,当需要用类型说明语句说明语句函数名的类型时,其类型说明语句必须在语句函数的定义之前。语句函数只能在定义它的程序段使用。,使用规定,三、语句函数的引用,语句函数的引用就是对语句函数定义的使用。它和内部函数一样,总是在表达式中作为一个运算分量或单独作为一个表达式出现。它的一般引用形式为: f_name( a1,a2),注:实参的个数、类型及排列顺序必须 与相应的形参一致!,FORTRAN允许在语句函数定义中没有形参,此时在引用时也不能有实参,但一对括号不能省略。 语句函数的引用可以嵌套。,CONST( )=SQRT(2.0)+SQRT(3.0) A=CONST( ),三、
8、语句函数的引用,三、语句函数的引用,REALA,B,C SUM(A,B,C)A+B*B+C*3 DATAA,B,C/ 1.0,2.0,3.0/ Y1SUM(0.5,0.7,0.8) Y2SUM(2*A,B,C) Y3SUM(C,B,A) ZY1+Y2+Y3 WRITE(*,*)Y1,Y2,Y3,Z END,Y10.5+0.72+0.83,Y22.0+2.02+3.03,Y13.0+2.02+1.03,语句函数的引用过程,当程序执行到一个语句函数的引用时,要经过下列几个过程:, 当实元为表达式时,先求出表达式的值,然后控制转到语句函数定义语句去执行;, 实元和对应的虚元进行结合,即实元的值传给虚
9、元(称为虚实结合过程);, 求表达式e的值;,这一过程是由计算机系统来完成的,用户可不必担心。, 根据语句函数名的类型和表达式e求值结果,按赋值规则得到函数引用的值由函数名带回,并控制返回到原表达式函数引用处,继续计算表达式值。,语句函数的引用过程,三、语句函数的引用,DATAA/ 2.0/ F(X)X+1 BF(F(F(A) WRITE(*,*)B END,F(F(F(2.0),F(F(3.0),F(4.0),例1 :二分法:,1、基本思路:把区间(x1,x2)二 等分,找到中点x求出f(x)值,然后 判断f(x)和f(x1)是否同号,如同 号则说明根在(x,x2)区间,否则, 根在(x,x
10、1)区间。依次方法对有根 区间再折半,直到满足条件为止。,例:用二分法求f(x)=x3-6x-1=0在x=2附近的一个实根 区间为x1=0,x2=5,x,y,x1,x2,x,f(x1),f(x),f(x2),0,F(X)=X*3-6.0*X-1.0 100 READ(*,*)X1,X2 FX1=F(X1) FX2=F(X2) IF(FX1*FX2.GT.0.0)GOTO 100 10 X=(X1+X2)/2.0 FX=F(X) IF(SIGN(FX,FX1).EQ.FX)THEN X1=X FX1=FX END IF IF(SIGN(FX,FX2).EQ.FX)THEN X2=X FX2=FX
11、 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 END,SIGN(x1,x2)是符号传递函数,函数值取x2的的符号,取x1的绝对值,算法:弦截法的基本思路与“二分法” 相似,它是取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,这就
12、舍去了原来的(x1,x)区间。 如果f(x1)与f(x2)异号,则它们之间的连线必然交x轴于x点 有x=x2-(x2-x1)*f(x2)/(f(x2)-f(x1) 3、再根据新的x1,x2,找到与x轴的交点x,重复上述步骤。,例 2:用语句函数采用弦截法求X3-2X2-7X+4=0的根。,LOGICAL S F(X)=X*3-2.0*X*2-7.0*X+4.0 S(A,B)=SIGN(A,B).EQ.A 10 READ(*,*)X1,X2 F1=F(X1) F2=F(X2) IF(S(F1,F2)GOTO 10 F0=1.0 20 IF(ABS(X1-X2).GT.1E-5).AND.(ABS
13、(F0).GT.1E-6)THEN X=X2-(X2-X1)/(F2-F1)*F2 F0=F(X) IF(S(F0,F1)THEN X1=X F1=F0 END IF,IF(S(F0,F2)THEN X2=X F2=F0 END IF GOTO 20 END IF IF(ABS(F0).GT.1E-6)X=(X1+X2)/2.0 WRITE(*,*)X END,语句函数小结:, 语句函数必须先定义,后引用。且语句函数只可在包含该语句函数定义的程序单位中引用,即不能引用其他程序单位所定义的语句函数。, 语句函数定义语句是非执行语句。它应该放在所有可执行语句之前和有关的类型说明语句之后。, 语句函
14、数定义中的函数名和虚元是具有类型的,可以用类型说明语句说明其类型 或按隐含约定确定其类型。如:,INTEGER G, X, Y,G(X,Y,N) = X*X+N*Y,以上语句说明G函数是整型函数,即函数值为整型,且说明虚元X,Y为整型,隐含约定N为整型。,语句函数小结:, 在语句函数定义的语句中,也可出现其他的语句函数引用,但被引用的语句函和须在它前面已定义。不允许引用自身或在它后面定义的语句函数。,例:S(A, B, C) = (A+B+C) / 2.0,PP (A, B, C) = SQRT (S(A, B, C) A),PP 函数引用了它前面所定义的S函数,语句函数小结:, 引用语句函数
15、时,给定的实元必须和对应的虚元个数相等,类型一致,位置相符。在进行虚实结合时,虚元与实元不是以名字相同传值,而是按位置类型一一传值。,语句函数小结:,例:,F(X) =XXX1.0,X =3.0,Y=(X+3.0)/2.0,Z=F(1.0)+F(2.0)+F(3.0),T=F(X), 在同一程序单位中不允许变量名与函数名同名,但允许变量与虚元同名。,程序第一行的X是语句函数的虚拟参数,第二行的X是变量名,它们彼此独立,无任何关系。第三行计算出Y的值等于2.0。第四行引用语句函数,分别将1.0,2.0,3.0代替语句函数定义语句中右边表达式的X,计算出F(1.0),F(2.0),F(3.0)。第
16、五行F(x)中的X是变量名,其值为3.0,此时F(X)相当于F(3.0),8.2 函数子程序(外部函数),语句函数只能用一个语句定义,而且只能在定义它的程序段中使用。,分析:函数f(X)是用两个表达式定义的,不能用简单的语句函数来表示。怎么办?FORTRAN提供了一种方法,就是把函数的计算部份从程序中独立出来,并按一定的格式编成一个单独的子程序段,称为外部函数或函数子程序。,FUNCTIONF(X) IF(X.GE.0)F=2*X+1 IF(X.LT.0)F=-3*X+1 END,引 用,返回,一、引例,二、外部函数的定义,函数子程序通常称为外部函数,它也是根据程序设计者的需要由自己定义的函数
17、。和语句函数不同的是,函数子程序是一个由若干语句组成的独立的程序单位。当某些函数的值不可能用一条语句来求得时,就可借助函数子程序来定义一个函数。,二、外部函数的定义,一般形式:,类型说明 FUNCTION 函数名(虚参表) 函数子程序体 END,FUNCTION 函数名(虚参表) 类型说明 函数名 函数子程序体 END,说明:,1、FUNCTION语句 FUNCTION语句是函数子程序的声明语句。它表示函数子程序定义开始。同时给出函数子程序所需的各种虚拟参数(简称虚参、形参),在函数子程序调用之前虚参没有值,只有函数子程序被调用时,由调用程序单元将实在参数(简称实参)的数据传递给虚参,虚参才有
18、数据。当有多个虚参时,必须用逗号将虚参隔开;若没有虚参时,括号不能省略。虚参可以是变量名、数组名、子程序名。,说明:,1、FUNCTION语句 函数名用以标识函数子程序的名称,它在函数体中存放函数值,故函数名具有类型,函数名的命名方法与变量名相同。类型说明用来显式说明函数名的类型,若省略类型说明,则按I-N规则确定函数名的类型。,例:function rdh(n,h) 实型函数 Integer function rdh(n,h)整型函数,说明:,2、函数体 包括说明语句(对虚参变量和实参变量的说明,也包括对函数中所用变量、数组和符号常量的说明)和执行语句(用来完成求函数值的运算。在程序的执行流
19、程返回调用程序之前,必须把所求得的函数值返回给函数名)。 由于函数子程序的计算结果(即函数值)存放在函数名中,故函数名必须在函数体中,至少要有一次出现在赋值语句的左边,即:函数名=表达式,说明:,2、函数体 RETURN语句只允许出现在子程序中,可以有任意多条,并可放在任何位置。END语句在子程序中只能有一条。而且必须放在子程序的最后,不能省略,但RETURN语句可省略。,三、函数子程序的引用,函数子程序是不能直接执行的,只有在其他程序单位中对它引用时,才能控制转移到它的内部执行。调用函数子程序目的是将外部函数子程序的计算结果(即函数值)作为表达式的一个运算分量参与表达式的运算。函数子程序的调
20、用可以出现在表达式出现的任何地方,即只能出现在赋值语句的右边或WRITE语句中。,三、函数子程序的引用,调用函数子程序时应注意的问题 在调用程序中,必须对被调用的函数子程序名如变量那样进行类型说明(也可以遵循隐含规则),并且,在调用程序中,其他的名字(如变量名、数组名等)不能与被调用的函数子程序名相同。 在调用一个函数子程序时,其实参必须在个数、类型与顺序上与函数子程序中的形参一致。 子程序不能直接或间接的调用子程序本身,即在F77中不支持递归调用。如果函数是递归的,则应以RECURSIVE开头(F90标准)。,三、函数子程序的引用,- 如果一个FORTRAN程序由一个主程序和若干个子程序组成
21、,则主程序和子程序可以分别存放在几个文件中,它们可以独立编译,最后才连接成一个完整的可执行程序;也可以将主程序和所有的子程序存放在同一个文件中,此时将一起编译,最后连接成一个可执行程序。 - 函数子程序可以没有形参,但函数名后面的一对括号不能省略;同时在调用该函数子程序时也不要实参,但函数名后的一对括号也不能省略。,调用函数子程序时应注意的问题,函数子程序的执行过程,函数子程序是一个外部过程,它不能直接单独控制执行,只有在其他程序单位中引用该函数名时才会控制转到函数子程序内部。大致分为四步:,第一步:首先对实元是表达式的项求出表达式的值,然后将控制转移到函数子程序的FUNCTION语句。,第二
22、步:按排列顺序依次让对应的虚元和实元结合(程序单位之间的数据的传递),这个过程称为虚实结合。,INTEGER SQ L = 6 M = SQ (10,L 4/5) WRITE (,10) M 10 FORMAT (1X,M,15) END,第三步:执行函数体中的各语句。,第四步:当执行遇到END语句或RETURN语句时,函数子程序名带着赋给它的值返回到引用处继续执行程序。,函数子程序的执行过程,INTEGER SQ L = 6 M = SQ (10,L 4/5) WRITE (,10) M 10 FORMAT (1X,M,15) END,FUNCTION SQ(N,K) INTEGER SQ
23、SQ NK END,四、函数子程序应用举例,例1:已知三角形三边a,b,c,求面积S。,*函数子程序 FUNCTIONS(X,Y,Z) T(X+Y+Z)/2.0 SSQRT(T*(T-X)*(T-Y)*(T-Z) END,*主程序 WRITE(*,*)输入A,B,C: READ(*,*)A,B,C AREA=S(A,B,C) WRITE(*,*)面积=,AREA END,FUNCTION GF(X) IF(X0)THEN GF=X+1 ELSEIF(X0)THEN GF=X-1 ELSE GF=0 ENDIF END,PROGRAM MAIN2 N=3 Y=(S(N)+S(N+1)+S(N+2
24、)/(S(N+3)+S(N+4) WRITE(*,100) Y=,Y 100 FORMAT(1X,A,E13.6) END,例3、求下列函数表达式的值。,例4:已知 , 其中 求sinh(x) PROGRAM MAIN3 REAL MYEXP WRITE(*,*) 输入X: READ(*,*) X Y=(MYEXP(X)-MYEXP(-X)/2.0 WRITE(*,100) X,Y 100 FORMAT(1X,sinh(,F5.2,)=,E13.6) END,FUNCTION MYEXP(X) REAL MYEXP,S,T,X INTEGER N N=0 T=1 S=1 DO 10 WHILE
25、(ABS(T).GT.1E-5) N=N+1 T=T*X/N S=S+T 10 CONTINUE MYEXP=S END,* Sub(1) FUNCTION FAC(L) FAC=1.0 DO I=2,L FAC=FAC*I ENDDO END,* Sub(2) FUNCTION COM(N,M) COM=FAC(N)/FAC(M) $ /FAC(N-M) END,* MAIN PROGRAM DEMENSION C(11) C(1)=1.0 DO N=1,10 DO M=1,N C(M+1)=COM(N,M) ENDDO WRITE(*,10)(C(I), % I=1,N+1) ENDDO
26、10 FORMAT(1x,11F6.0) END,8.3子例程子程序,子例行子程序也是Fortran的外部过程,它与函数子程序的主要差别在于: 名字的作用不同。函数子程序名除了供调用外,还代表函数值,而子例行子程序名只供调用。 要求返回值的方式不同。函数子程序是通过函数名将函数值带回调用程序,而子例行子程序是通过“虚实结合”将其新值转送回调用程序。 调用方式不同。函数子程序的调用总是出现在表达式中,而子例行子程序必须用一条独立的语句调用。,SUBROUTINE 子例行程序名 (虚参表) (子例程子程序体) END,一、子例行子程序的定义,(1) SUBROUTINE语句是子例行程序的声明语句。
27、它表示子例行程序定义开始。同时给出子例行程序所需的各种虚参。 (2)程序体包括:说明部分和执行语句。 说明部分:对形参和子例行程序中所用变量、数组等说明 执行语句:完成子例行程序的运算和操作功能。 (3)子例行程序中的END或RETURN语句使执行流程返回到调用程序。,说明几点: 子例行程序名的命名规则与变量名相同。(但不标识类型) 如果没有虚参,括号可以省略。 例:subroutine abc 虚参可以是变量名、数组名和过程名,但不允许用常量和数组元素。 子例行子程序的名字只起标识作用,没有值的概念,仅仅为了调用。因此,在子程序体中,它不允许出现。,三、子例行子程序的调用 一般形式: cal
28、l 子例行程序名(实参表) call 子例行程序名 执行过程:类似函数子程序,(1)在调用程序单元中,计算实参值(若实参是表达式)。 (2)将实参值传递给对应虚参,即虚实结合。 (3)执行子程序体,实现其功能。 (4)执行END语句,将返回值带回给调用程序单元。,与函数子程序的不同之处: (1)子例行程序名只供调用时使用,不得在子程序体内赋值;函数子程序名除了供调用时使用外,还代表着函数值,必须在返回前在函数体内给函数名赋予函数值。 (2)函数子程序的调用总是出现在表达式中,并将所得的函数值参与表达式的运算;子例行程序必须用一条CALL语句调用。 (3)若通过子程序得到一个值,一般采用函数子程
29、序;若只是通过子程序进行运算操作,则采用子例行程序。,三、子例行子程序的调用,无参子例程,四、子例程序应用举例,例:编写子例行程序分别求出55矩阵两个对角线上元素之和。 program main subroutineopp(a,s1,s2) real w(5,5) real a(5,5) read *,(w(i,j),j=1,5),i=1,5) s1=0.0 call opp(w,x1,x2) do i=1,5 write(*,50)x1,x2 s1=s1+a(i,i) 50 format(1x,x1=,f5.2, end do $2x,x2=,f5.2) s2=0.0 end do i=1,
30、5 j=5-i+1 运行结果: s2=s2+a(i,j) x1=15.00 x2=25.00 enddo end,数组传递 的首地址,8.4 实参和虚参之间的数据传递,在Fortran程序设计中子程序的虚参可以是变量名、数组名、函数名、子例行程序和星号。 下面讨论当虚参为变量名和数组名时的实参和虚参之间的数据传递问题,也称“虚实结合”问题。 一、变量名作虚参时的虚实结合 对应的实参可为同类型的常量、变量或数组元素。 结合方式 是按地址结合的。即虚参和实参共用一个存储单元。, 结合过程 program main integer a,b,c,d data a,b/10,15/ call sub(a
31、,b,c,d) print *,a,b,c,d end subroutine sub(w,x,y,z) integer w,x,y,z y=w*x z=x*y w=x x=y end,注意:当实参是数组元素时,虚实结合的过程和变量名相同。 例:program main subroutine sub(x,a) integer a,c(3) integer x,a data c/1,2,3/ a=2*x a=100 x=2*a call sub(a,c(2) end print *,a=,a,c(2)=,c(2) end,子程序:x a,主程序:a c(2),C,C(1),二、数组名作虚参时的虚实
32、结合 (仅说明数值型数组) 此时,对应的实参必须为同类型的数组名或数组元素。 实参为数组名时的虚实结合 是按地址结合的。即实参数组的第一个元素与对应虚参数组的第一个元素结合; 实参数组的第二个元素与对应虚参数组的第二个元素结合,依此类推。,几种情况: 同维同体积(不同体积): 例: program main subroutine ctx(b) dimension a(8) dimension b(5) call ctx(a) end end,若数组a,b均为二维数组,如a(2,3),b(2,3)则: 不同体积:如:b(2,2),不同维不同体积: 若主程序中a(2,3),子程序中b(5),则:,
33、总结:数组的虚实结合与维数无关。 结合原则:按照存储结构一一结合 但注意:虚参数组的体积应小于实参数组的体积 最好是同维同体积,不易出错,程序可读性强。, 实参为数组元素时的虚实结合 仍按地址结合,但该数组元素与对应虚参数组的第一个元素结合;该数组元素的下一个元素与对应虚参数组的第二个元素结合,依此类推。,例: program main subroutine ctx(y) dimension x(6) dimension y(3) call ctx(x(3) end end,注:虚参数组的最后一个元素必须落在实参数组范围内。 对上例而言,若定义y(6),则会出现“超界错”。,例:分别计算二维数
34、组a(15,15),b(15,15)的主对角线元素之积P,Q,再求P*Q。,Function acc(x) dimension x(15,15) Acc=x(1,1) do 10 i=2,15 acc=acc*x(i,i) 10 continue end,Main program Dimension a(15,15),b(15,15) Read *,(a(I,J),j=1,15),I=1,15) Read *,(b(I,J),j=1,15),I=1,15) P=acc(a) Q=acc(b) R=p*q Print *,p=,p,q=,q,result=,r end,考虑:若只需求A数组主对角
35、线的前三个元素之积呢?,我们前面所用的数组,维界都是常数,其大小不可改变。要求解n阶线性方程组,对不同的n都要各编一套程序,这显然不合适。于是提出使用可调数组的想法,数组说明符中的维界用变量。,上例中,将函数子程序或子例程中的A(20)改为 A(N),此数组即为可调数组。但是,A与N均需出现 在形参中。 可调数组的使用规则: (1)可调数组只能在子程序中使用 (2)可调数组与可调维中的变量均需列在形参中,PROGRAM MAIN DIMENSIONA(10),B(4,3) M14 M23 CALLSUB(A,10,B,M1,M2) END SUBROUTINE SUB(X,NX,Y,N1,N2
36、) DIMENSIONX(NX),Y(N1,N2) . END,(1)可调数组只能在子程序中使用。 (2)可调数组与可调维中的变量均需列在形参中。,从数组的虚实结合规则可知,如果虚参数组的下标不可调,那么就会极大地影响子程序的通用性和灵活性。设计可调数组可以较好地解决这一问题。,1、可调数组的概念: 常界数组:上、下界和维数都是整型常数。如:a(15,15) 主程序中用的定义数组语句中必须是整型常量,即常界数组。,8.5可调数组,可调数组:只能在子程序中使用,其上、下界可以是整型虚参变量,其值可以通过对应的实参传递过来。,Function acc(x,n) dimension x(n,n) A
37、cc=x(1,1) do 10 i=2,n acc=acc*x(i,i) 10 continue end,主程序中可以这样调用: DIMENSION A(30,30),B(60,60) P=acc(a,30) Q=acc(b,60) WRITE(*,*)P=,P WRITE(*,*)Q=,Q END,求方阵主对角上元素的乘积。,如果只想求一部分元素之积,可以再多设一个虚参变量,增加灵活性。,Function acc(x,n,m) dimension x(n,n) Acc=x(1,1) do 10 i=2,m acc=acc*x(i,i) 10 continue end,主程序中可以这样调用:
38、P=acc(a,30,20) Q=acc(b,60,40) ,重申一下: 1、可调数组只能出现在子程序中,不允许出现在主程序里。 2、可调数组的数组名和界都必须作为虚参出现在虚参表中。这样,通过虚实结合后,它们就会被赋值。 例: program main subroutine sub(x,nx,y,n1,n2) parameter(m1=4,m2=3) dimension x(nx),y(n1,n2) dimension a(10),b(m1,m2) call sub(a,10,b,m1,m2) end end,函数和子例程复习与小结,例1读程序,写结果: PROGRAMMAIN1 M5 N3 CALLS(M,N) WRITE(*,*)M,N END SUBROUTINE S(N,M) M=M+1 N+N*2+M M=N*M END,例2读程序,写结果: PROGRAMMAIN2 DATA A,B,C/1.,2.,3./ CALLS(B,C,A,F) WRITE(*,10)A,B,C,F 10 FORMAT(1x,4F5.1) END SUBROUTINE S(A,B,C,D) A=C B=A+C C=A+B D=
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 影像密集匹配点云数据的建筑物平面分割方法
- 营养细胞在调节免疫耐受中的作用
- 企业培训服务理念课件
- 企业培训员工课件下载
- 企业垃圾分类实践课件
- 厕所改造工程安全评估与施工监管协议
- 常州医疗场所租赁合同标准
- 机房值守实施方案
- 高端写字楼场房屋租赁及物业管理合同
- 租房电器处理方案
- 2025年1月国家开放大学法学本科《中国法律史》期末纸质考试试题及答案
- 初中地理跨学科主题学习设计与实施
- 2021卫生监督法律法规知识竞赛题库及答案
- 惩罚游戏学校班会公司早会小游戏晨会年会团建课堂娱乐互动340
- 中国邮政集团有限公司国企招聘笔试真题2024
- 电脑供货方案、售后服务方案
- 姜黄素项目投资可行性研究报告
- 2025年云南省康旅控股集团有限公司招聘笔试参考题库含答案解析
- 八年级数学下册 第二学期 期末综合测试卷(湘教版 2025年春)(二)
- 集团内训师管理办法
- 数据资产:会计研究的新领域
评论
0/150
提交评论