Fortran输入输出格式控制Word文档下载推荐.docx
《Fortran输入输出格式控制Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《Fortran输入输出格式控制Word文档下载推荐.docx(14页珍藏版)》请在冰豆网上搜索。
6.1格式输出
格式输出语句由两部分组成:
输出语句和输出格式语句。
输出语句的一般形式为:
WRITE(*,L)输出表列或:
PRINTL输出表列
其中:
*代表隐含的输出设备,L指输出格式语句的标号。
输出格式语句的一般形式:
L
FORMAT(1X,S)
L输出格式语句的标号,1X纵向走纸符,S输出格式,用不同的“格式编辑符”(简称“编辑符”)来实现指定的输出格式,各格式间用逗号相隔。
FORMAT语句又叫“格式语句”,是一个非执行语句,本身不产生任何操作,只是提供输入或输出的格式。
FORMAT语句可以出现在程序的任何地方(但必须在PROGRAM语句之后和END语句之前,如果在子程序中用FORMAT语句,则应在子程序定义语句之后)。
系统按WRITE语句或PRINT语句中指定的语句标号找到相应的FORMAT语句,并按FORMAT语句所规定的格式对数据进行输出。
注意,PRINT语句中不能再用“*”,PRINT语句中的第一个标识符是语句标号而不是要打印输出的数据。
输出格式分两类基本格式
6.1.1I格式(又叫整数格式)
一般形式:
Iw或:
Iw.m
w一个数据占的位数宽度(又称“字段宽度”),m需要输出的最少数字位数。
例1:
WRITE(*,100)M,N
100
FORMAT(1X,I4,I4)
如果M=40,N=-12,则输出如下:
?
40?
-12
例2:
WRITE(*,100)I,J,K
FORMAT(1X,I5.3,I6.3,I4)
若I=1234,J=-24,K=24689则输出为:
1234?
-24****
(1)数字在指定的区域内向右端靠齐,如果数字位数比指定的字段宽度w小,则左边补以空格。
负数的符号也包含在字段宽度内。
(2)如果数字位数超过了规定的字段宽度w,则不输出有效数据,而在该字段宽度范围内充满“*”符号。
(3)如果数字位数超过了m,则按实际应输出的位数输出(但条件是不能超过w)。
m不包括负号所占的一列。
6.1.2F格式(又叫小数型格式)
一般形式:
Fw.d
w各数值占的总位数d输出数据的小数位数(小数点后的位数)。
例1:
WRITE(*,100)A,B,C
100FORMAT(1X,F10.2,F9.3,F8.4)
若A=1234.56,B=3456.78,C=234.56789则输出:
1234.56?
3456.780234.5679
WRITE(*,100)X,Y
100FORMAT(1X,F10.4,F10.2)
若X=24680135.7,Y=0.0012345,则输出为:
**********?
.00
(1)数字在指定区域内向右端靠齐,如果数字位数(含小数点和符号位)比指定的字段宽度w小,则左边补以空格;
如果数字的位数超过了规定的字段宽度w,则不输出有效数据,而在该字段宽度范围内充满“*”符号。
(2)如果数据的小数位数比指定的小数位数d小,则在小数右边补0以凑足d位;
如果小数位数大于d位,则输出时多于的小数位数按“四舍五入”规则舍去。
(3)假设b为数据整数部分的位数,则应使w≥b+d+1(小数点占一列),如果输出负数,则应保证w≥b+d+2(小数点和负号各占一列)。
(4)用F格式输出时应注意,由于难以事先确切估计出数据的大小,输出大的数时容易产生“宽度不够”的错误(由于w不够大),输出小的数时会出现丢掉有用数字的情况(由于d不够大而将后面的数字截去),这就是“大数印错,小数印丢”。
6.1.3E格式(又叫指数型格式)
w.d
w各数值占的总位数,d输出数据的小数位数(小数点后的位数)。
WRITE(*,100)X,Y
FORMAT(1X,E12.4,E12.5)
如:
X=3.17Y=1234.56则输出结果为:
0.3170E+01?
0.12346E+04。
(1)采取标准化的指数形式输出一个实数,d为以指数形式出现的数据的数字部分的小数位数。
(2)指数部分一般占4列,其中字母“E”和指数的符号各占一列,指数2列。
小数部分d列,再加上一个小数点和小数点前的一个“0”,因此要保证w≥d+6,输出负数时,w≥d+7。
(3)有的计算机系统允许有较大的实数范围,FORTRAN77提供了一种扩充的编辑符,可以输出三位或四位指数。
这种编辑符的形式为:
Ew.dEe,用e指定指数的位数。
有的计算机系统的FORTRAN编译系统已根据其允许的实数范围,自动将指数的位数改为3位或4位,不必在RORMAT语句中用Ew.dEe编辑符单独为某些数据指定所需的指数位数,只需写Ew.d形式即可,输出时系统会给出三位(或四位)指数。
6.1.4G格式
G格式可以根据输出的实数大小决定用小数形式(F格式)输出或指数形式(E格式)输出。
当输出大数值或小数值时自动按E格式,当输出的数不大不小时用F格式。
其一般形式为:
Gw.d
(1)凡绝对值小于0.1的数或绝对值大于10d的数用E格式输出;
其余的数用F格式输出。
(2)用E格式输出时,最后4列为指数部分,而用F格式输出时最后4列留空。
(3)用指数形式输出时,格式同Ew.d;
用F格式输出时,不是按Fw.d形式输出,d规定的不是小数位数而是打印出来的全部数字的位数,小数位数根据数值大小和d的大小而定,这样做的目的是使数的整数部分能全部保留,而适当截去小数部分,以保证输出数值的正确性。
因为小于10d的数,其整数部分最多为d位,因此,可以全部输出这d位整数,小数的位数为:
d-(数值整数位数)。
6.1.5D格式
Dw.a
用于双精度数据的输出,使用方法与E格式相仿,只是把字母“E”换成“D”。
6.1.6L格式
Lw
用于逻辑型数据的输出,w输出数据的字段宽度。
逻辑值“.TRUE."
,在输出时打印一个字母T;
逻辑值"
.FLASE."
,在输出时打印一个字母F。
T和F打印在字段范围内的最右端。
6.1.7A格式
Aw或:
A
用于字符型数据的输出,w为字段宽度,不指定w时(即形式:
A),按字符变量的实际长度(即程序定义该变量时的长度)输出。
字符串在指定的区域内向右端靠齐,如果字符串的位数比指定的字段宽度w小,则左边补以空格;
如果字符串的位数超过了规定的字段宽度w,则只输出最左面的w个字符。
6.1.8‘(撇号)格式
用来插入所需的字符串,例如:
WRITE(*,100)I,J
FORMAT(1X,'
I='
I3,'
J='
I4)
如果I=123,J=2347,则输出:
I=123J=2347
如果需要输出的字符包括撇号,则用两个连续的撇号代表一个被输出的撇号字符。
例如:
CHARACTER*10STUD
READ*STUD
WRITE(*,10)STUD
10
FORMAT(1X,A,'
ISLI'
'
SSTUDENT.'
)
END
如果输入给STUD的值为‘ZHANGSUN’,则输出为:
ZHANGSUNISLI'
SSTUDENT.
6.1.9H格式
nH<
字符串>
用来输出字符常量,与撇号格式相似。
n为字符串中字符的个数。
如上面的例子(I=123,J=2347),可改写为:
FORMAT(1X,2HI=,I3,2HJ=,I4)
则输出与上例相同:
可以单独用撇号格式或H格式输出字符串而不必要求WRITE语句中有相应的输出项。
WRITE(*,100)
100
或:
FORMAT(1X,26HZHANGSUNISLI'
SSTUDENT.)
用H格式必须准确地数出字符串中的字符个数,数错了就会造成错误。
所以最好不用H编辑符而用撇号编辑符,后者不必数字符,使用方便,字符串界线清楚无误。
FORTRAN77之所以保留H编辑符主要是为了与FORTRAN66兼容(FORTRAN66只能用H编辑符输出字符串而没有撇号编辑符)。
6.1.10X格式
nX
用于输出空格,n输出的空格数目。
即插入n个空格,或者说,使打印的“当前位置”向右移动n列。
例:
WRITE(*,100)I,A,B
FORMAT(1X,I3,2X,F6.2,2X,E11.5)
当I=146,A=124.32,B=1247.32时,输出为:
146
124.32
0.12473E+04
如果不用X格式插入空格,数据将连成一片,难以区分开。
注意:
不要把2X作为与A对应的格式符,WRITE语句中的I,A,B分别与FORMAT语句中的I3,F6.2和E11.5格式符对应。
X格式符不能用来提供整数、实数、以及其它类型数据的输出格式,它只能插入若干个空格。
FORTRAN77还允许n是负整数,表示从当前位置向左移动n的绝对值列。
微机上使用的FORTRAN子集不能使用n为负值的格式符。
6.1.11/(斜杠)格式
斜杠(/)编辑符的作用是:
结束本记录的输出并开始下一个记录的输出。
WRITE(*,100)I,A,J,B
FORMAT(1X,I3,F6.1/1X,I3,F6.1)
若I=246,A=12.36,J=35,B=173.5,输出结果为:
246
12.4
35173.5
一个WRITE语句输出打印了二行信息,这是由于FORMAT语句中有一斜杠,使之产生两个输出记录(注意,斜杠之后也有一个“1X”,使第二个记录的第一个字符为“空格”,作为纵向走纸符)。
如果有两个连续的斜杠,如:
FORMAT(1X,I3,F6.1//1X,I3,F6.1)
输出完第一行后,空一行,再输出第二行。
即:
(空一行)
如果在编辑符的最后出现斜杠,如:
FORMAT(1X,I3,F6.1/1X,I3,F6.1/)
输出完第二个记录后,再输出一个空行。
(空一行)
6.1.12重复系数
重复使用的编辑符可以在其前加一个重复系数,其形式为:
rIw,rFw.d,rEw.d,rGw.d,rAw,rLw等,r为重复系数。
以下两个FORMAT语句等价:
FORMAT(1X,I3,I3,F10.2,F10.2,F10.2)
FORMAT(1X,2I3,3F10.2)
如果有以下FORMAT语句:
150
FORMAT(1X,I4,2X,F10.2,2X,I4,2X,F10.2,2X)
其中下划线的二组编辑符是相同的,可以只写一次而用重复系数使之重复使用:
FORMAT(1X,2(I4,2X,F10.2,2X))
6.1.13纵向走纸控制
如果需要本行的输出是换一行从头开始打印的话,就应该在本行的开头设置一个空格。
“1X”的本来意义是产生一个空格,但按规定,将输出记录的第一个字符作为纵向走纸控制之用,它产生的动作是“走纸一行”。
因此,FORMAT语句中的第一项“1X”的作用是“纵向走纸控制”。
(1)打印输出一行后不会自动换行,“打印的当前位置”(即指针)停在本行输出的最后一个字符后面。
(2)只要输出记录的第一个字符是空格,就可使走纸一行。
因此也可以不采用“1X”而用‘’(即空格)也可达到同样的目的。
(3)如果不预先在输出记录的第一个字符处设一空格,则系统会将输出的第一个字符作为走纸控制符,从而使本来想打印的内容缺少了一个字符。
(4)如果走纸控制符为“+”表示不换行,在本行睛再叠印一行新的内容。
6.1.14WRITE语句与FORMAT语句的相互作用
输出记录的内容是同WRITE语句和FORMAT语句共同决定的。
WRITE语句提供变量值,FORMAT语句提供字符串、空格、以及数据输出的格式。
FORMAT语句中括弧内的内容称为“格式说明”。
对这两个语句相互关系说明如下:
(1)WRITE语句中的变量个数与FORMAT语句中的I,F,E,G,D,L,A编辑符的个数可以相等也可以不等。
如果变量个数少于上述编辑符个数,则多余的编辑符不起作用。
(注意,上述编辑符不包括X编辑符、H编辑符、撇号编辑符,下同)。
在执行格式控制时,对WRITE语句的变量表列和FORMAT语句中的格式说明同时扫描,一一对应。
当变量表列结束,而FORMAT语句扫描到一个上述的编辑符,则扫描继续下去,直到遇到非X、非H、非撇号编辑符为止。
(2)如果变量个数多于格式说明中的编辑符个数,即WRITE语句中的变量表列中还有未输出的元素,而格式说明中编辑符已用完,则重新使用该格式说明,但产生一个新记录。
(3)如果在格式说明中包含有重复使用的编辑符组,则当格式说明用完后再重新使用时,只有最右面的一个编辑符组(包括其重复系数)和它右面的编辑符被重复使用。
(4)如果有输出量,但格式说明中无相应的编辑符,则输出永不停止。
因此,如果WRITE语句中有一个或一个以上的输出变量的话,则格式说明中至少应该有一个非X、非H(或撇号)的相应的编辑符。
(5)在扫描过程中,格式说明中的各编辑符(指I,F,E,G,A,L)都要有相应的变量才能组织输出,而X、H、撇号、斜杠等编辑符不需要有相应的输出变量而直接进行输出。
(6)可以有“空格式说明”,如FORMAT(),用来输出一个空行。
此时WRITE语句中不应有任何输出量。
(7)遇格式说明的右括号(即最后面一外括号)或斜杠“/”时,结束本记录的输出,但不意味停止全部输出。
只要输出表列中还有未输出的量,将重复使用格式说明或按斜杠右面的格式说明组织输出。
右括号的作用与斜杠有一点不同:
当扫描到右括弧而输出表列中已无输出变量时,输出即告结束。
而斜杠只表示结束本行输出,即使此时已列输出变量要输出,输出并未停止,它会重新开始一个新记录,直到遇到右括号或非X、H、撇号编辑符为止。
(8)FORMAT语句可以与WRITE语句相邻,也可以放在程序任何地方(在PROGRAM语句或子程序语句之后,END语句之前),习惯上将程序中全部FORMAT语句集中放在最前或最后,并给FORMAT语句以较大的标号(一般执行语句E和小标号,FORMAT语句用大标号,如100以上或者说1000以上),以使程序清晰。
(9)用表控格式输出时,在WRITE语句中的输出项中可包含字符串,但如果在输出时用到FORMAT语句,则WRITE语句中不能再包含输出的字符串。
格式输出时,如需输出字符串,应在格式说明中设置。
7:
OPEN语句(
OPEN语句用于把设备号与文件名连接起来,并且对文件的各项性质进行指定。
它的一般形式为:
OPEN([UNIT=]unit[,ACCESS=access][,ACTION=action][,BLANK=blanks][,BLOCKSIZE=blocksize][,CARRIAGECONTROL=carriagecontrol][,DELIM=delim][,ERR=err][,FILE=file][,FORM=form][,IOFOCUS=iofocus][,IOSTAT=iostat][,PAD=pad][,POSITION=position][,RECL=recl][,SHARE=share][,STATUS=status])
其中的各项参数的意义及取值如下:
1)UNIT:
设备号说明。
unit是大于或等于0的正整数,设备号说明是OPEN语句的第—项时可以省略“UNIT=”。
2)ACCESS:
存取方式说明。
access是字符串表达式:
APPEND
追加方式
SEQUENTIAL顺序访问方式
DIRECT
直接访问方式
当省略此说明项时为顺序访问方式。
3)ACTION:
描述文件的读写属性。
action是字符串表达式:
READ
文件为只读方式打开
WRITE
文件为只写方式打开
READWRITE
文件为可读写方式打开
当省略此说明项时,文件打开顺序:
READWRITE->
READ->
WRITE。
4)BLANK:
说明数据格式输入字段中空格的含义。
blank是字符串表达式:
NULL
空格忽略不计,相当于在格式描述符中的BN编辑符
ZERO
空格处理成数字0,相当于BZ编辑符
当省略此说明项时为ZERO。
此说明只能用于格式输入。
5)BLOCKSIZE:
指定以字节为单位的设备缓存的大小,默认值为一4字节整数。
6)CARRIAGECONTROL:
指明处理文件中的第一个字符的方式,其值为字符串表达式:
Fortran
对第一个字符作一般的Fortran解释
LIST
指出在文件的每两个记录之间有—个空格
默认状态下,对于连接到打印机和显示器这样的设备,设置值为Fortran,对于连接到文件的设备,设置值为LIST。
当FORM被设成UNFORMATTED和BINARY时,其值被忽略。
7)DELIM:
指明分隔直接列表或格式化名称列表记录的方式,其值为字符串表达式:
APOSTROPHE用单撇号(’)分隔
QUOTE
用双撇号(”)分隔
NONE
不用分隔符
如果在OPEN语句中设置了分隔符,则在文件中的单撇号和双撇号都是成对出现的。
8)ERR:
出错处理说明。
其值是同一程序中的一条语句的标号,当OPEN语句执行出错时执行此语句。
如果省略该项,则出错时给出出错信息并终止运行。
9)FILE:
文件名。
file是一字符串表达式,可以是空、合法的数据文件名字、设备名字或是作为内部文件的变量。
在WinNT/9x中允许使用长度大于8的文件名和长度大于3的文件扩展名。
省略此项时,编译器将自动产生一个文件名唯一的临时文件,这个临时文件将在结束运行或与文件连接的设备关闭后被删除掉。
10)FORM:
记录格式说明。
form是字符串表达式:
FORMATTED
记录按有格式存放。
UNFORMATTED
记录按无格式存放。
当省略此说明项时为:
对顺序文件是有格式的;
对直接文件是无格式的。
11)IOFUS:
指出一个新Quickwin子窗口是否为活动窗口,其值为逻辑值。
缺省值为真。
12)IOSTAT:
出错状态说明。
iostat是—个缺省长度为4的整形变量。
当执行此OPEN语句时系统给变量赋值:
零
没有发生错误
负数
文件结尾
正数
发生错误,其值视具体计算机系统而定
若省略该项则没有此功能。
13)PAD:
从格式化文件中记录的数据少于要读取的数据时,是否用空格来填充没有从记录中读到数据的变量。
pad是字符串表达式:
YES
填充(默认值)
NO
不填充
14)POSITION:
指定打开顺序文件的访问位置,position是字符串表达式:
ASIA
已被连接的文件的访问位置是固定的,未被连接的文件的访问位置是文件的开始处。
REWIND
把文件的访问位置定在文件的开始处(文件己存在)。
把文件的访问位置定在文件的末尾处(文件己存在)。
对于一个新文件,文件的访问位置总是被定在文件的开始处。
15)RECL:
记录长度(单位为字节)说明。
recl是指定的正整型量或算术表达式,用来指定直接文件中的每条记录的字节数,或顺序文件中的记录的最大长度。
16)SHARE:
指明当文件打开时是否实现文件的锁定。
share是字符串表达式:
DENYRW
动态读写模式。
不允许其他的进程打开这个文件。
DENYWR
动态写模式。
不允许其他的进程以写的方式打开这个文件。
DENYRD
动态读模式。
不允许其他的进程以读的方式打开这个文件。
DENYNONE
默认的非动态模式。
允许其他的进程打开这个文件。
17)STATUS:
文件状态说明。
status是字符串表达式:
OLD
表示指定的文件是已经存在的老文件。
这一状态一般用于读操作,如果用于写操作则重写文件,原文件内容将被覆盖。
如果指定的文件并不存在,则系统将给出出错信息。
NEW
表示指定的文件尚不存在。
执行OPEN语句时将在磁盘上建立该文件并使其状态改变为OLD。
NEW状态一般用于写操作。
如果指定的文件名已经存在将给出出错信息(有的系统不给出信息而是把这个已经存在的文件冲掉使原来的内容不复存在)。
SCRATCH
表示与设备号相连接的文件在关闭时将被自动删除。
此状态不能与FILE说明共存,只能用于由计算机系统指定的文件名,使该文件作为程序运行过程中的一个临时性文件。
REPLACE
表示替换一个有相同名字的文件,如果没有同名的文件存在,将产生一个新文件。
UNKNOWN
表示文件可以是已存在的或不存在的。
系统打开文件状态的次序为:
OLO->
NEW->
创建新文件。
STATUS的设置值只影响磁盘文件,像键盘和显示器这样的设备将忽略这一设置。
若省略该项时默认的状态为UNKNOWN。
8:
read
8.1