版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、fortran 之 common 语句fortran 程序中各程序单位之间的数据交换可以通过虚实结合来实现,还可以通过建立公用区的方式来完成。公用区有两种,一种是无名公用区,任何一个程序中只可能有一个无名公用区;一种是有名公用区,一个程序中可以根据需要由程序员开辟任意多个有名公用区。建立无名和有名公用区都通过common 语句来进行。按照结构化程序设计的指导思想,通常主张通过虚实结合的途径来传送数据而不主张使用公用区。因为前者使程序有较好的可读性,而且容易跟踪数据的流向,便于对程序进行调试和维护。但是虚实结合的传送方式速度较慢,特别是在各程序单位之间有大量的数据需要传送时速度问题就更为突出。不
2、同程序单位利用公用区交换数据的速度却比虚实结合的方式传送速度快得多。所以在很多应用程序中如果各程序单位之间有大量数据需要传送时,程序员一般仍然采用开辟公用区的方式。11.2.1 无名公用区开辟无名公用区 common 语句的一般形式如下:common a1,a2,其中 a1,a2,允许是普通变量名、数组名和数组说明符(注意:不是数组元素),它们之间用逗号隔开。例如:在主程序中写:common x,y,i,z(3) 在子程序中写:common a,b,j,t(3)于是,在无名公用区中变量 x 和 a,y 和 b,i 和 j 分别分配在同一个存储单元中,数组 z 和 t 同占三个存储单元。占同一个
3、存储单元的那些变量在不同的程序单位中,它们的名字不需要相同。fortran 编译程序在编译时为 common 语句开辟一个无名公用区,当把不同的程序单位连接在一起的时候,不同程序单位在 common 语句中的变量按其在语句中出现的先后顺序占用无名公用区连续的存储单元,也就是说每个程序单位中的 common 语句总是给出现在语句中的第一个变量分配在无名公用区的第一个存储区单元。common 语句开辟公用区的主要用途就是使不同程序单位的变量之间进行数据传送,另一种用途是用来节省存储空间。下面的例子通过公用区进行交换数据:program main common z1,z2 read(*,*)a1,a
4、2,a3 call quad(a1,a2,a3) write(*,*)z1,z2endsubroutine quad(a,b,c) common x1,x2.end或者:program main common z1,z2,a1,a2,a3 read(*,*)a1,a2,a3 call quad() write(*,*)z1,z2endsubroutine quad() common x1,x2,a,b,c.end建立无名公用区的规则:(1) common 语句是说明语句,必须出现在所有可执行语句之前。common 语句中只允许出现变量名、数组名和数组说明符,后者意味着可用 common 语句说
5、明数组,此数组必然放在公用区中。(2) 由于公用语句中的变量在编译时已被分配在实在的存储单元中,因此在公用语句中不能出现虚拟参数。同样,在编译时,可调数组的大小不定, 无法分配固定的存储单元,因此可调数组名也不能出现在公用语句中。但是可调数组的维的上、下界变量可以通过 common 语句传送,当然这些变量就不再允许出现在虚参表中。例如:subroutine sub(a,b) common na,nbdimension a(na),b(nb).但是为了程序清晰起见,通常不提倡采用这种方式,而是希望通过虚实结合来传送与可调数组有关的全部量。(3) 一个程序在运行过程中只有一个无名公用区。在同一个程
6、序单位中可以出现几个 common 语句,它们的作用相当于一个。fortran 编译程序按common 语句在同一程序单位中出现的先后次序把语句中变量按顺序放在无名公用区的存储单元中。(4) 各程序单位 common 语句中的变量类型必须按位置一一对应一致才能正确传送数据。例如:主程序中有:common a(5),i子程序中有:common b(4),i,p主程序中 a 数组元素是实型,使数组元素 a(5)和子程序中的整型变量 i 共用存储单元,使主程序中的整型变量 i 和子程序中的实型变量 p 共用存储单元都是错误的。(5) 在一个程序单位中,分配在公用区中的名字只能在公用语句中出现一次。(
7、6) 各程序单位中,无名公用区中的变量个数可以不一样。如:主程序中有:common x(9),a,b,c,d子程序中有:common a(4),x(2)这是允许的。(7) 不要混淆 equivalence 和 common 语句,equivalence 语句是给同一程序单位中的不同变量分配同一个存储单元,而 common 语句则用于给不同程序单位的变量分配同一存储单元。因此不允许在同一程序单位中写:common a,b,c equivalence(a,b)因为 common 语句把变量 a、b、c 分配在公用区的相邻的三个存储单元中, 而 equivalence 语句却又把 a、b、c 分配在
8、同一个存储单元中,这是矛盾的,因此禁止以上写法。(8) 公用区可以用 equivalence 语句来扩大加长。例如:eimension a(4),b(4) common a,c equivalence(a(3),b(1)公用语句在无名公用区开辟了连续的五个存储单元,等价语句使 a(3)和b(1)共用存储单元因而把 b 数组带入了无名公用区,使公用区向后扩大了一个存储单元。这种情况下公用区的存储分配如下图:a(1)a(2)a(3)a(4) cb(1)b(2)b(3)b(4)公用区可以用这种方式加长。但是通过 common 语句和 equivalence 语句的联用,只允许公用区向后延伸,不允许向
9、前延伸。对于上例,如果把equivalence 语句改为:equivalence(a(1),b(2)则是非法的,它使得公用区出现下图所示的情况:a(1)a(2)a(3)a(4) cb(1)b(2)b(3)b(4)b 并没有在 common 语句中说明,它是由等价语句带进来的,但 b 的元素向前越过了公用区的第一个存储单元,这是不允许的。11.2.2 有名公用区common 语句说明有名公用区的形式如下:common/n1/a1,a2,/n2/b1,b2,其中,n1,n2 为公用区名,它们放在两个斜杠之间。公用区名的取名方法与变量名同。公用区名可以和本程序单位中的变量同名,但不允许和子程序同 名
10、。a1、a2、,b1、b2、代表各公用区中的变量名、数组名或数组说明符。也可以用两个连续的斜杠来表示无名公用区,例如:common r,x,y,z /c2/ a,b,c也可以写成:common /r,x,y,z /c2/ a,b,c或者:common /c2/ a,b,c /r,x,y,zcommon 语句中的公用区的变量可以“化整为零”,只要它们在有名公用区中的顺序不变,例如以上语句可写成:common r /c2/ a /x,y,z /c2/ b,c或者写成:common r /c2/ acommon /c2/ b,/x common / y,z,/c2/ c但是这种写法可读性差,建议把一
11、个公用区用一条 common 语句来完成,例如下面的语句使人一目了然。common r,x,y,z common /c2/ a,b,c用无名公用区为各程序单位传送不同的变量时,必须使各个程序单位中的公用变量与单一的无名公用区中相应的变量进行对应,程序之间的数据传送显得僵化繁琐。利用有名公用区避免了无名公用区的敝端,使之做到公用之中有“专用”,只需在各个程序单位中做到同名公用区中数据顺序一一对应就行了。有名公用区的使用不仅保留了各程序单位之间数据的快速传送,也使程序得到了简化。说明有名公用区的规则与说明无名公用区的规则基本相同,不同之处是:(1) 各程序单位的同名公用区中,变量不仅在类型上要一一
12、对应一致,而且个数必须相同。(2) 如果有名公用区中出现字符型变量,则要求整个公用区中的变量都具有字符类型。也就是不允许字符变量与其它变量放在同一个有名公用区中。“”“”at the end, xiao bian gives you a passage. minand once said, people who learn to learn are very happy people. in every wonderful life, learning is an eternal theme. as a professional clerical and teaching position, i understand the importance of continuous learning, life is diligent, nothing can be gained, only continuous learning can achieve better self. only by constantly learning and mastering the latest relevant knowledge, can employees from all walks of life keep up with the pace of enterp
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 郑州铁路职业技术学院《摄影摄像》2023-2024学年第一学期期末试卷
- 长春医学高等专科学校《微生物资源保护与利用》2023-2024学年第一学期期末试卷
- 玉溪农业职业技术学院《程序设计技术(C语言)》2023-2024学年第一学期期末试卷
- 物联网设备电源功耗降低
- IT项目季报告模板
- 实习机会获取指导
- 初一军训学生发言稿
- 村容村情调研报告
- 统编版六年级语文上册寒假作业(九)(有答案)
- 二零二五版房屋租赁合同附押金退还条款2篇
- 虚拟货币地址分析技术的研究-洞察分析
- 绿色供应链管理制度内容
- 心理学基础知识考试参考题库500题(含答案)
- 电力智慧检修安全运行三维可视化管理平台建设方案
- 一年级数学(上)计算题专项练习集锦
- 消防安全应急预案下载
- 《北航空气动力学》课件
- 附件:财政业务基础数据规范(3.0版)
- 电商公司售后服务管理制度
- 火灾应急处理课件
- 创新者的逆袭3:新质生产力的十八堂案例课-记录
评论
0/150
提交评论