Fortran短序设计基础 127 EX0301.FOR 1.c FIXED FORMAT DEMO 2. program main 3. write(*,)'Hello' 4, write(,) 5. 1·He11o' 6.100 write(*,*)He110 7.10 stop end 先不需要去了解这个程序在写什么东西,这里只是作版面格式的介绍。第!行的第1 个字符是C,这一行的文本会被当成批注。 读者可以注意到,每一行程序代码的最前面,最少都会留有6个字段。因为前6个字 段不能用来作为程序代码。 第4、5行事实上是把第3行程序拆成两半的结果,第5行的第6个字符是一个非“0” 的字符,所以第5行会被当成是连接在第4行后面。 第6、7行的最前面都有一个数字,这个数字用来给第6、7行各取一个代码。行代码 可以是任何数字,只要数值大小在5位数范围内即可。这个数字纯粹是用来给定一个代码, 不需要和程序代码的执行先后顺序有关系:例如该程序第6行的代码就比第7行的代码大, 却先执行。 程序代码命令之间的空格,不会有任何意义,举例来说: RITE(*,*)·He11o WRITE() Hel1o 上面的两行程序代码,WRITE命令跟后面的‘Ho'字符串间插入了不同数目的空格 不过这两行程序代码的含义是相同的,因为空格在程序代码命令间没有意义。 Fixed Format是为了配合早期使用穿孔卡片输入程序所发明的格式,现在都应该使用 Free Format来编写程序。早期的计算机,还没有使用显示器作为输出设备,不能像现在 样直接利用键盘来修改程序。早期的程序是利用穿孔卡片一张一张地记录下来,再让计算 机来执行(如图3.1所示) 9944 4地94322 图3.1 早期Fortran程序的模样,程序代码记录在穿孔卡片上
28 第3* 随着穿孔卡片的淘汰,Fixed Format也没有必要再继续使用下去。不过读者还是需要知 道Fixed Format的使用规划,内为现在仍然可以找到很多使用这种格式米编写的识程序。 3-2-2 Free Format(自由格式) Free Format基本上允许非常自由的编写格式,它没有规定每一行的第几个字符有仆么 作用。需要注意的事项只有以下儿点: 〔1)叹号“:”后面的文本都是注释 (2)每行可以编写132个字符。 (3)行号放在每行程序的最前面。 (4)-行程序代妈的最后如果是符号&,代表下一行程序会和这-行连接。如果一行 程序代码的开头是符号&,代表它会和上一行程序连接。 下面是个Free Format格式的编写实例: EX0302.F90 1.!Free Format 2.program main 3.write(*,*)"Hel1o"!这也是注释 4.write(,*)& 5."He11o" 6.wrig 7.五te(*,*)nHe11o 8.end 读者可以发现Free Format已经不需要在每一行前面都留空格。这里第l、3行中都有注 释,第」行整行都是注释,第3行只有叹号后的部分是注释。第4行的最后是连接符号&, 所以第5行会连接在它厅面。第6、7行是另一种连接方法。第6行最后与第7行最前面都 是连接符,它把wte命令分成了两半。这并不是·个很好的编写风格,不过在语法上是允 许的。 Free Format中的空格同样无意义,纯粹用来作为分隔及方便阅读程序代码使用。 3-3 Fortran的数据类型 数据类型是指使用Fortran在计算机内存中记录文本、数值等数据的最小单位及方法。 1,整数(NTEGER 整数的类型又分两种、长整型与短整型。在个人计算机中长整型占用32bits(4 bytes)》 的空间,长整型可以保存的数值范国在-2147483648~+2147483647之间(也就是在-21+1~ 21之间,而短整型占用16bis(2 bytes)的空间,保存的数值范围在-32768~+32767之间 (就是-25+1-25之间.有的编译器还可以提供一种更短的整数类型,只占8bis(1 bytes) 的空间,可以保存-128+127之间的整数
Fortran鞋序设计兼陆 29 2.浮点数(REAL) 浮点数也有两种类型,单精度及双精度.单精度浮点数在个人计算机中占用32bs(4 byts)的空间,有效位数为6~7位.可记录的最大数值为±3.4*10,最小数值为±1.18*108 双精度会占用64bis(8 bytes入有效位数为15~16位.可记录的最大数值为±1.79*10, 最小数值为±2.23*1030. 3.复数(COMPLEX) 就是以+bi的形式来表示的数值,复数中的a、b值其实是由两个浮点数来做记录, 所以复数同样也有两种类型,单精度复数及双精度复数。 4.字符(CHARACTER) 计算机除了存储数字之外,也可以在内存中记录一段文本,字符类型可以记录的东西 非常广,从使盘输入的任何东西,不论是数字、文本或任何特珠符号,它都可以记录。附 录B的ASCI字符表就是这个类型所能记录的所有字符.只记录一个字母、符号时的数据 类型称为“字将”,记录一连串的宇符时,就称为“宇符串”。记承一个字符需要一个字节 的存储空间,记录n个字符长度的字符串则需要个字节的存储空间 5.逻辑判断(LOGICAL) 辽样判断只能保存两种逻样站果,分别为“是”(TRUE)和“否”(ALSE)。也可以 翻译成“对”、“错”,或是“真”、“假”等等.在二进制中,通常以1代表TRUE,0代表FALSE. 程产代码中要清楚地指出每种数据所要存储的格式。不同种类的数据蓄要经过转换才能 互通,因为它们可能是使用不同方法来存储的。就以整数和浮点数来说,整数是很单纯地以 二进制来存储数字(见图3.2、图3.3)。浮点数和整数的不同在于浮点数可以存储带有小数的 实数,浮点数会把数字转换成以二进制的指数方法来表示,并把数字分成指数部分和小数部 分来做记录(见图3.4、图3.5)。 0.5=5.0*101(十进制的指数方法)=1.0*2(二进制的指教方法). 0.5这个数值会被分成二进制的数值部分1.0,跟指教部分-1来记录. Visual Fortran安装好后,默认的安装目录C:Program Files Microsoft Visual StudioDV98bin 下有一个BITVIEWER的程序可以用来表看各种数据格式实际在内存中的二进制数据。图3.2 图3.5最下面那一排的红绿色部分数字,就是使用二进制方法保存数据的实际内容。 Biyever-sined 回☒ Options Do Type Help Yalue: 08080801 ≤2s1sp 2X000水OKK元 整数格式下,数字直楼使用二 进制来记录 图3.2
30 第3章 Yalue:3 之1聊 美I▣ 处数格式下,十进制的3直接 用二进制的1】来表示 图33 e ■ 0300 泽表格 e中的F月oat-Poin 图34 16x Yalue:3 之s1Bp IC0OOIKACINCSCOOISKOOKS 在Vue框中喻入3,发现浮 流载实际记录的方法和整数相 图35 读者不需要实际了解每个数值真正会被记录的格式,只需要知道上面所介绍的整数、 浮点数、字符、逻辑这四种数据会使用不同的方法来记录就行了,不同数据间没有经过转 换前不能混用。 再举一个例子,假如现在需要记录15243这个数字,使用整数来记录的话,会把15243 转换成二进制的10111110011保存在内存中。它可以用短整型(2 bytes)或长整型(4 bytes) 来记录。使用字符串来记录的话,需要分别去记录“1”、“5”、“2”、“4”、“3”,这5个字 符,需要5 bytes来记录。而每个byte会存放的内容以十进制数字来表示,分别是49、53、 50、52、51,也就是这5个字符的ASCI码,请参照附录B的表格,使用字符串来记录数 字时,不能直接把它们拿来做加减乘除的运算,要把字符串先转换成整数或浮点数等等的 数值类型后才能拿来计算。 如何配置内存的空间,以存放不同种类的数据是程序员的责任
Fortran殖序设计基础 31 3-4 Fortran的数学表达式 用Fortran来编写数学表达式的规则和方法都很“直观化”,和在纸上做四则运算只有 一点点的差别。Fortran所使用的数学运算符号,根据运算优先级顺序排行如下: 加法 减法 米 乘法/除法 乘幂(两个星号要连铁) ()括号(表示括号起来的部分优先计算) 越是下面的符号,运算优先级越高,所以算式中会先计算乘除,后计算加减。在程序 中编写表达式和手写的差别主要有三点: (1)乘幂要连用两个星号,不能像手写的时候只要把数字写成上标就行了,例如22必 须写成2*2。 (2)乘号不能省略,手写的算式中(A+B)(C+D)和(A+B)*(C+D)是一样的, 但写程序时只容许第2种写法,所以像2*A也不能写成2A。 (3)除法用计算机编写时没有下面的表示方法: (A+B)*(C+D) 2*(E+F) 这个算式一定要写成(A+B)*(C+D)/(2*(E+F)的形式才行。 3-5 Fortran简史 Fortran的起源,要追湖到1954年BM公司的一项计划。由John Backus领导的一个小 组,尝试着在BM704计算机上开发一套程序,它可以把使用接近数学语言的文本翻译成 机械语言。这个计划在刚开始并不被大家看好,但他们在1957年交出了成果,也就是第 套Fortran编译器,Fortran语言也就因此诞生了。Fortran语言的运行效率普遗令各界满意, 它证明了这项计划的可行性,也成为第一个被广泛使用的高级语言。Fortran的名字来自英 文的Formula Translator,,即数学公式翻译器的意思。 Fotn问世后,计算机语言进入高级语言时代。高级语言比较容易维护,也更容易移 植到不同的机器上.。在20世纪60年代,Fortran是世界上最通用的计算机语言,有很多软 件公司在市面上推出自己的编译程序。竞争之下,各家厂商为了强调自己产品的功能,都 在原本的Fortran语言之外添加了一些自己发明的独门语法,这也让Fortran语言衍生出许多 方言,这些方言导致Fortran语言移植困难。A牌编译器所能编译的Fortran程序代码常常不 能使用B牌编译器来编详,鉴于如此,美国国家标准局的前身,(当时叫做American Standard: Association,后来改为American National Standards Institute,缩写成ANSI)在I966年制订 了Fortran语言的统一标准,供各家软件厂商遵循,这套标准后来被称为Fortran66, Fortran66标准制订后,程序语言的理论又另有创新,计算机硬件也随着时间在进步。 因需要,在1977年又制订了新的Poan语言标准,1978年由美国园家标准局(ANSI)正