- 1、本文档共387页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Fortran基础教程剖析
* * 12.1 等价语句 (EQUIVALENCE语句) 例3: DIMENSION A(2,3), B(4) EQUIVALENCE (A(1, 2), C), (B(1), C) 数组A、B和变量C在内存中的存储分配如下: A(1,1) A(2,1) A(1,2) CB(1) A(2,2) B(2) A(1,3) B(3) A(2,3) B(4) * * 12.1 等价语句 (EQUIVALENCE语句) 例4: DIMENSION B(4) LOGICAL L(8) EQUICALENCE(B(2), L(2)) B是实型数组,每个元素占4个字节; L是逻辑型数组,每个元素只占一个字节。 当有以上等价关系时,它们的存储分配如下图所示: B(1) B(2) B(3) B(4) ? L(1) L(2) L(3) L(4) L(5) L(6) L(7) L(8) * * 12.1 等价语句 (EQUIVALENCE语句) 等价语句的使用规则: 不能利用等价语句建立矛盾的等价关系。例如: DIMENSION A(10) EQUIVALENCE(X, A(1)), (X, A(3)) × 此处A(1)和A(3)是同一个数组中的元素,A(1)和A(3)不可能分配同一个存储单元,所以X既要和A(1)分配的单元相同,又要和A(3)分配的单元相同,明显不可能。 以下的等价关系也是错误的: DIMENSION A(5), B(10) EQUIVALENCE(A(1), B(2)), (A(3), B(3)) × * * 12.2 公用语句 通过上一章的学习,我们知道程序中不同程序单位之间的数据交换是通过虚实结合来完成。 另外FORTRAN还可以通过建立公用区的方法来实现各程序单位之间的数据交换。 公用区和虚实结合比较起来有其缺点——程序阅读性下降;有其优点——运行速度快(特别当有大量数据需要传送时)。 * * 12.2.1 无名公用区 在不同的程序单位中,各自的变量是相互独立的,尽管它们的变量名有时相同。但如果我们在主程序和子程序中都加上一条COMMON语句的话,如: COMMON X 此时编译程序在存储区中开辟了一个公用数据区。这时主程序和子程序中的两个变量X就共用一个存储单元,而不是相互独立了。 在FORTRAN中,用COMMON语句来开辟无名和有名公用区 * * 12.2.1 无名公用区 一、开辟无名公用区的一般格式: COMMON a1,a2,… 其中a1、a2、…允许是普通变量名、数组名和数组说明符(不是数组元素) 例如: 在主程序中写:COMMON X, Y, K, Z(3) 在子程序中写:COMMON A, B, J, T(3) 此时,在无名公用区中变量X和A,Y和B,K和J分别被分配在同一个存储单元中;数组Z和T占用相同的3个存储单元。 * * 12.2.1 无名公用区 说明: 编译程序在编译时为以上COMMON语句开辟一个无名公用区; 当把不同的程序单位连接(link)在一起的时候,不同程序单位在COMMON语句中的变量按其在语句中出现的先后顺序,依次连续的占用无名公用区的存储单元。 COMMON语句开辟公用区的主要用途: 使不同程序单位的变量之间进行数据传送 节省存储空间 * * 11.2 子例行程序 二、子例行程序的调用 一般形式: call 子例行程序名(实参表) call 子例行程序名 * * 11.2 子例行程序 例1:编写子例行程序用于交换两个变量的值。 program main subroutine change(x,y) dimension x(100) temp=x read(*,*)x x=y do 10,i=1,99 y=temp do 10,j=i+1,100 end if(x(i).lt.x(j))then call change(x(i),x(j)) endif 10 continue end * * 11.2 子例行程序 例2:编写子例行程序用于打印一行线条。 program main subroutine drawline call drawline
文档评论(0)