MST

星途 面试题库

面试题:Fortran 中数组操作相关问题

在 Fortran 中,假设有一个二维数组 `A(10, 10)`,编写一段代码实现将其转置(即原数组的行变为列,列变为行),并说明在 Fortran 数组操作时需要注意哪些要点。
20.3万 热度难度
编程语言Fortran

知识考点

AI 面试

面试题答案

一键面试
program transpose_array
    implicit none
    integer :: A(10, 10)
    integer :: B(10, 10)
    integer :: i, j

   ! 初始化数组A,这里简单赋值,实际应用可按需修改
    do i = 1, 10
        do j = 1, 10
            A(i, j) = i + j
        end do
    end do

   ! 转置数组
    do i = 1, 10
        do j = 1, 10
            B(i, j) = A(j, i)
        end do
    end do

   ! 输出原数组
    write(*,*) '原数组A:'
    do i = 1, 10
        write(*,*) A(i, :)
    end do

   ! 输出转置后的数组
    write(*,*) '转置后的数组B:'
    do i = 1, 10
        write(*,*) B(i, :)
    end do
end program transpose_array

Fortran数组操作要点

  1. 数组声明:在使用数组前,必须先声明其类型、大小和维度。例如 integer :: A(10, 10) 声明了一个二维整型数组 A,其大小为10x10。
  2. 数组下标:Fortran数组下标默认从1开始,这与一些其他编程语言(如C语言从0开始)不同。在进行数组操作时要注意下标范围,避免越界错误。
  3. 内存存储:Fortran数组按列优先存储,即先存储第一列的所有元素,再存储第二列,以此类推。在进行复杂的数组操作(如转置、切片等)时,需要考虑这种存储方式对性能和算法的影响。
  4. 数组操作的效率:Fortran支持对整个数组进行操作,如 A = B 可将数组 B 的内容复制到数组 A 中,这种操作通常比使用循环逐个元素操作更高效。但在某些情况下,特别是对大型数组进行复杂运算时,需要注意缓存命中率和内存访问模式对性能的影响。
  5. 数组边界检查:虽然Fortran 2003及后续版本提供了一些数组边界检查功能,但默认情况下并不总是开启。在编写代码时,需要手动确保数组访问在合法范围内,以避免程序运行时出现未定义行为。