Fortran - 基本输入输出



到目前为止,我们已经看到可以使用read *语句从键盘读取数据,并分别使用print*语句将输出显示到屏幕上。这种形式的输入输出是自由格式I/O,称为列表定向输入输出。

自由格式简单I/O的形式为:

read(*,*) item1, item2, item3...
print *, item1, item2, item3
write(*,*) item1, item2, item3...

但是,格式化I/O为您提供了更多关于数据传输的灵活性。

格式化输入输出

格式化输入输出的语法如下:

read fmt, variable_list 
print fmt, variable_list 
write fmt, variable_list 

其中,

  • fmt 是格式规范

  • variable-list 是要从键盘读取或写入屏幕的变量列表

格式规范定义了格式化数据显示的方式。它由一个字符串组成,该字符串包含括号中编辑描述符的列表。

编辑描述符指定精确的格式,例如宽度、小数点后的位数等,字符和数字以该格式显示。

例如

Print "(f6.3)", pi

下表描述了描述符:

描述符 描述 示例
I

用于整数输出。它采用“rIw.m”的形式,其中r、w和m的含义在下表中给出。整数在其字段中右对齐。如果字段宽度不足以容纳整数,则字段将填充星号。

print "(3i5)", i, j, k
F

用于实数输出。它采用“rFw.d”的形式,其中r、w和d的含义在下表中给出。实数在其字段中右对齐。如果字段宽度不足以容纳实数,则字段将填充星号。

print "(f12.3)",pi
E

用于以指数表示法输出实数。“E”描述符语句采用“rEw.d”的形式,其中r、w和d的含义在下表中给出。实数在其字段中右对齐。如果字段宽度不足以容纳实数,则字段将填充星号。

请注意,要打印具有三位小数的实数,至少需要十位字段宽度。一位用于尾数的符号,两位用于零,四位用于尾数,两位用于指数本身。一般来说,w ≥ d + 7。

print "(e10.3)",123456.0 给出“0.123e+06”
ES

用于实数输出(科学计数法)。它采用“rESw.d”的形式,其中r、w和d的含义在下表中给出。“E”描述符与传统的众所周知的“科学计数法”略有不同。科学计数法的尾数范围为1.0到10.0,而E描述符的尾数范围为0.1到1.0。实数在其字段中右对齐。如果字段宽度不足以容纳实数,则字段将填充星号。这里同样,宽度字段必须满足表达式w ≥ d + 7

print "(es10.3)",123456.0 给出“1.235e+05”
A

用于字符输出。它采用“rAw”的形式,其中r和w的含义在下表中给出。字符类型在其字段中右对齐。如果字段宽度不足以容纳字符字符串,则字段将填充字符串的前“w”个字符。

print "(a10)", str
X

用于空格输出。它采用“nX”的形式,其中“n”是所需空格的数量。

print "(5x, a10)", str
/

斜杠描述符 – 用于插入空行。它采用“/”的形式,并强制将下一个数据输出到新行。

print "(/,5x, a10)", str

以下符号与格式描述符一起使用:

序号 符号及描述
1

c

列号

2

d

实数输入或输出小数点右边的位数

3

m

要显示的最小位数

4

n

要跳过的空格数

5

r

重复计数 – 使用描述符或描述符组的次数

6

w

字段宽度 – 用于输入或输出的字符数

示例 1

program printPi

   pi = 3.141592653589793238 
   
   Print "(f6.3)", pi 
   Print "(f10.7)", pi
   Print "(f20.15)", pi 
   Print "(e16.4)", pi/100 
   
end program printPi

编译并执行上述代码后,将产生以下结果:

3.142
3.1415927
3.141592741012573
0.3142E-01

示例 2

program printName
implicit none

   character (len = 15) :: first_name
   print *,' Enter your first name.' 
   print *,' Up to 20 characters, please'
   
   read *,first_name 
   print "(1x,a)",first_name
   
end program printName

编译并执行上述代码后,将产生以下结果:(假设用户输入名称Zara)

Enter your first name.
Up to 20 characters, please
Zara 

示例 3

program formattedPrint
implicit none

   real :: c = 1.2786456e-9, d = 0.1234567e3 
   integer :: n = 300789, k = 45, i = 2
   character (len=15) :: str="Tutorials Point"
   
   print "(i6)", k 
   print "(i6.3)", k 
   print "(3i10)", n, k, i 
   print "(i10,i3,i5)", n, k, i 
   print "(a15)",str 
   print "(f12.3)", d
   print "(e12.4)", c 
   print '(/,3x,"n = ",i6, 3x, "d = ",f7.4)', n, d
   
end program formattedPrint

编译并执行上述代码后,将产生以下结果:

45
045
300789 45  2
300789 45  2
Tutorials Point
123.457
0.1279E-08

n = 300789 d = *******

格式语句

格式语句允许您在一个语句中混合和匹配字符、整数和实数输出。以下示例演示了这一点:

program productDetails 
implicit none 

   character (len = 15) :: name
   integer :: id 
   real :: weight
   name = 'Ardupilot'
   id = 1
   weight = 0.08
   
   print *,' The product details are' 
   
   print 100
   100 format (7x,'Name:', 7x, 'Id:', 1x, 'Weight:')
   
   print 200, name, id, weight 
   200 format(1x, a, 2x, i3, 2x, f5.2) 
   
end program productDetails

编译并执行上述代码后,将产生以下结果:

The product details are
Name:       Id:    Weight:
Ardupilot   1       0.08
广告

© . All rights reserved.