我挑了其中一些有代表性的语句进行了注释,惊叹号(!)是Fortran里的注释.
很多语句可以举一反三.
integer row,i,j,k,n
!声明了五个整型变量
real s
!声明实型变量
real,dimension(:,:),allocatable::a,l,u
!声明实型二维数组
real,dimension(:),allocatable::b,x,y
!声明实型一维数组
read*,row
!从键盘读数据row
allocate(a(row,row))
!给二维数组a分配内存空间
read*,((a(i,j),j=1,row),i=1,row)
!从键盘读数组a
allocate(b(row))
read*,(b(i),i=1,row)
allocate(y(row))
allocate(x(row))
do k=1,row-1
!循环语句,k从1循环到row-1
do i=k+1,row
a(i,k)=a(i,k)/a(k,k)
do j=k+1,row
a(i,j)=a(i,j)-a(i,k)*a(k,j)
end do
!变量j的循环体结束
end do
end do
allocate(l(row,row))
do i=1,row
do j=1,row
if(i>j)then
!判断语句,i是否大于j
l(i,j)=a(i,j)
elseif(i==j)then
l(i,j)=1
else if(ij)then
u(i,j)=0
end if
end do
end do
print*,'a=',((a(i,j),j=1,row),i=1,row)
!在屏幕上输出数组a
print*,'l=',((l(i,j),j=1,row),i=1,row)
print*,'u=',((u(i,j),j=1,row),I=1,row)
n=10
do while(n>0)
!满足n>0时循环
y(1)=b(1)/l(1,1)
do i=2,row
sum=0
do j=1,i-1
sum=sum+l(i,j)*y(j)
end do
y(i)=(b(i)-sum)/l(i,i)
end do
print*,(y(i),i=1,row)
x(row)=y(row)/u(row,row)
do i=row-1,1,-1
!i从row-1循环到1,步长是-1,也就是倒着循环
sum1=o
do j=i+1,row
sum1=sum1+u(i,j)*x(j)
end do
x(i)=(y(i)-sum1)/u(i,i)
end do
print*,(x(i),i=1,row)
s=abs(x(1))
!abs是绝对值函数
do j=2,row
if(abs(x(j))>s)then
s=abs(x(j))
end if
end do
do i=1,row
b(i)=x(i)/s
end do
n=n-1
end do
end
!最后的end代表程序结束
!这里应该是开始了一个子程序
INTEGER ROW,COL,I,J,N
REAL,DIMENSION(:,:),ALLOCATABLE::B
REAL,DIMENSION(:),ALLOCATABLE::X,G
READ*,row,col
allocate(b(row,col))
read*,((b(i,j),j=1,col),i=1,row)
allocate(x(col),g(col))
read*,(x(i),i=1,col)
read*,(g(i),i=1,col)
read*,n
do while(n.ne.0)
!.ne.是not equal的意思,也就是判断n是否不等于0
do i=1,col
sum=0
do j=1,col
sum=sum+b(i,j)*x(j)
end do
x(i)=sum+g(i)
end do
n=n-1
print*,(x(i),i=1,col)
end do
end