Fortran中1的意外语句功能

问题描述 投票:1回答:1

我是Fortran的新手,正在编写这个小程序,为一个圆写出100个有序对。

但是我遇到了上面提到的错误,我不知道如何解决。

  implicit real*8(a-h,o-z)
  parameter(N=100)
  parameter(pi = 3.14159265358979d0)
  integer*8 k


  dtheta=2*pi/N
  r=1.0d0
  x00=0.0d0
  y00=0.0d0
  do k=0,N-1
   xb(k)=r*cos(k*dtheta)-x00
   yb(k)=r*sin(k*dtheta)-y00
  enddo

  open(64,file='xbyb.m',status='unknown')
  write(64,*) (xb(k),k=0,N-1),(yb(k),k=0,N-1)

  close(64)
  end
fortran fortran77
1个回答
4
投票

您不声明数组xbyb

尽管从技术上讲不是FORTRAN 77,但我仍然建议使用implicit none或至少一个等效的编译器选项来强制明确声明所有内容。隐式键入是邪恶的,并会导致错误。

如高性能​​标记所提醒,语法

  f(k) = something

声明称为语句功能的功能(在Fortran 95及更高版本中已过时)。它声明一个参数为k的函数。编译器识别出您的唯一方法是使用数组引用,而是正确地声明该数组。编译器抱怨声明函数是意外的,因为声明必须放在可执行的声明之前。

您在write语句中暗含的do循环无论如何都是Fortran 90,因此在21世纪无需坚持使用FORTRAN 77。

其他提示:status='unknown'是多余的,这是默认设置,只需将其忽略即可。您可以只写r = 1x00 = 0

© www.soinside.com 2019 - 2024. All rights reserved.