Fortran 简明教程
Fortran - Basic Input Output
到目前为止,我们已经看到,我们可以分别使用 read * statement, and display output to the screen using the *print 语句从键盘读取数据。这种输入-输出形式是 free format I/O,称为 list-directed 输入-输出。
自由格式简单 I/O 具有以下形式 −
read(*,*) item1, item2, item3...
print *, item1, item2, item3
write(*,*) item1, item2, item3...
然而,格式化 I/O 能让你更灵活地控制数据传输。
Formatted Input Output
格式化输入输出的语法如下 −
read fmt, variable_list
print fmt, variable_list
write fmt, variable_list
其中,
-
fmt 是格式规范
-
variable-list 是要从键盘读取或写入屏幕的变量列表
格式规范定义了格式化数据显示的方式。它包含一个字符串,其中包含括号中的一列 edit descriptors 。
edit descriptor 指示准确的格式,如字符和数字的显示宽度、小数点后的位数等。
For example
Print "(f6.3)", pi
下表描述了描述符:
Descriptor |
Description |
Example |
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 gives ‘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 gives ‘1.235e+05’ |
A |
用于字符输出。格式为“rAw”,其中 r 和 w 的含义在下表中给出。字符类型在其字段中右对齐。如果字段宽度不够容纳字符字符串,则该字段将填充字符串中的前“w”个字符。 |
print "(a10)", str |
X |
用于空格输出。格式为“nX”,其中“n”是要的空格数。 |
print "(5x, a10)", str |
/ |
撇号描述符 - 用于插入空行。格式为“/”并强制在新的行上输出下一个数据。 |
print "(/,5x, a10)", str |
以下符号与格式描述符一起使用:
Sr.No |
Symbol & Description |
1 |
c Column number |
2 |
d 实数输入或输出的小数点右侧数字数 |
3 |
m 要显示的最小数字数 |
4 |
n 要跳过的空格数 |
5 |
r 重复计数 - 使用描述符或描述符组的次数 |
6 |
w 字段宽度 - 用于输入或输出的字符数 |
Example 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
Example 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
Example 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 = *******
The Format Statement
格式化语句允许您在一个语句中混合和匹配字符、整数和实数输出。以下示例对此进行了演示:
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