我的代码非常简单。我创建这个程序的想法是更好地理解Fortran中的模块。有人可以解释一下如何将变量值输入我的主程序。
我的模块代码如下:
module circlescalculation
double precision:: pi = 3.14159265359
contains
subroutine circumference(radius)
implicit none
double precision :: radius,c
c = 2.0d0 * pi * radius
return
end subroutine circumference
subroutine area(radius)
implicit none
double precision :: radius,a
a = pi * radius**2
return
end subroutine area
end module circlescalculations
现在我将在我的其他程序中调用此代码:
include 'circlescalculations.f90'
program circles
use circlescalculations
implicit none
double precision radius,c,a
print *, "This program calculates the circumference and area of any given
circle"
print *, "Please specify the radius:"
read *, radius
call circumference(radius)
call area(radius)
print *, "Area" , a
print *, "Circumference" , c
end program circles
我是Fortran的新手。我正在使用CYGWIN终端来调用编译器,因为我在Windows中运行。在我的终端中,我使用以下bash:
gfortran circlescalculations.f90 -c
gfortran circles.f90 -o test
./test
这是显然不正确的输出。
我做错了什么?
答案 0 :(得分:3)
程序c
中声明的变量a
和circles
与子程序c
中定义的a
和circumference
不同, area
。从概念上讲,您需要某种方法将答案返回主程序,正如您所说。
有许多方法可以做到这一点。根据最终目的和个人风格,“正确”方式会有所不同。我只想用这个答案指出你正确的方向。
返回数据的一个好的,直接的方法是传递子程序将答案的变量。你可以这样做:
subroutine area(radius,a)
double precision, intent(IN) :: radius
double precision, intent(OUT) :: a
a = pi * radius**2
end subroutine area
现在,radius
和a
都是子程序区域的参数,但一个是输入,另一个是输出 。要调用它,请使用:
call area(radius,a)
或者,您可以将area
声明为函数。祝你好运!