program calculate_distance
implicit none
integer, parameter :: num_satellites = 100 ! 假设卫星数量为100
real :: satellite_positions(num_satellites, 3)
real :: distances(num_satellites)
integer :: i
! 假设这里已经给satellite_positions数组赋值
! 例如通过读取文件等方式
do i = 1, num_satellites
distances(i) = sqrt(satellite_positions(i, 1)**2 + satellite_positions(i, 2)**2 + satellite_positions(i, 3)**2)
end do
! 输出结果,这里可根据实际需求替换为更合适的处理方式
do i = 1, num_satellites
write(*,*) '卫星 ', i,'到地球质心的距离: ', distances(i)
end do
end program calculate_distance
处理数组越界问题
- 确定数组大小:在定义数组时,确保数组大小足够容纳所有数据。例如在上面的代码中,
satellite_positions
数组的第一维大小定义为num_satellites
,如果实际卫星数量可能变化,需要根据实际情况动态分配数组大小,如使用ALLOCATABLE
数组结合ALLOCATE
语句。
- 边界检查:在循环中访问数组元素时,要确保索引值在有效范围内。例如在上面计算距离的
DO
循环中,i
的取值范围是从1到num_satellites
,这就保证了对satellite_positions
和distances
数组的访问不会越界。如果是从外部获取数据填充数组,需要检查数据的数量是否与数组大小匹配,避免写入越界。
- 使用安全的数组操作函数:Fortran 2003及更高版本提供了一些数组操作函数,在使用这些函数时,要确保其参数不会导致数组越界。例如
RESHAPE
函数,如果新的形状定义不当可能导致越界。