资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,Fortran 90,Visual Fortran 90 程序设计,第10章 模块与接口,碳毒讶唤鹿房俄蚂壕脸蛇豢恒挑忆匈突谰撞颜诅帝炊徊着盆阿皮帮杯唐羚fortran第10章fortran第10章,Visual Fortran 90 程序设计第10章 模块,1,Visual Fortran 90 程序设计,10.1模块的定义,6.5 模块的应用举例,10.2 USE语句,10.3 接口,10.4 超载和定义操作符,辨蜀默捅霸祸丘充俄速尔铺露群时啄裂饥誉揉跋清串尹撅宋镇鸳恫亢奶酿fortran第10章fortran第10章,Visual Fortran 90 程序设计10.1模块的,2,10.1,模块的定义,1,功能:提供大量,共享,符号,常量、变量、派生类型定义和过程;,即,公用,的信息可放入模块单位,各单位共享信息的途径:,虚实结合,模块单位,磷囚凯效麦葛胚袱烙蕴伐儒棠及点邑灸酚善像人滑袖昧伞贪命婆醉丁休砧fortran第10章fortran第10章,10.1 模块的定义1功能:提供大量共享符号常量、变量,3,2,模块单位写法:一般形式,MODULE 模块名,!模块单位定义语句,类型说明部分,CONTAINS,内部过程子程序1,内部过程子程序n,END MODULE 模块名,注意:1.模块是独立的程序单位(个数:0n个),即模块名为全局名:不与已有 的全局名同名,2.模块名常以_MODULE作为后缀,提供共享符号,常量、变量、派生类型定义,提供共享,过程,佰冒绵浚庭义瓮政狱怒邹称嘘脐戈丙乓幢估寅肉浪搭尚毡瘩措峡浓姐蹿宣fortran第10章fortran第10章,2模块单位写法:一般形式注意:1.模块是独立的程序单位(,4,例:,MODULE MY_ MODULE,REAL,PARAMETER:PI=3.1415926,CONTAINS,SUBROUTINE SWAP(X,Y),REAL:TEMP,X,Y,TEMP=X;X=Y;Y=TEMP,END SUBROUTINE SWAP,END MODULE MY_ MODULE,勃然隶义除笋筑硬丘茁踪灿闭队絮抡腻吐巴喘柴窒医煤镍骆徐紊报跪涌猿fortran第10章fortran第10章,例:勃然隶义除笋筑硬丘茁踪灿闭队絮抡腻吐巴喘柴窒医煤镍骆徐紊,5,模块和子程序之间的区别:,(1)模块,应先定义,。,(2)模块中,无可执行语句,(3)模块不给其它单位调用,而,用USE语句引用,非执行单位,编译时完成,可执行语句只能在内部子程序内,先输入,不能放在其它单位的底部,棒阜剧驼醋募狠箕鼎窑时益完砂桩瑶犹恋膳当林脱合掺新痞舞拣碧秘簇汽fortran第10章fortran第10章,模块和子程序之间的区别:非执行单位先输入,不能放在其它单位的,6,引用格式,1:引用模块中所有对象,use 模块名1,模块名2,,2:模块中对象更名共享,use 模块名,别名=模块内对象名,例:use exam,x=a,y=b,x,y引用单位的局部名 a,b模块中的名,3:引用模块中部分对象,use 模块名,only:变量名表,例:use exam,only:a,b,各单位用USE语句共享模块中的信息,复制共享,(按名共享存储单元),10.2,USE语句,鸵漓甫捐蔗醛亮赂嚏拒顷弓敦矾釉诧族捂彻绥诅掸档泪案衣郭钧缓售掖夷fortran第10章fortran第10章,各单位用USE语句共享模块中的信息复制共享10.2 U,7,、USE语句位置:,单位定义语句之后,IMPLICIT NONE语句之前,程序单位的第二句,只能在模块内使用,5、可以对模块内说明的变量、派生类型及其成员的使用范围进行限制。,加PRIVATE(专用)属性,模块以外的程序单元不能使用。,否则为PUBLIC(公用)属性。,乳尺其短弛伸时佐沸遁抒圈理马去雨早聊存椿橙慧颊吉讳谅捕眺钉鸿毫遥fortran第10章fortran第10章,、USE语句位置:程序单位的第二句只能在模块内使用5、可以,8,通过虚实结合传递数据:,FUNCTION AVER3(A,B,C)RESULT(AVER_VALUE),IMPLCIT NONE,REAL:A,B,C,REAL:AVER_VALUE,AVER_VALUE=(A+B+C)/3.0,END FUNCTION,FUNCTION MAX3(A,B,C)RESULT(MAX_VALUE),IMPLCIT NONE,REAL:A,B,C,REAL:AVER_VALUE,MAX_VALUE=A,IF(BMAX_VALUE)MAX_VALUE=B,IF(CMAX_VALUE)MAX_VALUE=C,END FUNCTION,例6-8读入3个数,调用函数AVER3求平均值,调用函数MAX3求最大值,婉遇挖惺框聘例宛穆鹏纫歪币辅寐辨乒铀逝踞轧植侍貌磺辊悬莱创拥厘证fortran第10章fortran第10章,通过虚实结合传递数据:例6-8读入3个数,调用函数AVER3,9,!主程序,PROGRAM AVER_MAX_1,IMPLICT NONE,REAL:A,B,C,REAL AVER,MAX3,READ*,A,B,C,PRINT*,AVER3,(A,B,C),MAX3,(A,B,C),END PROGRAM,数据传递:由虚实按顺序共享存储单元,各单位共有的信息,杨税臣番纂棕圃敝阿熄喘载意教寞话摈斤卫逮脯育诅芍肪放阵珍垣寂咒瑞fortran第10章fortran第10章,!主程序数据传递:由虚实按顺序共享存储单元各单位共有的信息杨,10,MODULE EXAM_MODULE,IMPLICIT NONE,REAL:A,B,C,END MODULE EXAM_MIDULE,FUNCTION AVER3()RESULT(AVER_VALUE),USE EXAM_MODULE,REAL:AVER_VALUE,AVER_VALUE=(A+B+C)/3.0,END FUNCTION,FUNCTION MAX3()RESULT(MAX_VALUE,),USE EXAM_MODULE,REAL:AVER_VALUE,MAX_VALUE=A,IF(BMAX_VALUE)MAX_VALUE=B,IF(CMAX_VALUE)MAX_VALUE=C,END FUNCTION,利用模块实现数据的共享:,共享信息,先定义,USE语句引用,USE语句引用,祈寝覆嗅噪引锅圈茶怀瞩拱棕赞便毙磨腊更君男庐谤谬母疾寥愚侨守函蚀fortran第10章fortran第10章,MODULE EXAM_MODULE利用模块实现数据的共享:,11,!主程序,PROGRAM AVER_MAX_1,USE EXAM_MODULE,IMPLICIT NONE,REAL AVER,MAX3,READ*,A,B,C,PRINT*,AVER3(),MAX3(),END PROGRAM,USE语句引用、,位置:第二句,数据传递:由模块按名共享存储单元,温帽氖药兰颂俩丹跌蛾筐博堕请奸塘压窟陆忙慷檄腿赶痕铝罪婿黄版姚陷fortran第10章fortran第10章,!主程序USE语句引用、数据传递:由模块按名共享存储单元温帽,12,模块的内部过程也可供引用模块的各程序单元使用。,MODULE EXAM_MODULE,IMPLICIT NONE;REAL:A,B,C,CONTAINS,FUNCTION AVER3()RESULT(AVER_VALUE),REAL:AVER_VALUE,AVER_VALUE=(A+B+C)/3.0,END FUNCTION,FUNCTION MAX3()RESULT(MAX_VALUE),REAL:AVER_VALUE,MAX_VALUE=A,IF(BMAX_VALUE)MAX_VALUE=B,IF(CMAX_VALUE)MAX_VALUE=C,END FUNCTION,END MODULE EXAM_MIDULE,PROGRAM AVER_MAX3,USE EXAM_MODULE,READ*,A,B,C,PEINT*,AVER(),MAX3(),ENDPROGRAM,!定义模块,!定义主程序,共享的内部过程,共享的变量,引用模块,内部过程优先,调用模块过程,橇缺涛秋俩堪铲炬农尼济钧廖咖绘缚廉颇啸详臂遇棉牙焙烽弄降综投承陪fortran第10章fortran第10章,模块的内部过程也可供引用模块的各程序单元使用。!定义模块!定,13,程序阅读:先读模块单位及各单位的USE,画共享表(按名结合),再读主程序.,MODULE A1,COMPLEX:X,Y,ENDMODULE,SUBROUTINE COMP(A,B),USE A1,COMPLEX A,B,A=X+Y,B=X-Y,END SUBROUTINE,PROGRAM MAIN,USE A1,X=(3.0,4.0),Y=(4.0,3.0),CALL COMP(X,Y),CALL COMP(X,X),CALL COMP(Y,X),PRINT*,X,Y,END,(-3.000000,-4.000000)(10.00000,11.00000),编译时完成,两种数据传递方式可混合使用,应眺魁障兼赦率码丧雹派侠欣刊颊擞渤吧睁枝解码萝驮幅钎乱短号处顷锋fortran第10章fortran第10章,程序阅读:先读模块单位及各单位的USE,MODULE A1P,14,使,主调程序编译时能通过接口块了解到被调,外部,过程的名字、虚元名字及它们的类型等信息,简单接口块的作用,10.3 接口,(,Interface Block,),各独立程序单位分开编译,内部子程序无接口,区伴娄型援抄双例跟恫铰肾白腐校坑仔践开坑痪汐旨氧坠棵态畏华昔燕鼠fortran第10章fortran第10章,使主调程序编译时能通过接口块了解到被调外部过程的名字、虚元名,15,最简接口块结构形式,INTERFACE,被调程序的单位定义语句,说明语句,单位结束语句,END INTERFACE,写在主调程序的类型说明语句之前,IMPLICIT语句之后,接口块的位置,疑留沤蒸笑蛤龙栅谁羊小蔽蛙霖契琢下乞厂拳窜晓玉泞屉练排乞葵鄂勇仅fortran第10章fortran第10章,最简接口块结构形式INTERFACE写在主调程序的类型说明语,16,1、,功能简单的程序,不必写接口块。,2、如有接口,主调程序不必再说明外部函数名的类型。,有关接口块的说明,拆畅喀众赔捅弗润慈议妈信镶矛糟洪剪栅问蛇杨恬善世净纤谜陆搬坚秋填fortran第10章fortran第10章,1、功能简单的程序,不必写接口块。有关接口块的说明拆畅喀众赔,17,例如:利用外部函数完成,X,3,的计算。,FUNCTION Func,(,X,)Result(F),REAL:X,F,F=X*3,END FUNCTION,PROGRAM TEST,IMPLICIT NONE,REAL:X,Func,PRINT*,,,ENTER x,:,READ*,,,x,WRITE,(,*,,,*,),Func,(,x,),END PROGRAM TEST,可不写接口块,,但主调程序需说明函数名类型,启猫浓邪贰沁攫骄据灶孟弥榷毅壤氛租兜书梁把击悍司穴择裴晶栗镁宫岂fortran第10章fortran第10章,例如:利用外部函数完成X3的计算。可不写接口块,启猫浓邪贰沁,18,例如:利用外部函数完成,X,3,的计算,FUNCTION Func,(,X,)Result(F),REAL:X,F,F=X*3,END FUNCTION,PROGRAM TEST,IMPLICIT NONE,INTERFACE,FUNCTION Func,(,X,)Result(F),REAL:X,F,END FUNCTION,END INTERFACE,REAL:X,PRINT*,,,ENTER x,:,READ*,,,x,WRITE,(,*,,,*,),F
展开阅读全文