fortran 定义矩阵元素位置问题
fortran 定义矩阵元素位置问题
不会处理矩阵元素的位置:
write 的格式是write(*,*)
但是具体规定的时候就不会了,如:
write(*,"(I3,I3/,I3,I3)")((m(r,c),c = 1,2),r = 1,2)是下面小程序的
(I3,I3/,I3,
program main
implicit none
integer,parameter ::row = 2
integer,parameter ::col = 2
integer ::m(row,col)
integer r 用来赋值row
integer 用来赋值column
data((m(r,c),r = 1,2),c=1,2)/1,2,3,4/
write(*,"(I3,I3/,I3,I3)")((m(r,c),c = 1,2),r = 1,2) 重点是这一行
end
这样输出的结果是:
1 3
2 4
如果那行换成write(*,*) ((m(r,c),c = 1,2),r = 1,2)
则输出的结果是
1 3 2 4
如果那行换成write(*,*) m
则输出的结果是
1 2 3 4
为什么会有这样的区别,原本设的是二维数组,怎么最后输出来就变成一维的了
(I3,I3/,I3,I3)
意思是,输出两个 I(整数)3(长度),然后换行(/),然后再输出两个整数,长度3
这是格式化输出.与数组没有什么关系.
因为有一个 / ,所以换行以后就是2行.
Fortran 的存储是列优先的.所以
write(*,*) m 结果是 1 2 3 4
他相当于 write(*,*) ((m(r,c),r = 1,2),c = 1,2) {Fortran 是列优先的,所以默认是先循环列,再循环行}
而 write(*,*) ((m(r,c),c = 1,2),r = 1,2) 先循环行,再循环列,则结果是 1 3 2 4
注意 r 和 c 的顺序.
最后一个很严重的错误!
二维数组,一维数组,是内存里的格式.它与输出一行,两行没有关系.
一维数组可以输出成一行,也可以输出成两行.
二维数组也可以输出成一行,也可以输出成两行.
他们也可以输出成三行,四行.只要你喜欢,可以按照任何方式输出.这不影响他在程序里是几维数组.