问题:我需要生成一个M * N矩阵,其中M代表行,N代表列。 该矩阵的元素应该类似于(i-1.0)* N + j。 这段代码不起作用,我无法理解为什么。 我使用Compaq Visual Fortran 6。
我除了这个代码必须生成一个矩阵。生成后,矩阵应该像
一样打印1.0 2.0 3.0
4.0 5.0 6.0
至于3 * 2矩阵。
现在这段代码根本无法正常工作,向我展示了一系列Windows执行错误。
INTEGER M, N, I, J
COMMON /BLK1/ MATA (256, 256)
READ (7, 100) M
READ (7, 100) N
100 FORMAT (I3)
CALL MATGEN (M, N)
DO 90003 I = 1, M
DO 90004 J = 1, N
WRITE (8, 101) MATA(I, J)
101 FORMAT (F8.1, ' ', \)
90004 CONTINUE
WRITE (8, 102)
102 FORMAT (/, /)
90003 CONTINUE
END
SUBROUTINE MATGEN (M, N)
REAL DUM
INTEGER I, J
COMMON /BLK1/ MATA (256, 256)
DUM = 1.0
DO 90001 I = 1, M
DO 90002 J = 1, N
MATA (I, J) = DUM + 1.0
90002 CONTINUE
90001 CONTINUE
RETURN
END
COMMON BLK1
REAL MATA (256, 256)
END
答案 0 :(得分:2)
您的代码存在一些问题:
PROGRAM TEST
)MATA
(隐含地)是一个整数。我添加了声明。请在将来使用IMPLICIT NONE
!MATA
会填充2
。 gfortran
版本不接受反斜杠来禁止换行。我不得不使用$
。有关详细信息,请参阅here。 STDIN
读取。 PROGRAM TEST
IMPLICIT NONE
INTEGER M, N, I, J
REAL MATA
COMMON /BLK1/ MATA(256, 256)
WRITE(*,*) 'Please enter M:'
READ (*, 100) M
WRITE(*,*) 'Please enter N:'
READ (*, 100) N
100 FORMAT (I3)
CALL MATGEN (M, N)
DO 90003 I = 1, M
DO 90004 J = 1, N
WRITE (8, 101) MATA(I, J)
101 FORMAT (F8.1, ' ', $)
90004 CONTINUE
WRITE (8, 102)
102 FORMAT (/, /)
90003 CONTINUE
END
SUBROUTINE MATGEN (M, N)
IMPLICIT NONE
INTEGER M, N
REAL DUM
INTEGER I, J
REAL MATA
COMMON /BLK1/ MATA(256, 256)
DUM = 0.0
DO 90001 I = 1, M
DO 90002 J = 1, N
DUM = DUM + 1.
MATA (I, J) = DUM
90002 CONTINUE
90001 CONTINUE
RETURN
END
这导致:
$ ./a.out
Please enter M:
2
Please enter N:
3
$ cat fort.8
1.0 2.0 3.0
4.0 5.0 6.0