Fortran入门教程(三)

您所在的位置:网站首页 fortran字符串赋值 Fortran入门教程(三)

Fortran入门教程(三)

2023-12-15 07:52| 来源: 网络整理| 查看: 265

输入输出 1. 输入

read 语句(用法一)

!> program 3-1 program read_test implicit none integer :: a read (*, *) a write(*, *) a end program

上面的程序从键盘读取一个整数,再输出这个整数。 其中 read(*, *) 语句为输入语句,其原型为

read(unit=*, fmt=*) [...]

该语句接受两个参数:

unit : 需要读取的输入位置, 键盘为5, 如果填入*表示默认,则为5。fmt : 输出的格式,如果填入*表示默认格式。

最后的[...]为读取列表,程序会依次将输入按照格式读取进该列表的变量中。

在书写时,可以写成 read(*, *) 省略unit 及 fmt。

read 语句(用法二)

read *, [...]

默认从键盘输入, *为输入格式。用法同上。

2. 输出

write 语句 write语句的原型为

write(unit=*, fmt=*) [...]

该语句接受两个参数:

unit : 需要读取的输入位置, 屏幕为6, 如果填入*表示默认,则为6。fmt : 输出的格式,如果填入*表示默认格式。

最后的[...]为读取列表,程序会依次将变量列表中的变量按照格式输出到unit中。

print 语句 该语句与write接近,但是print语句只将变量输出到屏幕中。 原型为

print fmt=*, [...]

fmt : 输出的格式,如果填入*表示默认格式。 最后的[...]为读取列表,程序会依次将变量列表中的变量按照格式输出到屏幕中。

3. 格式化 3.1 概述 !> program: 3-2 program format_test implicit none integer :: a = 123 write(*, "(I2)") a ! 这里既要有括号也要有引号 write(*, "(I3)") a write(*, "(I4)") a end program

输出为

** 123 123

在上面的write 语句中, 我们改变了 fmt 参数,分别为(I2), (I3), (I4)。 在这些格式中, I表示输出一个整数, 2, 3, 4分别表示输出的宽度, 其中(I2)宽度为2, fortran会输出**表示警告, (I4) 宽度为4, 输出时数字右对其占用3个宽度,剩的宽度用空格填补。

在老式fortran中,格式化可以这样书写:

!> program: 3-3 program format_test implicit none integer :: a = 123 write(*, 100) a 100 FORMAT(I4) end program

在上述程序中, 100是格式化标识符,后面使用 FORMAT 语句来创建一个格式化模版,在使用时,可以直接将write中的fmt参数更改为此标识符。 这样的写法在程序阅读时可能会造成一定的阅读困难(format语句可能与write语句相隔较远),但是如果存在大量重复的相同格式,可以降低代码量。

3.2 整形格式化

格式rIw 或 rIw.m r: 描述符使用次数 I: 输出整形变量 w: 整形变量的宽度 m: 至少输出的位数 注意的点

整数在输出域内为右对齐字符个数超出域宽,输出时会用*号填充;

可以w=0, 即I0 使输出宽度和整数宽度相同。

例1 输出5个整数,宽度为5

(I5, I5, I5, I5, I5)

(5I5)

例2 输出1个整数,长度为其本身长度

(I0) 3.2 实数格式化

格式 rFw.d r: 描述符使用次数 F: 输出实型变量 w: 使出变量的宽度 d: 输出小数点后的位数

例1 输出2个实数,宽度为8, 保留小数点后三位

(2F8.3)

格式 rEw.d r: 描述符使用次数 E: 使用科学计数法(非标准) w: 使出变量的宽度 d: 输出小数点后的位数

域宽需要满足一定的条件:w≥d+7,如精确至2位小数则有±0.ddE±aa,共9位字符;精确至5位小数则有±0.dddddE±aa,共12位字符。

格式 rESw.d r: 描述符使用次数 ES: 使用科学计数法 w: 使出变量的宽度 d: 输出小数点后的位数

具体用法与E相同,域宽满足一定条件:w≥d+7,该条件同样不是十分严格,但是均能避免不利情况,因此建议使用该条件;

3.3 逻辑格式化

格式 rLw r: 描述符使用次数 L: 输出逻辑值 w: 输出变量的宽度

使用 (L0) 会报错

3.4 字符输出

格式 rA 或 rAw r: 描述符使用次数 L: 输出字符(字符串) w: 输出变量的宽度

3.5 特殊格式化符号

rGw.d r: 描述符使用次数 G: 输出控制符 w: 输出变量的宽度 输出所有类型的数据。

输出浮点数时比较特殊,当宽度不足时会转化成E类型,否则为F类型。

nX 表示在当前位置增加n个空格,例如: 一个整数后面三个空格

integer a = 123 write(*, "(I0, 3X)") a ! 123

三个整数用空格分开

interger :: a = 123, b = 23, c = 3 write(*, "(3(I0, 1X))") a, b, c ! 123 23 3

T

Tc 表示将输出位置移动到本行的第c个字节。TLn 向左移动n个字符‘TRn’ 向右移动n个字符

/ 表示换行 每行输出一个实数,共3个

real :: a = 123, b = 123, c = 123 write(*, "3(F0.3, /)") a, b, c ! 123.000 ! 123.000 ! 123.000 !

$ 表示行尾不换行

write(*, "A, $") "123" write(*, "A, $") "123" ! 1231123

SP, SS 在增加了 SP 后, 会输出数字的正负号, SS后会关闭该功能

write(*, "(SP, I0, I0, SS, I0)") 5, 5, 5 ! +5 +5 5

BN, BZ (READ) 增加了 BN 后, 格式化中的空字节代表0, BZ关闭。

integer :: a read(*, "(BN, I5)") a ! 如果输入1 则会读入 10000

kP(READ) 增加了 BN 后, 读入的F类型的数据会被乘以 1 0 − k 10^{-k} 10−k.

B, O, Z 分别将整数转化成二进制、八进制、十六进制。

: 遇到冒号后,如果后面没有更多的数据项时停止输出。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3