当前位置:文档之家› Fortran上机作业(五)

Fortran上机作业(五)

工程分析程序设计 上机作业(五)
数组(1)
上机目的:练习数组的声明、存储、操作,以及数组参数、动态数组、数组函数的使用。
1、 打印杨辉三角形(格式不限)。
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
program yanghui_triangle
implicit none
real::T(5,5) !第一个数代表列,第二个代表行
integer i,j
Do j=1,5
T(1,j)=1
T(j,j)=1
end Do

DO j=3,5
DO i=2,j
T(i,j)=T(i-1,j-1)+T(i,j-1)
end Do
end Do
print*,T
end program

2、 输入两个矩阵,并用矩阵作为子程序的参数,用子程序完成任意两个矩阵的乘法。(如
果可能,用数组函数子程序来完成这一功能)
program array
integer,parameter::m=2,n=2 !只需要改变常量的大小即可改变数组形状
real A(m,n),B(m,n),C(m,n)
read*,A,B
call ar(A,B,m,n,C)
print*,C
end program
subroutine ar(A,B,m,n,C)
integer m,n
real A(m,n),B(m,n),C(m,n)
C=A*B
end subroutine

3、 用“冒泡算法”对一个数列A(I)进行从小到大排序,步骤如下:(1)若A(2)将A(2)与A(1)对换位置。(2)若A(3)骤(1)。(3)对A(4)、A(5)等数列中的所有数,重复以上算法,直到整个数组中的元素
从小到大排列。(因为这种算法的特点是,每个元素总是和比它大的数交换位置,小的
元素不断“上浮”,象水中的气泡不断上浮一样,所以称之为“冒泡算法”)
program maopao
implicit none
integer ,parameter::I=10
integer J,k
real A(I),temp
print*,'input',I,' numbers'
read*,A
DO j=1,I-1
DO k=1,I-j
if ( A(k)>A(k+1) ) then
temp=A(k)
A(k)=A(k+1)
A(k+1)=temp
end if
end do
end DO
print*,A
end program

4、 从A、B两个数列中,把同时出现在两个数列中的数据删去。例如:
A:2 5 5 8 9 12 18
B:5 8 12 12 14
操作完成后:
A:2 9 18
B:14
program delete_num
implicit none
real,allocatable::A(:),B(:),C(:),D(:)!尝试用动态数组将比较后的数组分别存入C,D
integer ::i,j,m,n,x=1,y=1
print*,'分别输入两个数组中元素个数m,n'
read*,m,n

allocate(A(m))
allocate(C(m))
allocate(B(n))
allocate(D(n))
print*,'输入数组A'
read*,A
print*,'输入数组B'
read*,B

DO i=1,m
Do j=1,n
if (A(i)==B(j)) exit
if (j==n.and.A(i)/=B(j)) then
C(x)=A(i)
x=x+1
endif
end do
enddo

DO i=1,n
Do j=1,m
if (B(i)==A(j)) exit
if (j==m.and.B(i)/=A(j))then
D(y)=B(i)
y=y+1
endif
enddo
enddo

write(*,'("输出两变化后的数组:")',advance='yes')
write(*,'("A:")',advance='no')
DO i=1,x-1
if (i/=x-1)then
write(*,'(f10.2)',advance='no') C(i)
else
write(*,'(f10.2)',advance='yes') C(i)
endif

enddo
write(*,'("B:")',advance='no')
DO i=1,y-1
if (i/=y-1)then
write(*,'(f10.2)',advance='no') D(i)
else
write(*,'(f10.2)',advance='yes') D(i)
endif
enddo

end program

相关主题