用fortran做两个do循环给二维数组赋值,但错误了,能详解不
programszximplicitnoneinteger,parameter::row=2integer,parameter::col=2integerrinteger...
program szx
implicit none
integer,parameter::row=2
integer,parameter::col=2
integer r
integer c
integer :: m(row,col)
do r=1,2
do c=1,2
m(r,c)=(/1,2,3,4/)
write (*,"(I3,I3,/I3,I3)") m(r,c)
end do
end do
stop
end
错误原因:
D:\MSDev\MSDEV98\MyProjects\szx\szx.f90(18) : Error: The shapes of the array expressions do not conform. [M]
m(r,c)=(/1,2,3,4/) 展开
implicit none
integer,parameter::row=2
integer,parameter::col=2
integer r
integer c
integer :: m(row,col)
do r=1,2
do c=1,2
m(r,c)=(/1,2,3,4/)
write (*,"(I3,I3,/I3,I3)") m(r,c)
end do
end do
stop
end
错误原因:
D:\MSDev\MSDEV98\MyProjects\szx\szx.f90(18) : Error: The shapes of the array expressions do not conform. [M]
m(r,c)=(/1,2,3,4/) 展开
1个回答
展开全部
不需要用循环的。
integer :: m(row,col) = reshape((/1,2,3,4/),(/2,2/))
就可以了。
回到你的问题,一个表达式必须左右是平衡的。
m(r,c)=(/1,2,3,4/)
这里的等号左边是数组的一个元素,而右边是整个数组。
这是不行的。还有 write 最好在enddo 的外面
integer,parameter::row=2
integer,parameter::col=2
integer :: m(row,col) != reshape((/1,2,3,4/),(/2,2/))
integer :: i = 1 , r , c
do r=1,2
do c=1,2
m(c,r)=i
i=i+1
end do
end do
write(*,*) m
end
integer :: m(row,col) = reshape((/1,2,3,4/),(/2,2/))
就可以了。
回到你的问题,一个表达式必须左右是平衡的。
m(r,c)=(/1,2,3,4/)
这里的等号左边是数组的一个元素,而右边是整个数组。
这是不行的。还有 write 最好在enddo 的外面
integer,parameter::row=2
integer,parameter::col=2
integer :: m(row,col) != reshape((/1,2,3,4/),(/2,2/))
integer :: i = 1 , r , c
do r=1,2
do c=1,2
m(c,r)=i
i=i+1
end do
end do
write(*,*) m
end
来自:求助得到的回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询