fortran语言教程第8章

2026/1/27 7:46:03

CLOSE(8) END

程序运行之后,没有任何显结果。用记事本将D:\\SF1.DAT文件打开可看见结果:

从建立的SF1.DAT文件可以看出有格式顺序文件的基本数据模式。文件建好之后,可以用另一个FORTRAN程序读取这些数据。

【例8.2】 编写一程序,把文件SF1.DAT中的数据读出,并分别求20个整型数与20个实型数的和。

DIMENSION M(20),A(20) OPEN(8,FILE='SF1.DAT') READ(8,*) (M(I),I=1,20) READ(8,*) (A(I),I=1,20) CLOSE(8)

DO 10 I=1,20 N=N+M(I) S=S+A(I) 10 CONTINUE

WRITE(*,'(2X,I7,5X,F16.7)') N,S END

程序运行后显示: 2870 -.0319510

以上两个例子可以看出,如果要使程序建立的数据文件具有显示与再编辑功能,可以使用有格式顺序文件。

8.3.2 无格式顺序文件的使用

【例8.3】 编写一程序,产生30个随机整数,把这30个随机整数以无格式顺序文件方式存入文件SF2.DAT中。

DIMENSION M(30) DO 10 I=1,30 M(I)=RAND()*100 10 CONTINUE

OPEN(9,FILE='D:\\SF2.DAT',STATUS='UNKNOWN',FORM='UNFORMATTED') WRITE(9) (M(I),I=1,30) CLOSE(9) END

FUNCTION RAND()

SAVE SEED

INTEGER SEED,C1,C2,C3

PARAMETER (C1=29,C2=217,C3=1024) DATA SEED/12/

SEED=MOD(SEED*C1+C2,C3) RAND=REAL(SEED)/C3 RETURN END

程序运行后磁盘上有一个SF2.DAT文件。用记事本打开可看见结果:

以上显示的SF2.DAT文件的内容,只是一系列ASCⅡ码,具体数据是不清楚的,这是无格式文件的特点。但这些数据并非不能使用,可以用无格式文件方式来读取它。

【例8.4】 编写一程序,读取文件SF2.DAT中的数据,并把这些数据按从大到小的顺序排列。 DIMENSION M(30)

OPEN(9,FILE='D:\\SF2.DAT',FORM='UNFORMATTED') READ(9) (M(I),I=1,30) CLOSE(9)

CALL PX(M,30)

WRITE(*,'(2X,10I6)') (M(I),I=1,30) END

SUBROUTINE PX(M,N) DIMENSION M(N) DO 10 I=1,N DO 20 J=I,N

IF(M(J).GT.M(I)) THEN K=M(I) M(I)=M(J) M(J)=K END IF 20 CONTINUE 10 CONTINUE RETURN END

程序运行后显示:

99 94 90 89 76 75 74 71 67 66 65 61 55 53 51 50 49 48 44 39 38 32 29 25 24 22 21 18 15 6

以上程序可以看出,无格式顺序文件虽然以二进制形式存盘,但读取这些数据还是很方便的。

8.3.3 有格式直接文件的使用

【例8.5】 已知有五个学生的姓名及每个学生的5科成绩。编写一程序,把每个学生的姓名及5科成绩以有格式直接文件的方式存入文件SF3.DAT。

DIMENSION M(5,5) CHARACTER NAME(5)*8

DATA NAME/'李 鸣','汪小莉','罗 乾','王小刚','蒋 涵'/ DATA M/98,89,67,77,56, $ 60,66,75,70,87, $ 91,85,78,88,68, $ 92,67,73,80,77, $ 90,92,89,94,86/

OPEN(10,FILE='D:\\SF3.DAT',STATUS='UNKNOWN',ACCESS= $ 'DIRECT',RECL=35,FORM='FORMATTED') DO 10 I=1,5

WRITE(10,'(A10,5I5)',REC=I) NAME(I),M(I,1),M(I,2), & M(I,3),M(I,4),M(I,5) 10 CONTINUE END

程序运行后,磁盘上建立了一个SF3.DAT文件,其内容如下:

李 鸣 98 60 91 92 90 汪小莉 89 66 85 67 92 罗 乾 67 75 78 73 89 王小刚 77 70 88 80 94 蒋 涵 56 87 68 77 86

程序中,把每个学生的数据(姓名,5科成绩)作为一个子纪录写入文件SF3.DAT。在程序的写入语句中,既要有数据格式描述,也要指定子记录号,这是读者应当注意的地方。

由于直接文件可以对其子记录数据任意操作,因此,对建好的文件可以随机读取它的子记录数据。这是直接文件的特点。

【例8.6】 编写一程序,以随机查询方式读取文件SF3.DAT中的子记录数据。 DIMENSION M(5) CHARACTER NAME*8

OPEN(11,FILE='D:\\SF3.DAT',ACCESS='DIRECT', $ RECL=35,FORM='FORMATTED')

99 WRITE(*,*) ' Please input N=?' READ(*,*) N

IF (N.EQ.0.OR.N.GT.5) STOP

READ(11,'(A10,5I5)',REC=N) NAME,(M(I),I=1,5) WRITE(*,'(2X,A,2X,5I5)') NAME,(M(I),I=1,5) GOTO 99 END 程序运行显示:

Please input N=? 5

蒋 涵 56 87 68 77 86 Please input N=? 2

汪小莉 89 66 85 67 92 Please input N=? 1

李 鸣 98 60 91 92 90 Please input N=? 3

罗 乾 67 75 78 73 89 Please input N=? 4

王小刚 77 70 88 80 94 Please input N=? 0

Stop - Program terminated.

由程序运行可以看到,当随意指定一个子记录号,就把指定的学生姓名及5科成绩读出并显示出来。

8.3.4 无格式直接文件的使用

【例8.7】 编写一程序,产生5组随机小数,每组6个数,以无格式直接文件方式存入文件SF4.DAT中。

DIMENSION A(6)

OPEN(10,FILE='D:\\SF4.DAT',STATUS='UNKNOWN',ACCESS= $ 'DIRECT',RECL=50,FORM='UNFORMATTED') DO 10 I=1,5 DO 20 J=1,6 A(J)=RAND() 20 CONTINUE

WRITE(10,REC=I) (A(J),J=1,6) 10 CONTINUE END

FUNCTION RAND() SAVE SEED

INTEGER SEED,C1,C2,C3

PARAMETER (C1=29,C2=217,C3=1024) DATA SEED/12/

SEED=MOD(SEED*C1+C2,C3) RAND=REAL(SEED)/C3 RETURN END

程序运行后磁盘上有SF4.DAT文件。是一个非文本格式文件。 【例8.8】 编写一程序,任意读取SF4.DAT中的子记录数据并显示。 DIMENSION B(6)

OPEN(11,FILE='D:\\SF4.DAT',ACCESS='DIRECT', $ RECL=50,FORM='UNFORMATTED') 99 WRITE(*,*) ' Please input N=?' READ(*,*) N

IF (N.EQ.0.OR.N.GT.5) STOP READ(11,REC=N) (B(I),I=1,6)

WRITE(*,'(2X,6F10.6)')(B(I),I=1,6) GOTO 99 END 程序运行显示:

Please input N=? 1

.551758 .212891 .385742 .398438 .766602 .443359 Please input N=? 5

.153320 .658203 .299805 .906250 .493164 .513672 Please input N=? 3

.258789 .716797 .999023 .183594 .536133 .759766 Please input N=? 4

.245117 .320313 .500977 .740234 .678711 .894531 Please input N=? 2


fortran语言教程第8章.doc 将本文的Word文档下载到电脑
搜索更多关于: fortran语言教程第8章 的文档
相关推荐
相关阅读
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 10

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219