fortran中有这样一段语句,说能告诉我是什么功能,并且这个翻译成c语句要怎么办呢?

2025-01-01 13:07:26
推荐回答(2个)
回答1:

!)是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(i l(i,j)=0
end if
end do
end do
allocate(u(row,row))
do i=1,row
do j=i,row
u(i,j)=a(i,j)
if(i>j)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

回答2:

allocate是定义动态数组,下面是将数组的值都设为0