Matrix FORTRAN:写语句时控制新行

Matrix FORTRAN:写语句时控制新行,matrix,fortran,Matrix,Fortran,我需要用fortran中的新行来解决这个倒转的问题。例如,在屏幕上打印矩阵。我正在使用: do i=1,n do j=i,m write(*, fmt="(f0.2, tr2)", advance="no") matrix(i,j) end do end do 这样就可以把整个矩阵放在同一条线上。我需要把每一行放在它自己的地方,我想知道是否有一种优雅的方式来做到这一点。我的解决办法是: do i=1,n do j=i,m write(*, fmt="(f0.2, tr2)", a

我需要用fortran中的新行来解决这个倒转的问题。例如,在屏幕上打印矩阵。我正在使用:

do i=1,n
 do j=i,m
  write(*, fmt="(f0.2, tr2)", advance="no") matrix(i,j)
 end do
end do
这样就可以把整个矩阵放在同一条线上。我需要把每一行放在它自己的地方,我想知道是否有一种优雅的方式来做到这一点。我的解决办法是:

do i=1,n
 do j=i,m
  write(*, fmt="(f0.2, tr2)", advance="no") matrix(i,j)
 end do
 write(*, fmt="(a)") " "    <---------- NOT ELEGANT
end do
do i=1,n
doj=i,m
写入(*,fmt=“(f0.2,tr2)”,advance=“no”)矩阵(i,j)
结束

写(*,fmt=“(a)”””在我的脑海中,我会提取最后一条写语句,但这并不比您的解决方案优雅多少:

program test
  implicit none
  integer,parameter :: n=3, m=3
  real    :: matrix(n,m)
  integer :: i, j

  call random_number( matrix )

  do i=1,n
    do j=i,m-1
       write(*, fmt="(f0.2, tr2)", advance="no") matrix(i,j)
    end do
    write(*, fmt="(f0.2, tr2)") matrix(i,m)
  end do

end program
如果您的编译器支持它,Fortran 2008有一个很好的功能,叫做Then,您的问题可以通过一个
do
循环来解决:

program test
  implicit none
  integer,parameter :: n=3, m=3
  real    :: matrix(n,m)
  integer :: i

  call random_number( matrix )

  do i=1,n
    write(*, fmt="(*(f0.2, tr2))") matrix(i,i:m)
  enddo ! i

end program

至少4.10.0版的Gfortran编译了上面的第二个代码。感谢您提供的示例。@Fortranner此功能已添加到gfortran in…中。对于较旧的Fortran版本,只需将*替换为99999即可