FORTRAN90第6章子程序.ppt_第1页
FORTRAN90第6章子程序.ppt_第2页
FORTRAN90第6章子程序.ppt_第3页
FORTRAN90第6章子程序.ppt_第4页
FORTRAN90第6章子程序.ppt_第5页
已阅读5页,还剩22页未读 继续免费阅读

VIP免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

FORTRAN90程序设计,计算机中心 2006.3,Visual Fortran 90 程序设计,6.1概述,6.5 子程序的嵌套调用,6.2 函数子程序,6.6 模块,6.3 子例子程序,6.7 递归过程,6.4 虚实结合,6.8 其他部分,6.9 程序举例,6.1 概述,主程序的结构:,单位定义 说明部分 输入 计算或处理 输出 END,引入子程序的目的:模块化设计,所有功能都在主程序单位内完成,1、一个Fortran90程序主程序单元个数:1个 2、子程序单元:0-n个 子程序单元被主程序单元或被其它子程序单元调用,甚至可以递归调用(调用本身),源程序的结构,最简单的源程序的结构,子程序分类,1、函数子程序 分为内部函数子程序 外部函数子程序,2、子例行子程序 分为内部子例行子程序 外部子例行子程序,用于完成复杂的计算 返回 一个或多个值,用于完成复杂计算,返回一个或多个值,或用于其它数据处理,6.2外部函数子程序,单位定义语句 说明部分 程序体:具体计算 END语句,外部函数子程序的结构,FUNCTION F(X,Y,Z)RESULT(F_RESULT) IMPLICIT NONE REAL:X,Y,z,F_RESULT F_RESULT=X+Y Z=X-Y END,PROGRAM NAIN READ*,A,B D=F(A,B,c) PRINT*,C,D END,两单位相互独立编译 必须进行数据的传递,END FUNCTION 函数名,子程序END语句写法,1、函数单位的结束标志 2、将控制返回到主调程序。,子程序END语句功能,函数单位定义语句的写法,RECURSIVEFUNCTION 函数名(虚元表)RESULT(结果名) 1、函数子程序的第一行(注释行除外)。 2、如果函数是递归的,则应以RECURSIVE开头。 3、函数名为全局名:作用域为整个程序,不与已有的全局名同名。 各独立程序单位的名字为全局名,4、主调程序与被调程序 两个单位之间的数据传递,结果名:子程序的一个输出 一般写法:函数名_RESULT,用于保存一个计算结果,称为函数值。且结果名有类型,必须在子程序说明部分说明类型。,虚元表:子程序的所有输入,及除函数值之外的其他计算结果的输出。,函数值返回给调用式,由实元传递给对应的虚元,虚元数据返回给对应的实元,FUNCTION F(X,Y,Z)RESULT(F_RESULT) IMPLICIT NONE REAL:X,Y,z,F_RESULT F_RESULT=X+Y Z=X-Y END,PROGRAM NAIN READ*,A,B D=F(A,B,c) PRINT*,C,D END,主,子,5、虚元的含义:编写子程序时没有具体值(调用时或调用结束后才获得数值),因此只是一个符号,表示输入、输出,名字可随便用户取。 6、虚元可以是变量名、数组名、过程名、指针等。 7、虚元的可选属性INTENT: INTENT(IN):作为子程序的输入(不得再改变其值) INTENT(OUT):子程序的输出(对应的实元不能是表达式) INTENT(INOUT):子程序的输入输出 例:REAL,INTENT(IN):X,Y,子程序程序体的写法,分为说明部分和执行部分。 1、说明部分应对程序体内一切变量、数组等实体(包括虚元)作出说明,同时还要说明函数结果变量名,但不可说明函数名。 2、执行部分中必须对函数结果名至少赋值一次。,FUNCTION F(X,Y,Z)RESULT(F_RESULT) IMPLICIT NONE REAL:X,Y,z,F_RESULT F_RESULT=X+Y Z=X-Y END,两单位独立编译,1、调用式是表达式, 调用结束后调用式得到函数值。 2、常见形式: Y=函数名(实元表) PRINT*,函数名(实元表) IF(函数名(实元表) 注意:实元与虚元一般必须在个数、次序、类型上保持一致;但实元与虚元名字可以不同。,函数子程序的调用,例1:编写子程序求K=M*N,L=M-N,主程序输入2,3,调用子程序,计算2*3及2-3。,Program main Implicit none Integer:M,N,K,L,F Read*,M,N K=F(M,N,L) PRINT*,K,L END,FUNCTION F(M,N,L)RESULT(F_RESULT) IMPLICIT NONE INTEGER:M,N,L,F_RESULT F_RESULT=M*N L=M-N END,注意:虚元名任意,但一般与实元一致。 检查调用原则,程序体编写规则。,不能省略说明 两单位独立编译,PROGRAM MAIN IMPLICIT NONE REAL:X,Y,F,G,GF READ*,X F=X+SIN(30*3.1415926/180) G=GF(X,F) Y=F+G PRINT*,Y END,FUNCTION GF(X,F)RESULT(GF_RESULT) IMPLICIT NONE REAL:X,F,GF_RESULT IF(F0)THEN GF_RESULT=X+1 ELSEIF(F0)THEN GF_RESULT=X-1,ELSE GF_RESULT=0 ENDIF END,G,GF不能同名,练习: 计算函数Sinh(x)的值,当ex的通项值小于等于1E-6时停止。计算公式如下:,!主程序如下: Program main1 Real: MyExp,y,x Write(*,*) Enter x: Read(*,*)x Y=(MyExp(x)-MyExp(-x) /2.0 Write(*,)Y END PROGRAM,!函数子程序 Function MyExp(x) result (Exp_res) Real:Exp_res,x,s,T integer:N N=1; T=1; S=1 do T=T*X/N IF(ABS(T)=1E-5)EXIT S=S+T;N=N+1 end do Exp_res=S END FUNCTION,两次调用,1、计算实元值(作为输出的可预先无值) 2、虚实按地址结合:虚元按顺序借用实元存储单元 3、运行权至子程序的第一句,直至遇子程序的END语句返回到主调程序: 运行权返回至调用点 函数值返回给调用表达式 虚实脱离结合,但子程序运行时造成的实元值的改变将保留。,调用的执行过程,子程序阅读技巧:画出虚实结合表,INTEGER:X,Y,Z,f Y=f(X,X) PRINT*,Y Z=f(y,x) PRINT*,Z END,FUNCTION f(X,Y)RESULT(f_RESULT) INTEGER:X,Y,f_RESULT,I I=1;X=3*I;Y=2*I f_RESULT=X+Y END,注意:一个变量只有一个存储单元 按顺序结合,不是按名结合,1、虚元为变量,实元为同类型的变量,开辟临时单元存放常量或表达式的值 REAL:MN,X,S X=3.0 PRINT*,S(X,MN(X),X END FUNCTION S(A,C)RESULT( S_RESULT ) REAL:A,S,S_RESULT A=A+1;B=A*A S_RESULT=B-C END FUNCTION S FUNCTION MN(X)RESULT(MN_RESULT) MN_RESULT=3.0*X END FUNCTION MN,247.0 4.0,、虚元为变量,实元为常量、表达式:,6.3 外部子例行子程序,外部子例行子程序的结构,外部子例行子程序:用户定义,用于完成复杂计算任务,返回一个或多个值,或用于其它数据处理,RecursiveSubroutine 子程序名(虚元表) 说明部分 程序体 End Subroutine 子程序名,与函数子程序的区别,1.没有RESULT关键字。 2、虚元:负责子程序的全部输入和全部输出 3、无虚元时:SUBROUTINT 子程序名 或 SUBROUTINT 子程序名() 4、函数子程序的调用是表达式中。 而子例子程序必须通过CALL语句来调用。 CALL 子程序名(实元表),例子程序求K=M+N,L=M-N 主程序输入2,3调用子程序求2+3,2-3的值。,Program main Implicit none Integer:M,N,K,L Read*,M,N CALL S(M,N,K,L) PRINT*,K,L END,Subroutien S(m,n,k,l) Implicit None Integer:m,n,k,l K=m+n L=m-n End,所有的输入、输出,1、计算实元值(作为输出的可预先无值) 2、虚实按地址结合:虚元按顺序借用实元存储单元 3、运行至子程序的第一句,直至遇子程序的END语句返回到主调程序: 运行返回至CALL语句的下一个语句 虚实脱离结合

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论