📄 sec4-3.htm
字号:
<p class=MsoNormal style='text-indent:57.6pt;mso-char-indent-count:4.8;
line-height:15.0pt;mso-line-height-rule:exactly;text-autospace:none'><span
lang=EN-US style='font-size:12.0pt;font-family:宋体'>END TYPE STUDENT_TYPE<o:p></o:p></span></p>
<p class=MsoNormal style='text-indent:57.6pt;mso-char-indent-count:4.8;
line-height:15.0pt;mso-line-height-rule:exactly;text-autospace:none'><span
lang=EN-US style='font-size:12.0pt;font-family:宋体'>TYPE(STUDENT_TYPE),DIMENSION(40)::
STUDENT<o:p></o:p></span></p>
<p class=MsoNormal style='text-indent:24.0pt;mso-char-indent-count:2.0;
line-height:17.0pt;mso-line-height-rule:exactly;text-autospace:none'><span
lang=ZH-CN style='font-size:12.0pt;font-family:宋体'>注意在上面三个定义派生类型</span><span
lang=EN-US style='font-size:12.0pt;font-family:宋体'>TYPE</span><span lang=ZH-CN
style='font-size:12.0pt;font-family:宋体'>语句中,派生类型名取成‘名</span><span lang=EN-US
style='font-size:12.0pt;font-family:宋体'>_TYPE</span><span lang=ZH-CN
style='font-size:12.0pt;font-family:宋体'>’形式,这是为了加强可读性。特别是当它的成员名与类型名一致时,可以这样区分。当给定属性</span><span
lang=EN-US style='font-size:12.0pt;font-family:宋体'>DIMENSION(40)</span><span
lang=ZH-CN style='font-size:12.0pt;font-family:宋体'>后,</span><span lang=EN-US
style='font-size:12.0pt;font-family:宋体'>STUDENT</span><span lang=ZH-CN
style='font-size:12.0pt;font-family:宋体'>即为有</span><span lang=EN-US
style='font-size:12.0pt;font-family:宋体'>40</span><span lang=ZH-CN
style='font-size:12.0pt;font-family:宋体'>个学生的派生型数组,每个学生按顺序有学号、班级</span><span
lang=EN-US style='font-size:12.0pt;font-family:宋体'>(</span><span lang=ZH-CN
style='font-size:12.0pt;font-family:宋体'>系、专业</span><span lang=EN-US
style='font-size:12.0pt;font-family:宋体'>)</span><span lang=ZH-CN
style='font-size:12.0pt;font-family:宋体'>、姓名、地址、成绩</span><span lang=EN-US
style='font-size:12.0pt;font-family:宋体'>(</span><span lang=ZH-CN
style='font-size:12.0pt;font-family:宋体'>数学、物理、英语</span><span lang=EN-US
style='font-size:12.0pt;font-family:宋体'>)</span><span lang=ZH-CN
style='font-size:12.0pt;font-family:宋体'>等成员。</span><span lang=EN-US
style='font-size:12.0pt;font-family:宋体'><o:p></o:p></span></p>
<p style='margin-left:0cm;text-indent:0cm;mso-list:l0 level1 lfo2;tab-stops:
list 18.0pt;text-autospace:none'><a name="第4_3_2b"></a><![if !supportLists]><span
lang=EN-US style='font-family:宋体;mso-bidi-font-family:宋体;color:red'><span
style='mso-list:Ignore'>b)<span style='font:7.0pt "Times New Roman"'>
</span></span></span><![endif]><span lang=ZH-CN style='font-family:宋体;
color:red'>缺省初始化</span><span lang=EN-US style='font-family:宋体;color:red'><o:p></o:p></span></p>
<p class=MsoNormal style='text-indent:24.0pt;mso-char-indent-count:2.0;
line-height:17.0pt;mso-line-height-rule:exactly;text-autospace:none;mso-char-indent-size:
12pt'><span lang=EN-US style='font-size:12.0pt;font-family:宋体'>F95</span><span
lang=ZH-CN style='font-size:12.0pt;font-family:宋体'>中,允许定义派生数据类型成员时给予初始值,这时就有了缺省初始化,但没有必要为每一个成员指定初始值。它的显式初始化会覆盖缺省初始化。例如:</span><span
lang=EN-US style='font-size:12.0pt;font-family:宋体'><o:p></o:p></span></p>
<p class=MsoNormal style='text-indent:57.6pt;mso-char-indent-count:4.8;
line-height:15.0pt;mso-line-height-rule:exactly;text-autospace:none'><span
lang=EN-US style='font-size:12.0pt;font-family:宋体'>TYPE REPORT<o:p></o:p></span></p>
<p class=MsoNormal style='text-indent:84.95pt;mso-char-indent-count:7.08;
line-height:15.0pt;mso-line-height-rule:exactly;text-autospace:none'><span
lang=EN-US style='font-size:12.0pt;font-family:宋体'>CHARACTER (LEN=20)
REPORT_NAME<o:p></o:p></span></p>
<p class=MsoNormal style='text-indent:84.95pt;mso-char-indent-count:7.08;
line-height:15.0pt;mso-line-height-rule:exactly;text-autospace:none'><span
lang=EN-US style='font-size:12.0pt;font-family:宋体'>INTEGER DAY<o:p></o:p></span></p>
<p class=MsoNormal style='text-indent:84.95pt;mso-char-indent-count:7.08;
line-height:15.0pt;mso-line-height-rule:exactly;text-autospace:none'><span
lang=EN-US style='font-size:12.0pt;font-family:宋体'>CHARACTER (LEN=3) MONTH<o:p></o:p></span></p>
<p class=MsoNormal style='text-indent:84.95pt;mso-char-indent-count:7.08;
line-height:15.0pt;mso-line-height-rule:exactly;text-autospace:none'><span
lang=EN-US style='font-size:12.0pt;font-family:宋体'>INTEGER :: YEAR = 1999<span
style='mso-spacerun:yes'> </span>! </span><span
lang=ZH-CN style='font-size:12.0pt;font-family:宋体'>年份这个成员有缺省初始值</span><span
lang=EN-US style='font-size:12.0pt;font-family:宋体'><o:p></o:p></span></p>
<p class=MsoNormal style='text-indent:57.6pt;mso-char-indent-count:4.8;
line-height:15.0pt;mso-line-height-rule:exactly;text-autospace:none'><span
lang=EN-US style='font-size:12.0pt;font-family:宋体'>END TYPE REPORT<o:p></o:p></span></p>
<p class=MsoNormal style='line-height:17.0pt;mso-line-height-rule:exactly;
text-autospace:none'><span lang=ZH-CN style='font-size:12.0pt;font-family:宋体'>而下面语句中,显式的初始化覆盖了</span><span
lang=EN-US style='font-size:12.0pt;font-family:宋体'>NOV_REPORT</span><span
lang=ZH-CN style='font-size:12.0pt;font-family:宋体'>中的</span><span lang=EN-US
style='font-size:12.0pt;font-family:宋体'>YEAR</span><span lang=ZH-CN
style='font-size:12.0pt;font-family:宋体'>成员。</span><span lang=EN-US
style='font-size:12.0pt;font-family:宋体'><o:p></o:p></span></p>
<p class=MsoNormal style='text-indent:57.6pt;mso-char-indent-count:4.8;
line-height:15.0pt;mso-line-height-rule:exactly;text-autospace:none'><span
lang=EN-US style='font-size:12.0pt;font-family:宋体'>TYPE(REPORT),PARAMETER ::
NOV_REPORT=REPORT("Sales",15,"NOV",2001)<o:p></o:p></span></p>
<p class=MsoNormal style='text-indent:24.0pt;mso-char-indent-count:2.0;
line-height:17.0pt;mso-line-height-rule:exactly;text-autospace:none'><span
lang=ZH-CN style='font-size:12.0pt;font-family:宋体'>又如,下面用</span><span
lang=EN-US style='font-size:12.0pt;font-family:宋体'>DATA</span><span lang=ZH-CN
style='font-size:12.0pt;font-family:宋体'>语句进行显式初始化:</span><span lang=EN-US
style='font-size:12.0pt;font-family:宋体'><o:p></o:p></span></p>
<p class=MsoNormal style='text-indent:57.6pt;mso-char-indent-count:4.8;
line-height:15.0pt;mso-line-height-rule:exactly;text-autospace:none'><span
lang=EN-US style='font-size:12.0pt;font-family:宋体'>TYPE EMPLOYEE<o:p></o:p></span></p>
<p class=MsoNormal style='text-indent:84.95pt;mso-char-indent-count:7.08;
line-height:15.0pt;mso-line-height-rule:exactly;text-autospace:none'><span
lang=EN-US style='font-size:12.0pt;font-family:宋体'>INTEGER ID<o:p></o:p></span></p>
<p class=MsoNormal style='text-indent:84.95pt;mso-char-indent-count:7.08;
line-height:15.0pt;mso-line-height-rule:exactly;text-autospace:none'><span
lang=EN-US style='font-size:12.0pt;font-family:宋体'>CHARACTER(LEN=40) NAME<o:p></o:p></span></p>
<p class=MsoNormal style='text-indent:57.6pt;mso-char-indent-count:4.8;
line-height:15.0pt;mso-line-height-rule:exactly;text-autospace:none'><span
lang=EN-US style='font-size:12.0pt;font-family:宋体'>END TYPE EMPLOYEE<o:p></o:p></span></p>
<p class=MsoNormal style='text-indent:57.6pt;mso-char-indent-count:4.8;
line-height:15.0pt;mso-line-height-rule:exactly;text-autospace:none'><span
lang=EN-US style='font-size:12.0pt;font-family:宋体'>TYPE(EMPLOYEE)
MAN_NAME,CON_NAME<o:p></o:p></span></p>
<p class=MsoNormal style='text-indent:57.6pt;mso-char-indent-count:4.8;
line-height:15.0pt;mso-line-height-rule:exactly;text-autospace:none'><span
lang=EN-US style='font-size:12.0pt;font-family:宋体'>DATA MAN_NAME/EMPLOYEE(417,'Henry
Adams')/<o:p></o:p></span></p>
<p class=MsoNormal style='text-indent:57.6pt;mso-char-indent-count:4.8;
line-height:15.0pt;mso-line-height-rule:exactly;text-autospace:none'><span
lang=EN-US style='font-size:12.0pt;font-family:宋体'>DATA
CON_NAME%ID,CON_NAME%NAME /891,"David James"/<o:p></o:p></span></p>
<p style='margin-left:0cm;text-indent:0cm;mso-list:l0 level1 lfo2;tab-stops:
list 18.0pt;text-autospace:none'><a name="第4_3_2c"></a><![if !supportLists]><span
lang=EN-US style='font-family:宋体;mso-bidi-font-family:宋体;color:red'><span
style='mso-list:Ignore'>c)<span style='font:7.0pt "Times New Roman"'>
</span></span></span><![endif]><span lang=ZH-CN style='font-family:宋体;
color:red'>结构构造函数</span><span lang=EN-US style='font-family:宋体;color:red'><o:p></o:p></span></p>
<p class=MsoNormal style='text-indent:24.0pt;mso-char-indent-count:2.0;
line-height:17.0pt;mso-line-height-rule:exactly;text-autospace:none;mso-char-indent-size:
12pt'><span lang=EN-US style='font-size:12.0pt;font-family:宋体'>F90</span><span
lang=ZH-CN style='font-size:12.0pt;font-family:宋体'>有一种与结构有关的函数,称为结构构造函数,它用来给某结构类型中一个具体的变量赋值。定义了一个派生类型,实际上也同时建立了一个结构构造函数,这个函数名就是派生类型名,函数的自变量就是派生类型内各成员。只要派生类型一建立,就可直接调用这个结构构造函数。如果把实在的各成员值作为实元,与结构构造函数中自变量作哑实结合,其函数值就是被定义成派生类型的一个变量的值,可以直接赋给派生类型中的某一变量名。例如,对下面的派生类型:</span><span
lang=EN-US style='font-size:12.0pt;font-family:宋体'><o:p></o:p></span></p>
<p class=MsoNormal style='text-indent:57.6pt;mso-char-indent-count:4.8;
line-height:15.0pt;mso-line-height-rule:exactly;text-autospace:none'><span
lang=EN-US style='font-size:12.0pt;font-family:宋体'>TYPE FRIEND_TYPE<o:p></o:p></span></p>
<p class=MsoNormal style='text-indent:84.95pt;mso-char-indent-count:7.08;
line-height:15.0pt;mso-line-height-rule:exactly;text-autospace:none'><span
lang=EN-US style='font-size:12.0pt;font-family:宋体'>CHARACTER(LEN=20) :: NAME<o:p></o:p></span></p>
<p class=MsoNormal style='text-indent:84.95pt;mso-char-indent-count:7.08;
line-height:15.0pt;mso-line-height-rule:exactly;text-autospace:none'><span
lang=EN-US style='font-size:12.0pt;font-family:宋体'>INTEGER :: AGE<o:p></o:p></span></p>
<p class=MsoNormal style='text-indent:57.6pt;mso-char-indent-count:4.8;
line-height:15.0pt;mso-line-height-rule:exactly;text-autospace:none'><span
lang=EN-US style='font-size:12.0pt;font-family:宋体'>END TYPE FRIEND_TYPE<o:p></o:p></span></p>
<p class=MsoNormal style='line-height:17.0pt;mso-line-height-rule:exactly;
text-autospace:none'><span lang=ZH-CN style='font-size:12.0pt;font-family:宋体'>系统中就自动生成一个函数名叫</span><span
lang=EN-US style='font-size:12.0pt;font-family:宋体'>FRIEND_TYPE</span><span
lang=ZH-CN style='font-size:12.0pt;font-family:宋体'>的结构函数,该函数有两个哑元自变量:</span><span
lang=EN-US style='font-size:12.0pt;font-family:宋体'>NAME</span><span lang=ZH-CN
style='font-size:12.0pt;font-family:宋体'>、</span><span lang=EN-US
style='font-size:12.0pt;font-family:宋体'>AGE</span><span lang=ZH-CN
style='font-size:12.0pt;font-family:宋体'>。其完整的函数形式为:</span><span lang=EN-US
style='font-size:12.0pt;font-family:宋体'>FRIEND_TYPE(NAME,AGE)</span><span
lang=ZH-CN style='font-size:12.0pt;font-family:宋体'>。假设变量名</span><span
lang=EN-US style='font-size:12.0pt;font-family:宋体'>MY_FRIEND</span><span
lang=ZH-CN style='font-size:12.0pt;font-family:宋体'>被说明为</span><span lang=EN-US
style='font-size:12.0pt;font-family:宋体'>FRIEND_TYPE</span><span lang=ZH-CN
style='font-size:12.0pt;font-family:宋体'>类型,即程序中有说明语句:</span><span lang=EN-US
style='font-size:12.0pt;font-family:宋体'><o:p></o:p></span></p>
<p class=MsoNormal style='text-indent:57.6pt;mso-char-indent-count:4.8;
line-height:15.0pt;mso-line-height-rule:exactly;text-autospace:none'><span
lang=EN-US style='font-size:12.0pt;font-family:宋体'>TYPE(FRIEND_TYPE) ::
MY_FRIEND, MY_BOY_FRIEND, MY_GIRL_FRIEND<o:p></o:p></span></p>
<p class=MsoNormal style='line-height:17.0pt;mso-line-height-rule:exactly;
text-autospace:none'><span lang=ZH-CN style='font-size:12.0pt;font-family:宋体'>于是可把‘</span><span
lang=EN-US style='font-size:12.0pt;font-family:宋体'>Kong Ming</span><span
lang=ZH-CN style='font-size:12.0pt;font-family:宋体'>’作为</span><span lang=EN-US
style='font-size:12.0pt;font-family:宋体'>NAME</span><span lang=ZH-CN
style='font-size:12.0pt;font-family:宋体'>的实元,</span><span lang=EN-US
style='font-size:12.0pt;font-family:宋体'>25</span><span lang=ZH-CN
style='font-size:12.0pt;font-family:宋体'>作为</span><span lang=EN-US
style='font-size:12.0pt;font-family:宋体'>AGE</span><span lang=ZH-CN
style='font-size:12.0pt;font-family:宋体'>的实元,在程序执行部分中调用结构构造函数,并把函数值赋给变量</span><span
lang=EN-US style='font-size:12.0pt;font-family:宋体'>WHO</span><span lang=ZH-CN
style='font-size:12.0pt;font-family:宋体'>,赋值语句为:</span><span lang=EN-US
style='font-size:12.0pt;font-family:宋体'>MY_FRIEND</span><span lang=ZH-CN
style='font-size:12.0pt;font-family:宋体'>=</span><span lang=EN-US
style='font-size:12.0pt;font-family:宋体'>FRIEND_TYPE</span><span lang=ZH-CN
style='font-size:12.0pt;font-family:宋体'>(‘</span><span lang=EN-US
style='font-size:12.0pt;font-family:宋体'>Kong Ming</span><span lang=ZH-CN
style='font-size:12.0pt;font-family:宋体'>’,</span><span lang=EN-US
style='font-size:12.0pt;font-family:宋体'>25</span><span lang=ZH-CN
style='font-size:12.0pt;font-family:宋体'>)。此时具有</span><span lang=EN-US
style='font-size:12.0pt;font-family:宋体'>FRIEND_TYPE</span><span lang=ZH-CN
style='font-size:12.0pt;font-family:宋体'>类型的变量</span><span lang=EN-US
style='font-size:12.0pt;font-family:宋体'>MY_FRIEND</span><span lang=ZH-CN
style='font-size:12.0pt;font-family:宋体'>就有了</span><span lang=EN-US
style='font-size:12.0pt;font-family:宋体'>NAME</span><span lang=ZH-CN
style='font-size:12.0pt;font-family:宋体'>成员值和</span><span lang=EN-US
style='font-size:12.0pt;font-family:宋体'>AGE</span><span lang=ZH-CN
style='font-size:12.0pt;font-family:宋体'>成员值。</span><span lang=EN-US
style='font-size:12.0pt;font-family:宋体'><o:p></o:p></span></p>
<p class=MsoNormal style='text-indent:24.0pt;mso-char-indent-count:2.0;
line-height:17.0pt;mso-line-height-rule:exactly;text-autospace:none'><span
lang=ZH-CN style='font-size:12.0pt;font-family:宋体'>调用结构构造函数作哑实结合时,只要保持类型、个数、位置一致,可以有多种形式的实元与哑元结合。譬如实元可以又是另一低层次结构的结构构造函数,或另一个结构的成员等。如回到前面较复杂的学生结构例中,设已定义派生类型</span><span
lang=EN-US style='font-size:12.0pt;font-family:宋体'> STUDENT_TYPE</span><span
lang=ZH-CN style='font-size:12.0pt;font-family:宋体'>,并说明了变量名</span><span
lang=EN-US style='font-size:12.0pt;font-family:宋体'>ZHANG_FEI</span><span
lang=ZH-CN style='font-size:12.0pt;font-family:宋体'>是</span><span lang=EN-US
style='font-size:12.0pt;font-family:宋体'>STUDENT_TYPE</span><span lang=ZH-CN
style='font-size:12.0pt;font-family:宋体'>类型的,而后我们在执行部分中对</span><span lang=EN-US
style='font-size:12.0pt;font-family:宋体'>ZHANG_FEI</span><span lang=ZH-CN
style='font-size:12.0pt;font-family:宋体'>的成员</span><span lang=EN-US
style='font-size:12.0pt;font-family:宋体'>CLASS</span><span lang=ZH-CN
style='font-size:12.0pt;font-family:宋体'>通过如下赋值语句赋值:</span><span lang=EN-US
style='font-size:12.0pt;font-family:宋体'><o:p></o:p></span></p>
<p class=MsoNormal style='text-indent:57.6pt;mso-char-indent-count:4.8;
line-height:15.0pt;mso-line-height-rule:exactly;text-autospace:none'><span
lang=EN-US style='font-size:12.0pt;font-family:宋体'>ZHANG_FEI</span><span
lang=ZH-CN style='font-size:12.0pt;font-family:宋体'>%</span><span lang=EN-US
style='font-size:12.0pt;font-family:宋体'>CLASS=CLASS_TYPE</span><span
lang=ZH-CN style='font-size:12.0pt;font-family:宋体'>(‘</span><span lang=EN-US
style='font-size:12.0pt;font-family:宋体'>22th Department</span><span lang=ZH-C
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -