第12章数据共用存储单元 和数据块子程序 §1等价语句 quivalence语句) 等价语句:使同一程序单元中的多个变量共用同一个 存储单元。 §2公用语句( common语句) 公用语句:使不同程序单元的变量共用同一个存储单 §3数据块子程序自学) 数据块子程序:给公用区中的变量赋初值。 2021/2/24
1 2021/2/24 §1 等价语句(equivalence语句 ) 等价语句:使同一程序单元中的多个变量共用同一个 存储单元。 §2 公用语句 (common语句) 公用语句:使不同程序单元的变量共用同一个存储单 元。 §3 数据块子程序(自学) 数据块子程序:给公用区中的变量赋初值。 第12章 数据共用存储单元 和数据块子程序
§1等价语句(p292294) 2 等价语句即 equivalence语句)的作用是使本程序单元 中的多个变量共用同一个存储单元。 一般飛式:equⅳ valence(变量表1,(变量表2), 功能:每一对括号内变量表中的变量将占用同一个存 储单元,通常称这些变量等价。 9A: equivalence(w, st),(im, npl, jj2, neg) ()每个变量表中至少应有两个变量,变量之间用逗号 隔开,变量可以是普通变量、数组或数组元素,但不能是 虚参。 §1等价语句 2021/2/24
2 2021/2/24 §1 等价语句(p292-294) 等价语句(即equivalence语句)的作用是使本程序单元 中的多个变量共用同一个存储单元。 一般形式: 功能:每一对括号内变量表中的变量将占用同一个存 储单元,通常称这些变量等价。 如: ⑴ 每个变量表中至少应有两个变量,变量之间用逗号 隔开,变量可以是普通变量、数组或数组元素,但不能是 虚参。 equivalence (变量表1), (变量表2), … equivalence (w, st), (im, npl, jj2, neg) §1 等价语句
(2)变量表中的变量类型既可以相同也可以不同:当类3 型相同时,变量将具有相同的值;当类型不同时,由于不 同类型变量所占的存储单元长度不同,变量将不具有相同 的值。 【例121】 equivalence(im,np,j2,neg) im=1 write(", )im, npl, jj2, neg end 【例122】 equivalence(a,b, a=1.0 write(, ")a, b, end §1等价语句 2021/2/24
3 2021/2/24 ⑵ 变量表中的变量类型既可以相同也可以不同:当类 型相同时,变量将具有相同的值;当类型不同时,由于不 同类型变量所占的存储单元长度不同,变量将不具有相同 的值。 【例12.1】 【例12.2】 equivalence (im, npl, jj2, neg) im=1 write(* , *)im, npl, jj2, neg end equivalence (a, b, m) a=1.0 write(* , *)a, b, m end §1 等价语句
(3)当变量表中的变量是数组名或数组元素、且数组的4 类型相同时,则每个数组中相对应的数组元素将共用同一 个存储单元。 如: real a(8),b(42,c(2,2,2) equivalence(a, b, c) a(1)a(2)a(3)a(4)|a(5)a(6)(a7)a(8) b(1,1)b(2,1)b(3,1)b(41)b(1,2)b(2,2)b(32)b(4,2) c(1121121c(21c(112c(2,1,2)c(12,2)c(222) 如: real a(2,3),b(4) equivalence (a(2, 2),b(2)) a(1112(21)a(1,2)a(2,2)a(1,3)a(2,3) b(1)b(2)b(③3)b(4) §1等价语句 2021/2/24
4 2021/2/24 ⑶ 当变量表中的变量是数组名或数组元素、且数组的 类型相同时,则每个数组中相对应的数组元素将共用同一 个存储单元。 如: 如: real a(8), b(4,2), c(2,2,2) equivalence (a, b, c) §1 等价语句 a(1) b(1,1) c(1,1,1) a(2) b(2,1) c(2,1,1) a(3) b(3,1) c(1,2,1) a(4) b(4,1) c(2,2,1) a(5) b(1,2) c(1,1,2) a(6) b(2,2) c(2,1,2) (a7) b(3,2) c(1,2,2) a(8) b(4,2) c(2,2,2) real a(2,3), b(4) equivalence ( a(2,2), b(2) ) a(1,1) a(2,1) a(1,2) b(1) a(2,2) b(2) a(1,3) b(3) a(2,3) b(4)
如: real a(2,3),b(4) 5 equivalence (a(1,2),c), b(1),c) a0111a(21)a(1,2)|a(22)a(1,3)a23 b(1)b(2)b(3)b(4) (4)当变量表中的变量是数组名或数组元素、但数组的 类型不同时,则每个数组中的数组元素是按照其存储长度 对应的。 如: real b(4 设一个实型数据占 character c(8 4个字节,一个字符 eqμ divalence(b(2,c(2)型数据占1个字节。 b(1) b(2) b(3) b(4) §1等价语句 2021/2/24
5 2021/2/24 b(1) b(2) b(3) b(4) c(1) c(2) c(3) c(6) c(7) c(8) 如: ⑷ 当变量表中的变量是数组名或数组元素、但数组的 类型不同时,则每个数组中的数组元素是按照其存储长度 对应的。 如: §1 等价语句 a(1,1) a(2,1) a(1,2) c b(1) a(2,2) b(2) a(1,3) b(3) a(2,3) b(4) real a(2,3), b(4) equivalence ( a(1,2), c ), ( b(1), c ) real b(4) character c(8) equivalence ( b(2), c(2) ) 设一个实型数据占 4个字节,一个字符 型数据占1个字节。 c(4) c(5)
(5)不能利用等价语句建立矛盾的等价关系。 6 如: real a(10) equivalence(x, a(1),(x, a( 3)) 如 real a(5), b(10) equivalence (a(0),b(2)),(a(3),b (3)) 练习:教材p301习题一、习题二。 习题 a(1) 1. dimension a(5),b(3) a(2) b(1) equivalence (a 3),b(2)) a a(4) b(3) a(5) §1等价语句 2021/2/24
6 2021/2/24 ⑸ 不能利用等价语句建立矛盾的等价关系。 如: 如: 练习:教材p301习题一、习题二。 §1 等价语句 real a(10) equivalence ( x, a(1) ), ( x, a(3) ) real a(5), b(10) equivalence ( a(1), b(2) ), ( a(3), b(3) ) 1. dimension a(5), b(3) equivalence (a(3), b(2)) 习题一 a(1) a(2) a(3) a(4) a(5) b(1) b(2) b(3)
2 dimension e(2, 2, 2), f(5) 3. integer i(3) equivalence (e(2, 1, 2), f(4 )) character*2 c(5) real r(8) e(1,1,1) equivalence (r(2), c(2)),i, c) e(2,1,1) (1)=) e(1,2,1) f(1) 2) c(2)}i(2 c(3)}(3) e(2,2,1) f(2) ……… c(4) c(5) e(1,1,2) f(3) r(4) ………… e(2,1,2) f(4) e(122 f(5) r(5) e(22,2) r(7E r(8)1∷ §1等价语句 2021/2/24
7 2021/2/24 c(1) 2. dimension e(2,2,2), f(5) equivalence (e(2,1,2), f(4)) §1 等价语句 e(1,1,1) e(2,1,1) e(1,2,1) e(2,2,1) e(1,1,2) e(2,1,2) e(1,2,2) e(2,2,2) f(1) f(2) f(3) f(4) f(5) 3. integer i(3) character*2 c(5) real r(8) equivalence (r(2), c(2)), (i, c) r(1) r(2) r(3) r(4) r(5) r(6) r(7) r(8) c(2) c(3) c(4) c(5) i(1) i(2) i(3)
4. integer i(6) 8 character*8 d(4 equivalence (d(1),r),d(2), c),(d( 3),i(2)) d(1){ d(2) d(3) "" ……………… 4 5 }i(6) d §1等价语句 2021/2/24
8 2021/2/24 §1 等价语句 4. integer i(6) character*8 d(4) equivalence (d(1), r), (d(2), c), (d(3), i(2)) d(1) d(2) d(3) d(4) r c i(2) i(3) i(4) i(5) i(1) i(6)
§2公用语句(p294-299) 9 common语句的作用是使不同程序单元的变量共用同 一个存储单元,从而使这些变量具有相同的值,实现不同 程序单元之间的数据传递。 不同程序单元之间的数据传递有两种实现方式:④采 用实参和虚参结合的形式实现;②利用 common语句实 现。 在一个 Fortran程序运行时,不同程序单元的变量共用 的存储单元放在内存中该程序的一个公用数据区内,称为 公用区。 公用区实现的是一种全局变量的功能,只不过在不同的 程序单元中变量的名字不同而已。 52公用语句 2021/2/24
9 2021/2/24 §2 公用语句(p294-299) common语句的作用是使不同程序单元的变量共用同 一个存储单元,从而使这些变量具有相同的值,实现不同 程序单元之间的数据传递。 不同程序单元之间的数据传递有两种实现方式:① 采 用实参和虚参结合的形式实现;② 利用common语句实 现。 在一个Fortran程序运行时,不同程序单元的变量共用 的存储单元放在内存中该程序的一个公用数据区内,称为 公用区。 公用区实现的是一种全局变量的功能,只不过在不同的 程序单元中变量的名字不同而已。 §2 公用语句
公用区有两种类型:④无名公用区,任何一个 Fortran0 程序中只可能有一个无名公用区:②有名公用区,一个 Fortran程序中根据需要可以有多个有名公用区 无名公用区 建立无名公用区的 common语句的一般飛式: common变量1,变量2, 【例123】 common X, y, I subroutine sub data x,yi/.0,2.0,3/ common a, b, j,W call sub We*(a+b) end write(", )a, b,j,w end 52公用语句 2021/2/24
10 2021/2/24 公用区有两种类型: ①无名公用区,任何一个Fortran 程序中只可能有一个无名公用区;② 有名公用区,一个 Fortran程序中根据需要可以有多个有名公用区。 一、无名公用区 建立无名公用区的common语句的一般形式: 【例12.3】 common 变量1, 变量2, … common x, y, i data x, y, i/1.0, 2.0, 3/ call sub end subroutine sub common a, b, j, w w=j*(a+b) write(* , *)a, b, j, w end §2 公用语句