《程序设计语言FORTRAN77》学习辅导(一)

🏠 首页 《无线电》杂志 1987年 🔗 第210期 🔗 第7页 分类:应用电子仪器 🔗 邓自立 🔗, 黄庙由 🔗, 唐兆衡 🔗

电视教学系列片《程序设计语言FORTRAN77》是以高等教育出版社出版的同名文字教材为蓝本摄制的,它系统地介绍了标准FORTRAN77全集语言的主要内容及编写程序的基本方法。电视片包括了文字教材的前八章及第九,十章部分内容。教学片共36集。大多数读者,只要坚持认真学习。一般都能达到用FORTRAN77语言编写解决计算问题程序的目的。为今后提高计算机应用水平打下基础。

电视教学片不是采用教师现场教学录像的形式,而是采用动画、字幕及用例题上机演示等手法进行教学。在上电视课时,一般不必作详细笔记,可只简单记一些内容要点,主要应集中精力观看和思考。在做练习和编写程序时,从开始就要养成严格、认真的习惯,有条件的读者应争取上机实习。

在第一章的学习中,以两个简单的FORTRAN77程序为例,让大家看到FORTRAN77程序的概貌。就象初到一个城市,先让你从高处俯瞰整个城市一样,虽然不能了解每部分的细节,但却可以知道它的轮廓。因此不要求读者完全理解这两个程序例子,只要有一个大致印象就行了。但是,由两个程序例子引出的关于FORTRAN77程序的书写格式及程序结构中的几个基本术语是应该掌握的。下面回答读者在学习中提出的几个问题。

问:每台计算机所用的FORTRAN77语言都一样吗?

答:目前一般大中型计算机上配有的FORTRAN77语言大都能实现标准FORTRAN77全集语言的功能。此外不同型号的计算机,生产厂家可能增加一些非标准的用法。因此,本教材讲授的标准FORTRAN77全集语言在这些机器上是能实现的。然而,目前微型计算机(例如:APPLE-Ⅱ,IBM-PC)上配的FORTRAN77语言大多数只能实现FORTRAN77子集语言,但也有某些扩充的功能。子集语言中包含了全集语言的大部分内容,有些内容如:表控输入输出功能,子集语言就没有。因此,我们要使用某种型号的计算机进行演算时,必须先阅读该机FORTRAN77用户手册,了解该机所具有的功能。

问:主程序的程序名有什么作用?

答:一个可执行程序必须恰好有一个主程序单位,主程序单位可以用PROGRAM语句作为它的第一个语句,程序名就放在RROGRAM语句中。标准FORTRAN77规定。主程序PROGRAM不是主程序的必要语句,主程序名也不是必要的,它对程序的运行不产生什么作用。它只是供别人阅读程序时的一个符号标志,可有可无。但是有些计算机系统的FORTRAN77编译程序要求用主程序名与操作系统打交道。

问:注解行对程序的执行和编译不产生影响,为什么还要设注解行?

答:注解行的作用是方便用户了解和阅读程序。例如:说明该程序是完成什么计算的,程序中所用的主要变量代表什么,输入数据所使用的物理单位是什么等。

问:电视课中介绍的演示机DPS8/49计算机,在用终端键盘键入程序时,每行内容的前面都要有一个行号。那么行号与语句标号有什么区别呢?有行号还需要语句标号吗?

答:学习过BASIC语言的语者更自然会提出这种问题。在BASIC语言程序中是只有行号而没有语句标号的。在DPS8/49计算机终端用键盘键入程序,必须有行号。其它一些机型也有这种要求。行号使计算机系统识别键入的是程序内容还是操作命令。如果没有行号,计算机系统就把键入的内容识别成一个操作指令。有行号就说明键入的是程序内容。另外,由程序行的行号大小顺序排定各项的顺序。标准FORTRAN77语言本身是不要求有行号的。计算机系统既可运行有行号的程序,也可运行无行号的程序。FORTRAN77程序不能通过行号来引用程序中的语句,引用语句一定得有语句标号。行号与语句标号本身没有什么联系。

问:有人说:“FORTRAN77的整常数和普通整数写法,在形式上是一样的”,这种说法对吗?

答:这种说法不确切。普通整数的写法大概有两种。比如整数一千,既可写成1000(学生在演算时常用),又可写成1,000(商业系统人员常用)。按FORTRAN77规定,“整型常数是由一个正号或负号后跟一串数字(0~9)组成,其中正号可以省去。”因此一千的两种写法中,1000是整常数,而1,000是不符合要求的。我们应养成习惯按整常数的定义来检验和书写每一整常数数据。特别是商业系统的工作者,要留意不要把商业上的习惯写法带到编程中来。

问:为什么说“整数在计算机内部可以表示得很简单、准确而且运算速度快”呢?

答:计算机内部用定点表示整型数,而用浮点表示实型数。浮点数比定点数增加了阶的部分,并且运算时比定点运算增加了对阶、阶码运算以及规格化等操作,因而采用定点表示的整型数在机器内就显很简单、在允许范围内的数都是准确的而且运算速度快。通常其速度要快好几倍,比如DPS8/49机,其定点加法速度就比浮点的快4倍。所以若处理的数据是在允许的整型数范围内,就应采用整型数据,以提高解题速度。应该说这也是程序设计的技巧之一。

问:双精度数据的有效数位一定是单精度的两倍吗?

答:双精度数据的有效数位是单精度的两倍,粗略的说是可以的,但是并不准确。实际上双精度数据的有效数位是大于单精度的两倍的。这是因为机器内采用浮点数运算的缘故。浮点数可分为阶部和尾部两个部分。单精度浮点数在大中型机上通常由一个机器字表示,如下图左,而双精度浮点数由两个机器字表示,如下图右。一个数的精确度由尾数的位数决定,尾数位越多,精确度越高。显然,双精度浮点数的尾数位数大于单精度浮点数尾数位数的两倍,因而双精度数据的有效数位就大于单精度的两倍。例如,IBM系统,其字长32位,其中阶码7位,尾数23位,其余两位为阶符和尾符。它能精确表示的最大数值是2\(^{23}\)-1=8388607,即在任何情况下,其精确度都可保证6位数字(或粗略说是7位),而若采用双精度,则尾数位增加一个字长的位数(32位),变成55位,此时其精度就可达16位数字。又如DPS8系统,其字长36位,尾数27位,它能精确表示的数是227-1=134217727,所以其单精度可确保8位,其双精度则为18位。

图1
图1 🔍原图 (819×316)

问:变量名字符一定最多为6个字符吗?

答:按照标准FORTRAN77的规定,变量名确是最多为6个字符,超过6个字符的变量名都是不容许的,且在运行程序时编译系统将会给你出错的信息。但是有的系统是对标准FORTRAN77作了扩充,所以其所容许的变量名字符数可以超过6个字符。比如DPS8系统上的FORTRAN77,其变量名就可以有8个字符。

问:变量和存储单元之间有什么关系?

答:当你在程序中定义了变量以后,运行时编译程序就相应地分配存储单元给你存放该变量值。一个整型变量或一个实型变量通常都对应一个存储单元,一个双精度变量则对应两个存储单元。一个程序的质量是否好,衡量标准之一就是要求其占用内存空间尽量小。所以在满足精度的条件下,程序设计者应尽量不使用双精度变量,以节省内存,而且一般说也会随之提高运行速度。

变量是除常数外最常用的数据表现形式,变量是具有名字和类型的实体。变量的命名遵循符号名的命名规则。编译程序按照变量名给变量分配存储单元以存放数值,变量的数值是可以改变的。变量类型的说明有三种不同的方式:I-N规则隐含说明、IMPLICIT语句隐含说明和类型语句显式说明,I-N规则只适用于说明整型与实型变量。(邓自立 黄庙由 唐兆衡)