fortran中do循环中call子程序,子程序不循环
时间: 2024-05-14 09:15:15 浏览: 10
在FORTRAN语言中,可以在DO循环中调用子程序,而子程序本身不需要进行循环操作。例如:
```
program main
implicit none
integer :: i, n
real :: x(10)
do i = 1, 10
x(i) = i**2
end do
n = 5
call mysub(n, x)
end program main
subroutine mysub(n, x)
integer, intent(in) :: n
real, intent(in) :: x(n)
integer :: i
real :: total
total = 0.0
do i = 1, n
total = total + x(i)
end do
print*, "The sum is:", total
end subroutine mysub
```
在上面的代码中,主程序中使用DO循环初始化了一个数组x,然后调用了一个名为"mysub"的子程序,并将n和x作为参数传递给它。子程序中使用DO循环计算数组x中前n个元素的总和,并将结果输出到屏幕上。
需要注意的是,子程序中的DO循环和主程序中的DO循环是两个不同的循环,它们的计数器变量是独立的。在子程序中使用的n和x参数必须在子程序声明中使用INTENT关键字进行说明,以确保它们不会被子程序修改。
相关问题
fortran中怎么使子程序可以共用主程序循环变量
在Fortran中,可以通过在子程序中声明主程序中使用的循环变量为“共享”的方式来使子程序可以共用主程序循环变量。具体做法是在主程序中通过“!$OMP SHARED(variable)”将循环变量声明为共享变量,然后在子程序中使用相同名称的变量即可。
以下是一个示例代码:
```
program main
integer :: i, n
real :: sum
n = 10
sum = 0.0
!$OMP PARALLEL SHARED(i, n, sum)
call sub(sum, n)
!$OMP END PARALLEL
print *, "sum = ", sum
contains
subroutine sub(sum, n)
real, intent(inout) :: sum
integer, intent(in) :: n
integer :: i
do i = 1, n
sum = sum + i
end do
end subroutine sub
end program main
```
在主程序中,将循环变量“i”和“n”以及计算结果“sum”声明为共享变量;子程序“sub”中使用了相同名称的变量“sum”和“n”,这样就可以在子程序中共用主程序中的循环变量了。
FORTRAN中主程序需要用到子程序的参数该怎么办
在FORTRAN中,可以通过将参数传递给子程序来实现主程序和子程序之间的数据交换。具体来说,可以在子程序定义中使用参数列表来声明子程序所需的参数,然后在调用子程序时将这些参数传递给它。在子程序内部,可以使用这些参数进行计算,并将结果返回给主程序。
举个例子,假设主程序需要调用一个名为SUB的子程序,并将两个实数A和B作为参数传递给它。子程序中需要计算这两个数的和并将结果返回给主程序。可以使用以下代码实现:
```
PROGRAM MAIN
REAL A, B, SUM
A = 1.0
B = 2.0
CALL SUB(A, B, SUM)
WRITE(*,*) 'The sum of A and B is:', SUM
END
SUBROUTINE SUB(A, B, SUM)
REAL A, B, SUM
SUM = A + B
RETURN
END
```
在这个例子中,主程序定义了两个实数A和B,并将它们传递给子程序SUB。在子程序中,接受这两个参数,并计算它们的和。计算结果SUM被存储在子程序中,并通过参数列表返回给主程序。最后,主程序输出SUM的值。