fortran数组顺序问题初学fortran,做了个数组相乘的算法program diagonaleinteger a(2,2),b(2,2),c(2,2)print*,'输入矩阵a'read*,aprint*,'输入矩阵b'read*,bc=0do i=1,2do k=1,2do j=1,2c(i,k)=c(i,k)+a(i,j)*b(j,k)enddoenddoenddoprint*,ce
来源:学生作业帮助网 编辑:作业帮 时间:2024/11/08 03:11:27
fortran数组顺序问题初学fortran,做了个数组相乘的算法program diagonaleinteger a(2,2),b(2,2),c(2,2)print*,'输入矩阵a'read*,aprint*,'输入矩阵b'read*,bc=0do i=1,2do k=1,2do j=1,2c(i,k)=c(i,k)+a(i,j)*b(j,k)enddoenddoenddoprint*,ce
fortran数组顺序问题
初学fortran,做了个数组相乘的算法
program diagonale
integer a(2,2),b(2,2),c(2,2)
print*,'输入矩阵a'
read*,a
print*,'输入矩阵b'
read*,b
c=0
do i=1,2
do k=1,2
do j=1,2
c(i,k)=c(i,k)+a(i,j)*b(j,k)
enddo
enddo
enddo
print*,c
end
发现这样算出来是错的,然后尝试发现比如一个3x3的数组123456789
按理说a(2,3)应该是6的,但是用fortran输出居然是8,i,j的含义颠倒了,查了书,自己没记错啊.求指教
fortran数组顺序问题初学fortran,做了个数组相乘的算法program diagonaleinteger a(2,2),b(2,2),c(2,2)print*,'输入矩阵a'read*,aprint*,'输入矩阵b'read*,bc=0do i=1,2do k=1,2do j=1,2c(i,k)=c(i,k)+a(i,j)*b(j,k)enddoenddoenddoprint*,ce
Fortran 数组是列优先的.即先存储前面的维度.
一个3*3二维数组,在内存中是:
1 2 3 4 5 6 7 8 9
Fortran访问时,给他们命名为a(1,1),a(2,1),a(3,1)...a(1,2),a(2,2),a(3,2)...a(1,3),a(2,3),a(3,3)
因而,a(2,3)=8