这个 fortran 程序有什么错误?

What is error in this fortran program?

我正在编写以下 Fortran 90 程序并使用 GNU Fortran 编译器进行编译。但是,我遇到了一些我无法解决的错误。有人可以解释我哪里出错了吗?

PROGRAM FILE1
IMPLICIT NONE

INTEGER:: status,a,b,c,i,j

a=5
b=6
c=1

REAL,ALLOCATABLE,DIMENSION (:,:) :: arr1

ALLOCATE (arr1(a,b))

DO i=1,a,1
    DO j=1,b,1
        arr1(i,j)=c
        c=c+1
    END DO
END DO

DO i=1,a,1
    DO j=1,b,1
        WRITE (*,100,ADVANCE=NO) arr1(i,j)
        100 FORMAT (1X,I4.1)
    END DO
        WRITE (*,110)
        110 FORMAT ('',/)
END DO

DEALLOCATE(arr1)

END PROGRAM

我遇到了几个错误,例如在声明 REAL,ALLOCATABLE,DIMENSION (:,:) :: arr1 Error: Unexpected data declaration statement at (1) 中。我检查了几个来源的语法,但没有运气。语句 WRITE (*,100,ADVANCE=NO) arr1(i,j) 也有错误。有人可以评论吗?

发布的代码有几个问题:

  1. 您需要在执行任何其他语句之前定义所有变量。

    a=5
    b=6
    c=1
    

应该在最后一个变量定义之后:

REAL,ALLOCATABLE,DIMENSION (:,:) :: arr1
  1. 需要在WRITE语句中引用NO

    WRITE (*,100,ADVANCE="NO") arr1(i,j)
    
  2. 因为你写的是REAL值,你需要给出一个浮点数格式,比如f或者g

    100 FORMAT (1X,f7.3)
    

工作代码为:

PROGRAM FILE1
IMPLICIT NONE

INTEGER:: status,a,b,c,i,j

REAL,ALLOCATABLE,DIMENSION (:,:) :: arr1

a=5
b=6
c=1

ALLOCATE (arr1(a,b))

DO i=1,a,1
    DO j=1,b,1
        arr1(i,j)=c
        c=c+1
    END DO
END DO

DO i=1,a,1
    DO j=1,b,1
        WRITE (*,100,ADVANCE="NO") arr1(i,j)
        100 FORMAT (1X,f7.3)
    END DO
        WRITE (*,110)
        110 FORMAT ('',/)
END DO

DEALLOCATE(arr1)

END PROGRAM