fortran中do循环中call子程序,子程序不循环
时间: 2024-05-14 20:15:15 浏览: 209
在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中子程序do循环中能调用另一个子程序吗
是的,Fortran中的子程序可以在do循环中调用另一个子程序。在子程序中调用其他子程序的方法与在主程序中调用相同,只需要在子程序中添加调用语句即可。例如:
```fortran
subroutine sub1()
do i = 1, 10
call sub2()
end do
end subroutine
subroutine sub2()
! do something
end subroutine
```
在上面的例子中,sub1子程序中使用do循环调用sub2子程序。
阅读全文