数据有格式输入输出

更新时间:2023-05-22 23:41:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第八讲 数据有格式输入、输出1. 数据有格式输入输出概述 2. 格式说明与格式编辑符 3. 整数有格式输入输出 4. 实数有格式输入输出 5. 复数有格式输入输出 6. 字符串有格式输入输出 7. 逻辑值有格式输入输出 8. 二、八、十六进制数据有格式输入输出 9. 任意类型数据有格式输入输出 10.不可重复编辑符 11.纵向走纸控制 12.有格式输入输出应用举例 13.作业

第八讲

数据有格式输入、输出

8.1 数据有格式输入输出概述 输入输出数据是否简洁、直观、醒目、规范,是反映程序质量的一项重要指标。

示例:某程序需输入3个学生4门课成绩数据,共输入12个数据,有两种输入方式:

①78.5 ②

85

58

98

75

88.5

99 数学

45.5 物理 85.0 88.5 69.5

84.5 化学 58.0 99.0 77.0

69.5 英语 98.0↙ 45.5↙ 82.0↙

77

82↙ 输入分类 输入提示

输入第1位同学四门课成绩:78.5 输入第2位同学四门课成绩: 75.0 输入第3位同学四门课成绩: 84.5

示例:某程序要输出3个学生4门课成绩数据,共输出12个数据,有两种输出方式:

8.1 数据有格式输入输出概述 78.50000 85.00000

58.0000045.50000 化学 58.0 99.0 77.0 英语 98.0 45.5 82.0

98.0000084.50000

75.0000069.50000

88.50000 77.00000 ②

99.00000 82.00000 数学 物理 85.0 88.5 69.5

第1位同学成绩: 78.5 第2位同学成绩: 75.0 第3位同学成绩: 84.5 第八讲 数据有格式输入、输出

简洁直观 醒目规范

8.2 格式说明与格式编辑符

示例 格式说明 ① READ(*,100) m,n WRITE(*,200) m+n,m-n 100 FORMAT(I3,I3)

编辑符

200 FORMAT(1X, m+n= ,I4, m-n= ,I4)END ② READ(*,"(I3,I3)") m,n 8.2 格式说明与格式编辑符

WRITE(*,"(1X, m+n= ,I4, m-n= ,I4)") m+n,m-nEND 输入:987432↙。 输出:m+n=1419m-n= 555。

第八讲

数据有格式输入、输出

8.2 格式说明与格式编辑符

示例 格式说明

数据有格式输入输出需要给出相关的格式说明。 FORMAT语句提供输入输出数据的格式说明信息。

编辑符

FORMAT语句既不是执行语句,也不是说明语句。 FORMAT语句可出现在说明语句之后,END语句之前任何位置。 格式说明表是关键字FORMAT之后的括号部分。

格式说明表由若干格式编辑符组成,编辑符由“,”分隔。 格式说明表可嵌入到输入输出语句中,取代FORMAT语句。 格式说明一般使用FORMAT语句,简单格式使用嵌入方式。8.2格式说明与格式编辑符/格式说明

FORMAT语句语法描述:

<FORMAT语句>→<语句标号> FORMAT <格式说明表> <格式说明表>→(<格式说明>{[,∣/]<格式说明>})

第八讲

数据有格式输入、输出

8.2 格式说明与格式编辑符 FORTRAN

90提供了24个格式编辑符,如:I、F、E、A等。

示例 格式说明

格式编辑符分

为两类:可重复编辑符、不可重复编辑符。 可重复编辑符可指定重复系数,与I/O表中的一个I/O项对应。

编辑符

不可重复编辑符不可指定重复系数,不与输入输出项相对应。

如:I、F、E、A等编辑符为可重复编辑符。 如:X、Q、/、\等编辑符为不可重复编辑符。 READ(*,100) num1, num2, price1, price28.2格式说明与格式编辑符/编辑符

100 FORMAT(2I3, F7.1, E8.2) WRITE(*,200) num1*price1+num2*price2 200 FORMAT(1X,'total prices=',E14.7)

END输入:125 2195234.57.52E+04↙。 输出:total prices= 1.3483512E+07。

第八讲

数据有格式输入、输出

表6-1 可重复编辑符格式 [r]Im[.n] [r]Bm[.n] [r]Om.[n] [r]Zm.[n] [r]Fm.d 名称 整型编辑符 二进制编辑符 八进制编辑符 16进制编辑符 小数型实型编辑符 功能 将整数按指定域宽输入输出 将2进制数按指定域宽输入输出 将8进制数按指定域宽输入输出 将16进制数按指定域宽输入输出 将实数按指定域宽输入输出 输入 √ √ √ √ √ 输出 √ √ √ √ √

[r]Em.d[Ee][r]Dm.d [r]ENm.d[Ee]

指数型实型编辑符双精度实型编辑符 工程计数法编辑符

将实数按指定域宽输入输出将双精度数按指定域宽输入输出 将实数按工程计数法输入输出

√√ √

√√ √

[r]ESm.d[Ee][r]A[m] [r]Lm [r]Gm.d[Ee] 第八讲

科学计数法编辑符字符型编辑符 逻辑型编辑符 通用编辑符

将实数按科学计数法输入输出将字符串按指定域宽输入输出 将逻辑值按指定域宽输入输出 将任意类型数据按域宽输入输出

√√ √ √

√√ √ √

数据有格式输入、输出

表6-2 不可重复编辑符格式 ‘ √ ’或“ ” 名称 撇号编辑符 功能 输入 输出 将字符串输出

nHQ Tc, TLc, TRc

H编辑符字符计数编辑符 位置编辑符

将H后n个字符输出获到输入记录中剩余字符数 指定输入输出记录中的位置 √ √

nXSP, SS, S / \ $ : kP BN, BZ 第八讲

位置编辑符+号编辑符 斜杠编辑符 反斜杠编辑符 $编辑符 格式控制编辑符 比例因子编辑符 空格替代编辑符 数据有格式输入、输出

指定输入输出记录中的位置控制+号输出 终止本记录,开始下一记录 下一记录接上一记录输出 下一记录接上一记录输出 无输出数据终止格式控制 设置F和E编辑符指数比例因子 指定数字串中空格意义

√√

√ √ √ √

√ √

8.3 整数有格式输入输出I 编辑符可用于整数的有格式输入输出,一般格式是:

格式 输入

[r]Iw[.m] 其中:r为I编辑符重复次数。

输出

即:[r]Iw[.m]等价于Iw[.m],Iw[.m],…,Iw[.m]。w为整数输入输出域宽,即整数占连续字符个数。 m为输出最少位数。

[.m]项只对整数输出有效,对输入无效。程序示例: INTEGER(2) i,j,k8.3 整数

有格式输入输出

READ(*,100) i,j,k100 FORMAT(I4,2I5) !等价于FORMAT(I4,I5,I5) WRITE(*,"(1X, 'i+j+k=',I5)") i+j+k

END第八讲 数据有格式输入、输出

8.3 整数有格式输入输出

格式 输入

输入数据间可按规定域宽紧密输入,也可用逗号间隔输入,不用空格。 在域宽内,数字前后,数字之间可出现空格,这些空格一般被视为空。 在域宽内,全为空格,输入整数为0。 在域宽内,输入数据不能超出范围,不能是非十进制整数。

输出

I编辑符要求输入表中对应变量的类型一般是整型,否则会产生错误。 示例:

INTEGER(2) i,j,k READ(*,100) i,j,k 100 FORMAT(I4,2I5) END8.3 整数有格式输入输出/输入

!等价于FORMAT(I4,I5,I5)

WRITE(*,"(1X, 3I5)") i,j,k

第八讲

数据有格式输入、输出

8.3 整数有格式输入输出

格式 输入

输入数据: 输入数据间可按规定域宽紧密输入 ,也可用逗号间隔输入,不用空格。 i=1234,j=12345,k=-6789 1234123456789↙ 在域宽内 ,数字前后 ,数字之间可出现空格 ,这些空格一般被视为空。 。 i=12,j=12345,k=-6789 12,123456789↙ 在域宽内 ,全为空格 ,输入整数为0 , i=12,j=34,k=5678 在域宽内 ,输入数据不能超出范围 不能是非十进制整数。 12,34, 56789↙

i、j、k 值:

输出

I编辑符要求输入表中对应变量的类型一般是整型 ,否则会产生错误。 i=1234,j=0,k=5678 1234, 56789↙ 示例: 1 2 123 - 78 ↙8.3 整数有格式输入输出/输入/示例 INTEGER(2) i,j,k 1 ,12 34 -6789↙ READ 10,i,j,k 1 ,12 3456789↙

i=12,j=123,k=-78 i=1,j=1234,k=-678 产生数据转换错误

10

!等价于FORMAT(I4,I5,I5) i=12,j=0,k=-78 PRINT "(1X, 'i+j+k=',I5)",i+j+k 产生数据转换错误,超出最大范围 123454321-6789↙ END 产生数据转换错误,非十进制整数。 2#1112345-6789↙ 1 2 - 78 ↙

FORMAT(I4,2I5)

1234543.2-6789↙

产生数据转换错误,域宽内为实数。

第八讲

数据有格式输入、输出

8.3 整数有格式输入输出 若域宽等于整数位数,则在域宽内输出该整数,与后一数据无空格间隔。

格式 输入

若域宽大于整数位数,则在域宽内按右对齐输出该整数,前补空格。 若域宽小于整数位数,则表明域宽不足,无法输出数据,域宽内填充

“*”。 对于Iw.m格式,m表示输出最小位数。位数小于m,补前导0至m位。 示例:

输出

Integer I,j,k READ(*,*) i,j,k 8.3 整数有格式输入输出/输出 200 FORMAT(1X, 'i=',I4, 'j=',I4, 'k=',I4) WRITE(*,200) i,j,k 输入: END 1234,-123,4567↙ 10,-12,1234↙ 12345,-12,1234↙

输出:

i=1234j=-123k=4567 i= 10j= -12k=1234

i=****j= -12k=1234i= 008j=-012k=1234

8,-12,1234↙

第八讲

数据有格式输入、输出

8.4 实数有格式输入输出

格式F 输出F

F 编辑符可用于小数型实数的有格式输入输出,一般格式是:

[r]Fw.d其中:r为F编辑符重复次数。 即:[r]Fw.d 等价于Fw.d,Fw.d,…,Fw.d。

格式E输入E 输出E

w为小数型实数输入输出域宽,即实数占连续字符个数。8.4 实数有格式输入输出 d为小数位数。对于输入 ,无小数点,小数点由d确定,有小数 点,小数点由域宽内实际位置确定。对于输出,输出数据域 宽包括一个小数点。

格式D

格式EN

格式ES

程序示例:READ(*,*) a,b WRITE(*,10) a,b 10 FORMAT(1X,'a=',F7.3,'b=',F7.3) END

第八讲

数据有格式输入、输出

8.4 实数有格式输入输出

对正数,若w=t+d+1,对负数,若w=t+d+2,且d=s,则在域宽内输出该实数。 对正数,若w=t+d+1,对负数,若w=t+d+2,且d>s,则在域宽内左对齐输出 该实数,小数部分后续补d-s个0。 对正数,若w=t+d+1,对负数,若w=t+d+2,且d<s,则在域宽内左对齐输出 该实数,小数部分保留d位,多余部分按“四舍五入”处理 。 对正数,若w>t+d+1,对负数,若w>t+d+2,则在域宽内右对齐输出该实数, 整数前补w-(t+d+1)或w-(t+d+2)个空格,小数部分按前面3种情况处理, 占d位 。

格式F 输出F

格式E输入E 输出E

对正数,若w<t+d+1,对负数,若w<t+d+2,则域宽不足,在域宽内填充 8.4 实数有格式输入输出/输出F “*”。 输出: 格式EN 示例: 输入: a=125.511b=-12.233 125.511,12.233↙ READ(*,*) a,b 格式ES a=125.500b=-12.230 125.5,12.23↙a,b WRITE(*,10) 格式D a=125.523b=-12.234 125.5234,12.233567↙ 10 FORMAT(1X,'a=',F7.3,'b=',F7.3) 1.234, a= 1.234b= -2.234 END 2.233567↙ 1111.23,-112.23↙ a=*******b=******* 设:输出数据的整数部分位数为 t,小数部分位数为 s。

第八讲

数据有格式输入、输出

8.4 实数有格式输入输出

格式F 输出F

E 编辑符可用于指数型实数的有格式输入输出,一般格式是:

[r]Ew.d[Ee]其中:r为E编辑符重复次数。 即:[r]Ew.d[Ee] 等价于Ew.d[Ee],Ew.d[Ee],…,Ew.d[Ee]。

格式E输入E 输出E

w为指数型实数输入输出域宽,即实数占连续字符个数。d为小数位数,其含义同F编辑符。8.4 实数有格式输入输出/格式E

格式D

e为指数位数,缺省为2,不包括E和符号,指数域宽e+2。 程序示例:输入: READ(*,*) a,b 12.543,122.33↙ WRITE(*,10)

格式EN

格式ES

输出: a=.12543E+02b=-.12233E+03

a,b

a=.12500E+02b=-.12230E+03 10 12.5,-FORMAT(1X,'a=',E10.5,'b=',E11.5) 122.3↙ 12.53456,122.3344↙ END a=.12535E+02b=-.12233E+03

第八讲

数据有格式输入、输出

8.4 实数有格式输入输出 对于输入,E编辑符功能类似F编辑符。

式F 输出F

在规定域宽内,可按小数型实数输入,也可按指数型实数输入。

示例:

格式E输入E 输出E

READ(*,11) a, b, c 11 FORMAT(E5.2,E8.3,E8.3E3)

WRITE(*,"(1X,'a+b+c=',E12.3)") a+b+cEND8.4 实数有格式输入输出/输入E

格式D

格式EN输入: 123454321E +2123E +12↙

格式ES

a,b,c 值: a=123.45,

b=432.1, c=1.23 1011

第八讲

数据有格式输入、输出

8.4 实数有格式输入输出

对正数,若w=d+5,对负数,若w=d+6,且d=t,则在域宽内输出该实数。 对正数,若w=d+5,对负数,若w=d+6,且d>t,则在域宽内左对齐输出该实 数,小数部分后续补d-t个0。 对正数,若w=d+5,对负数,若w=d+6,且d<t,则在域宽内左对齐输出该实 数,小数部分保留d位,多余部分按“四舍五入”处理 。 对正数,若w>d+5,对负数,若w>d+6,则在域宽内右对齐输出该实数,整 数前补w-(d+5)-1或w-(d+6)-1个空格,小数部分按前面3种情况处理。 对正数,若w<d+5,对负数,若w<d+6,则域宽不足,在域宽内填充“*”。 对双精度实数 ,指数有3位,指数部分的E字母省略,保持3位指数。 8.4 实数有格式输入输出/输出E 示例:

格式F 输出F

格式E输入E 输出E

格式D

格式EN

格式ES

READ(*,*) a,b 输出: 输入: WRITE(*,10) a,b a=.12543E+02b=-.12233E+03 12.543,-122.33↙ 10 FORMAT(1X,'a=',E10.5,'b=',E11.5) a=.12500E+02b=-.12230E+03 12.5,-122.3↙ END 12.53456,-122.3344↙ a=.12535E+02b=-.12233E+03 设:输出实数的有效位数为t。 数据有格式输入、输出

第八讲

8.4 实数有格式输入输出D编辑符用于双精度数据的输出。其一般形式为:

格式F 输出F

[r]Dw.d 其中:r为F编辑符重复次数。 使用方法与E编辑符相仿,只是把字母“E”换成“D”。 程序示例:

格式E输入E 输出E

格式D 格式EN 格式ES

real(8) a,b输入: WRITE(*,10)

8.4 实数有格式输入输出/格式D

READ(*,*) a,b a,b输出: a=.12543D+02b=-.12233D+03 a=.12500D+02b=-.12230D+03 a=.12535D+02b=-.12233D+03

10

12.543,-122.33↙ 12.5,-122.3↙

FORMAT(1X,'a=',D10.5,'b=',D11.5) END

12.53456,-122.3344↙

第八讲

数据有格式输入、输出

8.4 实数有格式输入输出

格式F 输出F

格式E输入E 输出E

格式D 格式EN 格式ES

工程计数法 (EN) 和科学计数法 (ES) 也是 F90 新增的 x=-12345.6789 编辑描述符。 y=0.456789 EN的一般形式为:ENw.d[Ee]。EN和E编辑描述符基 z=7.89123e23 本类似,区别在于 EN输出数据的非指数部分的绝对值 write(*,"(3(1x,en13.5 ))") x,y,z write(*, (3(1x,en13.2e4)) ") x,y,z 强制在 1到" 1000 的范围内,且指数可以被 3整除。包括 write(*,"(3(1x,es13.5 ))") x,y,z 指数的区域的宽度是 w个字符,小数点后 d个字符,指 write(*,"(3(

1x,es13.2e4)) ") x,y,z 数宽度 end e是可选的。8.4 实数有格式输入输出/格式EN/ES

ES的一般形式为:ESw.d[Ee]。它和E编辑描述符也 输出结果如下: 基本类似,区别在于 ES输出数据的非指数部分的绝对 -12.34568E+03 456.58899E-03 789.12303E+21 值强制在 l到10的范围内,而非 0到1的范围。 -12.35E+0003 456.59E-0003E的 789.12E+0021

-1.23457E+04 4.56789E-01 7.89123E+23第八讲 数据有格式输入、输出

-1.23E+0004

4.57E-0001

7.89E+0023

8.5 复数有格式输入输出

概述

复数编辑符是通过两个实型编辑符实现的,第一个对应实部, 第二个对应虚部。 程序示例: COMPLEX c1,c2 READ(*,23) c1,c2 23 FORMAT(F5.2,E5.2,F8.3,E8.3) 8.5 复数有格式输入输出 输入:12345123E24321.5,1234E-1 ↙。 WRITE(*,*) C1 c1和c2值:c1=(123.45,123.0),c2=(4321.5,1.234 10-1)。 WRITE(*,*) C2 输出: WRITE(*,"(1X,'c1+c2=', F7.2,E10.3)") c1+c2 (123.4500,123.0000) END (4321.500,0.1234000) c1+c2=4444.95 0.123E+03。 c1+c2输出首尾无括号,中间无逗号

第八讲

数据有格式输入、输出

8.6 字符串有格式输入输出A 编辑符可用于字符串的有格式输入输出,一般格式是:

格式 输入

[r]A[w] 其中:r为A编辑符重复次数。

输出

即:[r]A[w]等价于A[w],A[w],…,A[w]。w为字符串输入输出域宽,即字符串占连续字符个数。 缺省w,域宽为输入和输出表中对应字符型变量的长度。8.6 字符串有格式输入输出 程序示例:

CHARACTER str1*5,str2*4,str3*3,str4*3 READ(*,24) str1,str2,str3,str4

24

FORMAT(A5,A4,2A3)WRITE(*,*) str1//str2//str3//str4 END

第八讲

数据有格式输入、输出

8.6 字符串有格式输入输出

格式 输入

域宽等于变量长度,按域宽依次截取字符串,赋予变量,不足补空格。 域宽小于变量长度,按域宽依次截取字符串,补足空格后赋于变量。 域宽大于变量长度,按域宽依次截取字符串,取后部字符赋于变量。

输出

s1,s2,s3,s4 值: 输入: 缺省域宽,域宽默认取输入表对应字符型变量长度。 s1='ABCDE',s2='FGHI',s3='JKL',s4='MNO ABCDEFGHIJKLMNO↙ 输入字符串不能加引号。引号、逗号和空格按一般字符对待。 s1='ABCDE',s2='FGHI',s3='JKL',s4='M ' ABCDEFGHIJKLM↙ 示例: ABCDEFGHIJKLMNOPQR↙ s1='ABCDE',s2='FGHI',s3='JKL',s4='MNO

CHARACTER s1*5,s2*4,s3*3,s4*3 FORMAT改写成 FORMAT(4A4) s1='ABCD ',s2='EFGH',s3='JKL',s4='NOP' ABCDEFGHIJKLMNOPQRST↙ READ(*,24) s1,s2,s3,s4 s1='ABCDE',s2='FGHI',s3='JKL',s4='MNO' ABCDEFGHIJKLMNOPQRST↙ 'china','xian','new','pen'↙

8.6 字符串有格式输入输出/输入

24

FORMAT改写成FORMAT(4A)

FORMAT(A5,A4,2A3) END s1="

WRITE(*,*) s1//s2//s3//s4'chin",s2="a',' ",s3="xia",s4="n',"

第八讲

数据有格式输入、输出

本文来源:https://www.bwwdw.com/article/smh4.html

Top