Fortran程序设计第四讲基本I/O第四讲内容WRITE语句格式化输出READ语句格式化读取文件操作5.1格式化输出WRITE(*,*)是自由格式输出,也称表控输出INTEGER::iDOi=1,10WRITE(*,*)'sin(',i,')=',sin(3.141593*i/180)ENDDOWRITE(*,*)'---------1---------2---------3---------4'输出的数据不直观也不美观所以我们要采用格式输出INTEGER::iDOi=1,10WRITE(*,'(10X,A4,I2,A2,F8.6)')'sin(',i,')=',sin(3.141593*i/180)ENDDOWRITE(*,*)'---------1---------2---------3---------4'利用格式控制,可以将输出按照自己的需求排列,便于分析数据5.2格式化输出的基本格式有两种格式WRITE(*,100)a100FORMAT(I3)WRITE(*,’(I3)’)a前面输出正弦表的程序也可以修改为:WRITE(*,200)'sin(',i,')=',sin(3.141593*i/180)200FORMAT(10X,A4,I2,A2,F8.6)还可以修改为:WRITE(*,200),i,,sin(3.141593*i/180)200FORMAT(10X,'sin(',I2,')=‘,F8.6)格式化描述符整数I实数FEES字符A空格X跳转T换行/5.3整数的输出--I描述符I描述符用来描述整数数据的显示格式,形式为:rIw或rIw.mr重复计数-----表示这个格式重复的次数w域宽-----输出使用的字符数m要显示的最小位数例:INTEGER::i=-12,j=4,k=-12345WRITE(*,'(2I5,I6,I10)')i,i+12,j,kWRITE(*,'(2I5.0,I6,I10.8)')i,i+12,j,kWRITE(*,'(2I5.3,I6,I5)')i,i+12,j,kWRITE(*,'(T1,A40)')'---------1---------2---------3---------4'整数数值在其域内右对齐如果整数太大,用*显示如果m值超过整数位数,就在左侧用0补满INTEGER::i=-12,j=4,k=-12345WRITE(*,100)i,i+12,j,kWRITE(*,101)i,i+12,j,kWRITE(*,102)i,i+12,j,k100FORMAT(2I5,I6,I10)101FORMAT(2I5.0,I6,I10.8)102FORMAT(2I5.3,I6,I5)WRITE(*,'(T1,A40)')'---------1---------2---------&3---------4'上一个例子也可以写成这样,结果是一样的5.4实数输出-----F描述符rFw.dd表示小数点右边的位数实数在其显示域内右对齐如果d值小于数据的小数位数,那么显示前会被四舍五入如果d值超出数据的小数位数,那么在小数最后补齐足够的0如果实数太大,给定的域放不下,那么用*填充12.345678用下面的格式会输出什么?F10.8F12.8F5.3F5.25.5实数输出----E描述符rEw.d和科学记数法不同,E描述法把实数规范到0.1~1.0之间的一个数乘以10的幂比如阿伏伽德罗常数用科学记数法为:6.02x1023E表示是0.602x1024,显示在计算机上是0.602E+24如果数据的有效位数是7,用E表示的时候,w和d分别要取多少呢?w至少要14:1个字符用来表示尾数的符号,2个字符用于表示0和小数点,7个字符表示实际的尾数,1个字符表示E,1个字符表示指数的符号,2个字符用于表示指数自身±0.dddddddE±ee所以,用E表示的时候,要特别注意表示域的宽度问题,一般至少满足如下表达式:w≥d+75.6实数输出----ES描述rESw.dES描述和E描述的区别在于尾数的选取不同,ES描述是用的科学记数法,尾数选取范围是1.0~10.0,这种表示方式更适合科研和工程人员ES表示:±d.dddddddE±ee可以看出,同样宽度下,ES可以比E多一个有效位6.1字符----A描述rA或rAwrA使用宽度与被显示字符数相同rAw使用w个宽度显示字符,w超出字符个数时,右对齐,w不足时,只显示字符的前w个CHARACTER(len=17)::string='Thisisastring.'WRITE(*,100)stringWRITE(*,101)stringWRITE(*,102)string100FORMAT('',A)101FORMAT('',A20)102FORMAT('',A6)7.1水平定位----X和T描述nXTc插入n个空格直接跳转到本行第c列注意不要让打印域交叠了8.1换行----//每个/换一行,/可以连续使用,表示连续换多行9.1格式描述符组的重复执行3I5表示连续输出3个整数,每个位宽5如果有:I6,I6,F10.2,F10.2,I6,F10.2,F10.2可以写成:I6,2(I6,F10.2)进一步如果I6,F10.2,A,F10.2,A,I6,F10.2,A,F10.2,A写成2(I6,2(F10.2,A))这种是嵌套10格式化输出举例REAL,PARAMETER::PI=3.141593INTEGER::angleREAL::radianWRITE(*,10)'angle','radian','sin(angle)','cos(angle)'10FORMAT(T5'|','-----|----------|----------|----------|'&&,/,T5,'|',A5,'|',3(A10,'|')&&,/,T5,'|','-----|----------|----------|---------...