
FORTRAN90第四章 格式输入输出.ppt
20页§4 格式输入输出,格式化输出/输入的具体格式由“格式说明”规定格式说明是由各种格式编辑符组成的字符串编辑符之间用逗号(,)分隔例:3X,I5,F8.3,L2,A,一个数据所占列数叫“字段宽度”,用w表示负数的符号也包含在字段宽度之内这里的W必须用整型常数,输出时,数据在w列内右对齐,若w列容纳不下,则用一串*表示“字段宽度不够”,该数据不再输出输入时,如果数据超过w列,则只截取输入数据的w列,因此,输入数据必须不超过w列在输入数值型数据时,w列内的空格不起作用,但是,在负数的负号后留空格会出错输入/输出数据时,要选择合适的w值输入时用READ,FORMAT语句READ(*,100)A,B,I,100 FORMAT(F6.3,F7.2,I5),输出时用WRITE,FORMAT语句WRITE(*,100)I,A,J,B100 FORMAT(1X,I4,F6.2,I5,F8.2),不同类型的数据必须用不同的编辑符,§4.1 格式编辑符,整型编辑符有:Iw[.n], Bw[.n], Ow[.n], Zw[.n]四种,分别对应十进制、二进制、八进制与十六进制整数 n只对输出有影响,表示至少有n位数字,不足时左边补0,,实型编辑符用 Fw.d ,Ew.d[Ee] 和 Gw.d ,其中d为小数位数。
小数部分按“四舍五入”或右边补0的办法保证总有d个数字F编辑符用于实数的小数形式,小数形式很直观,但很大或很小的数会给F格式带来麻烦 例: 实数3.14159 F8.3输出 3.142左边空3格输入 3142左边空4格,不要用小数点,因为F8.3已经说明右边三个数字是小数如果输入的数据带有小数点,则d不起作用.,说明:输入的数据行中空格按0处理,数据之间也不能用逗号等分隔符.,E编辑符用于实数的指数形式, 可以指定指数的位数例: -3.1415926 E15.5E3输出 -.31416E+001,说明:(1)如果不指定指数位数,则指数部分占四列.(2)数字部分按标准格式输出.即小数点前为0,小数点后第一位非 0.小数位数由d指定说明:用F,E编辑符输入时,它们的作用相同.例如:READ(*,100)A,B,C,D100 FORMAT(F8.3,E8.3,E8.3,F8.3)如果输入数据为:□□□0.234 □□□□□234 □234E+00 2.34E-01则A,B,C,D的值均为0.234,FORTRAN没有专门的复型格式编辑符对复数的输入/输出,用输入/输出两个实数(复数的实部和虚部)来实现。
例如:COMPLEX CREAD(*,100)C100 FORMAT(F12.4, F12.4),逻辑型格式编辑符用Lw,输出时只打印T或F,输入时只要是以T或F或.T或.F打头的字符串即可字符型格式编辑符用A或Aw,如果不指定w,则以字符变量定义长度L为准输出时,若w
Tn移动到第n列;TLn向左移动n列;TRn向右移动n列很显然,后两种移动是相对于当前位置的例如:READ(*,’(I4,TL3,I4)’)I, J当输入数据为12345678时,执行该语句后I=1234,J=2345,/编辑符表示:结束本记录的输入输出并开始下一个记录的输入输出例如:,,WRITE(*,’(1X,I3/1X,I4)’)I,J当I=123,J=4567时,输出为1234567,如果格式说明中有连续的相同的编辑符,可以用重复系数“合并同类项”例:FORMAT(1X,F8.3,F8.3,F8.3,F8.3)等价于FORMAT(1X,4F8.3)而FORMAT(1X,I2,E10.3,I2,E10.3)等价于FORMAT(1X,2(I2,E10.3)),输入/输出数据的类型必须与格式说明中相应的编辑符类型一致,如果不一致,程序就会出错,中断运行/编辑符、X编辑符、撇号编辑符可以穿插在类型编辑符之间例:输出I,A,B,K时,格式说明: I5,2F9.3,I4是可以的I5,‘A=‘,F9.3/4x,F9.2,I4也是可以的例:输出I,A,B,K时,格式说明:I5,2F9.3,A,I4是错的, E12.4,‘A=‘,I5,F9.3/4x,F9.2,I4也是错的。
组织好格式说明之后,可以结合READ语句进行输入,或者结合WRITE语句和PRINT语句实现输出方法之一就是用格式语句FORMAT,§4.2 格式输入输出,用法:WRITE(设备,标号S) 输出列表S FORMAT(格式说明),FORMAT语句是非执行语句可以放在END之前、程序语句后任何地方必须带语句标号语句标号是一个整数,是语句的标志,与语句之间至少有一个空格.,用法:PRINT 标号S, 输出列表S FORMAT(格式说明),用法:READ(输入设备,标号S) 输出列表S FORMAT(格式说明),例: WRITE(*,111) I,A111 FORMAT(4X,I2,3F5.2,’Out’,A5)222 FORMAT(4X,I2,F5.2,’Out’,A5) 格式说明中可以有多余的编辑符在第一个多余的类型编辑符之前的编辑符都有作用,其余的不起作用本例不输出Out,如果改用222的格式语句,就会输出Out,例:READ(*,11) I,A,K,B,N FORMAT(I5,F9.3) 格式说明中编辑符不够用,则另开一记录并从头引用格式说明。
这就可能引起死循环 本例数据要分三行例:WRITE(*,81) K FORMAT(1X,’Dead Loop’) 出现死循环,例: WRITE(*,111) I1,I2,I3,I4,I5,I6,I7, I8,I9,IA FORMAT(1X,2(I3,2X),2(I4, 2X), 2(I5,2X),I6) 格式说明中编辑符不够用,又有多个重复系数则另开一记录并从最后一个重复系数处引用格式本例输出两行,第二行按2(I5,2X),I6输出例如I1=11,I2=22,I3=33,I4=44, I5=55,I6=66,I7=77, I8=88,I9=99,IA=100则输出为:□11□□□22□□□□33□□□□44□□□□□55□□□□□66□□□□□□77□□88□□□□□99□□□□□100共输出两行.,多条输入/输出语句可以共用同一条FORMAT语句,只要合乎需要就行 可以把FORMAT后面括号连同格式说明一起当作一个字符串常量,作为输入输出语句的格式说明§4.3 插进输入/输出语句中的格式说明,例: READ(*,’(I3,F6.2,A)’) I,B,str,例: Write(*,’(2x,I3,F6.2,A)’)I,B,str,例: Print ’(2x,I3,F6.2,A)’, I,B,str,最外层一定要用‘’,格式说明中的撇号编辑符要改用连续两个撇号表示。












