当前位置: 首页 > 文档资料 > Fortran 中文教程 >

基本输入输出( Basic Input Output)

优质
小牛编辑
130浏览
2023-12-01

到目前为止,我们已经看到我们可以使用read *语句从键盘读取数据,并分别使用print*语句将输出显示到屏幕。 这种形式的输入输出是free format I/O,它被称为list-directed输入输出。

免费格式的简单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 

Where,

  • fmt是格式规范

  • 变量列表是要从键盘读取或写在屏幕上的变量列表

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

edit descriptor指定确切的格式,例如,宽度,小数点后的数字等,其中显示字符和数字。

例如 (For example)

Print "(f6.3)", pi

下表描述了描述符 -

描述描述
I

这用于整数输出。 这采用'rIw.m'形式,其中r,w和m的含义在下表中给出。 整数值在他们的领域是正确的。 如果现场宽度不足以容纳整数,那么该字段将填充星号。

print“(3i5)”,i,j,k
F

这用于实数输出。 这采用'rFw.d'形式,其中r,w和d的含义在下表中给出。 真正的价值观在他们的领域是正确的。 如果现场宽度不足以容纳实数,那么该字段将填充星号。

打印“(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'描述符与传统众所周知的'scienti fi c符号'略有不同。 科学符号的尾数在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

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

Sr.No符号和描述
1

c

列号

2

d

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

3

m

要显示的最小位数

4

n

要跳过的空格数

5

r

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

6

w

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

例子1 (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

例子2 (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 

例子3 (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="IOWIKI"
   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
IOWIKI
123.457
0.1279E-08
n = 300789 d = *******

Format 语句

format语句允许您在一个语句中混合和匹配字符,整数和实际输出。 以下示例演示了这一点 -

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