您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 设计及方案 > Fortran输入输出格式控制
Open,ReadandWriteinFortran1:write(*,*)string;write(unit=*,FMT=*)string;write(unit=6,FMT=*)string。以上等价,6是默认输出位置,即屏幕。2:print*,string。Print只能对屏幕输出。3:integer(kind=4)a!f90;integer*4a!f77;integer(4)a!f77。以上等价。real(kind=4)a!f90;real*4a!f77;real(4)a!f77。以上等价。4:f77,变量名长度1~6;f90,变量名长度1~31。5:read(*,*)string;write(unit=*,FMT=*)string;write(unit=5,FMT=*)string。以上等价,5是默认输入位置,即键盘。6:FORMAT()6.1格式输出格式输出语句由两部分组成:输出语句和输出格式语句。输出语句的一般形式为:WRITE(*,L)输出表列或:PRINTL输出表列其中:*代表隐含的输出设备,L指输出格式语句的标号。输出格式语句的一般形式:LFORMAT(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,N100FORMAT(1X,I4,I4)如果M=40,N=-12,则输出如下:??40?-12例2:WRITE(*,100)I,J,K100FORMAT(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.dw各数值占的总位数d输出数据的小数位数(小数点后的位数)。例1:WRITE(*,100)A,B,C100FORMAT(1X,F10.2,F9.3,F8.4)若A=1234.56,B=3456.78,C=234.56789则输出:???1234.56?3456.780234.5679例2:WRITE(*,100)X,Y100FORMAT(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.dw各数值占的总位数,d输出数据的小数位数(小数点后的位数)。例1:WRITE(*,100)X,Y100FORMAT(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,J100FORMAT(1X,'I=',I3,'J=',I4)如果I=123,J=2347,则输出:I=123J=2347如果需要输出的字符包括撇号,则用两个连续的撇号代表一个被输出的撇号字符。例如:CHARACTER*10STUDREAD*STUDWRITE(*,10)STUD10FORMAT(1X,A,'ISLI''SSTUDENT.')END如果输入给STUD的值为‗ZHANGSUN‘,则输出为:ZHANGSUNISLI'SSTUDENT.6.1.9H格式一般形式:nH字符串用来输出字符常量,与撇号格式相似。n为字符串中字符的个数。如上面的例子(I=123,J=2347),可改写为:WRITE(*,100)I,J100FORMAT(1X,2HI=,I3,2HJ=,I4)则输出与上例相同:I=123J=2347可以单独用撇号格式或H格式输出字符串而不必要求WRITE语句中有相应的输出项。如:WRITE(*,100)100FORMAT(1X,'ZHANGSUNISLI''SSTUDENT.')或:100FORMAT(1X,26HZHANGSUNISLI'SSTUDENT.)用H格式必须准确地数出字符串中的字符个数,数错了就会造成错误。所以最好不用H编辑符而用撇号编辑符,后者不必数字符,使用方便,字符串界线清楚无误。FORTRAN77之所以保留H编辑符主要是为了与FORTRAN66兼容(FORTRAN66只能用H编辑符输出字符串而没有撇号编辑符)。6.1.10X格式一般形式:nX用于输出空格,n输出的空格数目。即插入n个空格,或者说,使打印的―当前位置‖向右移动n列。例:WRITE(*,100)I,A,B100FORMAT(1X,I3,2X,F6.2,2X,E11.5)当I=146,A=124.32,B=1247.32时,输出为:146124.320.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,B100FORMAT(1X,I3,F6.1/1X,I3,F6.1)若I=246,A=12.36,J=35,B=173.5,输出结果为:24612.435173.5一个WRITE语句输出打印了二行信息,这是由于FORMAT语句中有一斜杠,使之产生两个输出记录(注意,斜杠之后也有一个―1X‖,使第二个记录的第一个字符为―空格‖,作为纵向走纸符)。如果有两个连续的斜杠,如:100FORMAT(1X,I3,F6.1//1X,I3,F6.1)输出完第一行后,空一行,再输出第二行。即:24612.4(空一行)35173.5如果在编辑符的最后出现斜杠,如:100FORMAT(1X,I3,F6.1/1X,I3,F6.1/)输出完第二个记录后,再输出一个空行。即:24612.435173.5(空一行)6.1.12重复系数重复使用的编辑符可以在其前加一个重复系数,其形式为:rIw,rFw.d,rEw.d,rGw.d,rAw,rLw等,r为重复系数。以下两个FORMAT语句等价:100FORMAT(1X,I3,I3,F10.2,F10.2,F10.2)100FORMAT(1X,2I3,3F10.2)如果有以下FORMAT语句:150FORMAT(1X,I4,2X,F10.2,2X,I4,2X,F10.2,2X)其中下划线的二组编辑符是相同的,可以只写一次而用重复系数使之重复使用:150FORMAT(1X,2(I4,2X,F10.2,2X))6.1.13纵向走纸控制如果需要本行的输出是换一行从头开始打印的话,就应该在本行的开头设置一个空格。―1X‖的本来意义是产生一个空格,但按规定,将输出记录的第一个字符作为纵向走纸控制之用,它产生的动作是―走纸一行‖。因此,FORMAT语句中的第一项―1X‖的作用是―纵向走纸控制‖。(1)打印输出一行后不会自动换行,―打印的当前位置‖(即指针)停在本行输出的最后一个字符后面。(2)只要输出记录的第一个字符是空格,就可使走纸一行。因此也可以不采用―1X‖而用‗‘(即空格)也可达到同样的目的。(3)如果不预先在输出记录的第一个字符处设一空格,则系统会将输出的第一个字符作为走纸控制符,从而使本来想打印的内容缺少了一个字
本文标题:Fortran输入输出格式控制
链接地址:https://www.777doc.com/doc-3520882 .html