西安交大Fortran上机作业4
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
工程分析程序设计上机作业(四)
数组
上机目的:练习数组的声明、存储、操作,以及数组参数、动态数组的使用。
1、请声明一个大小为10的一维数组,它们的初值为A(1)=2, A(2)=4, A(3)=6, ……A(I)=2*I,
并计算数组中这10个数字的平均值。
PROGRAM MAIN
IMPLICIT NONE
INTEGER A(10)
INTEGER I,ANS,P
ANS=0
DO I=1,10
A(I)=2*I
END DO
DO I=1,10
WRITE(*,"('A','(',I2,')= ',I2)"),I,A(I)
END DO
DO I=1,10
ANS=ANS+A(I)
END DO
P=ANS/10.0
PRINT*,'AVERAGE=',P
END
2、编写一个程序来计算费氏数列的前10项,并把它们按顺序保存在一个一维数组当中。
费氏数列(Fibonacci Sequence)的数列规则如下:
F(0)=0
F(1)=1
当n>1时
F(n)=f(n-1)+f(n-2)
PROGRAM MAIN
IMPLICIT NONE
INTEGER F(0:9)
INTEGER I
DATA (F(I),I=0,1) /0,1/
DO I=2,9
F(I)=F(I-1)+F(I-2)
END DO
WRITE(*,"('F','(',I2,') =',I2)"),I,F(I)
END
PROGRAM MAIN
IMPLICIT NONE
INTEGER F(0:9)
INTEGER I
DATA (F(I),I=0,1) /0,1/
DO I=2,9
F(I)=F(I-1)+F(I-2)
END DO
PRINT*,F
END
3、输入任意n个数存放在数组中(如5个数1、2、8、2、10),请在屏幕上打印如下方阵
1 2 8 2 10
10 1 2 8 2
2 10 1 2 8
8 2 10 1 2
2 8 2 10 1
PROGRAM MAIN
IMPLICIT NONE
INTEGER A(5,5),B(5,5)
INTEGER I,J,T
A(1,:)=(/1,2,8,2,10/)
DO I=2,5
DO J=2,5
T=A(I-1,5)
A(I,J)=A(I-1,J-1)
A(I,1)=T
END DO
END DO
DO I=1,5
DO J=1,5
B(J,I)=A(I,J)
END DO
END DO
WRITE(*,10)B
10 FORMA T(1X,5I4)
END
4、打印杨辉三角形,打印的行数由键盘输入。1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
PROGRAM MAIN
IMPLICIT NONE
INTEGER,ALLOCA TABLE::A(:,:),B(:,:) INTEGER I,J,N
PRINT*,'PLEASE INPUT N'
READ*, N
ALLOCATE(A(N,N))
ALLOCATE(B(N,N))
A(1,1)=1
DO I=2,N
DO J=2,N-1
A(I,J)=A(I-1,J-1)+A(I-1,J)
A(I,1)=1;A(I,I)=1
END DO
END DO
DO I=1,N
DO J=1,N
B(J,I)=A(I,J)
END DO
END DO
WRITE(*,10)B
10 FORMA T(1X,
DEALLOCATE(A,B)
END
5、用“冒泡算法”对一个数列A(n)进行排序:
若要排序的数有n个,则需要n-1轮排序。第j轮排序中,从第一个数开始,相邻两数比较,若不符合所要求的顺序,则交换两者的位置;直到第n-j个数为止,第一个数与第二个数比较,第二个数与第三个数比较,......,第n-j-1个与第n-j个比较,共比较n-1次。此时第n-j个位置上的数已经按要求排好,所以不参加以后的比较和交换操作。例如:第一轮排序:第一个数与第二个数进行比较,若不符合要求的顺序,则交换两者的位置,否则继续进行二个数与第三个数比较......。直到完成第n-1个数与第n个数的比较。此时第n个位置上的数已经按要求排好,它不参与以后的比较和交换操作;第二轮排序:第一个数与第二个数进行比较,......直到完成第n-2个数与第n-1个数的比较;......第n-1轮排序:第一个数与第二个数进行比较,若符合所要求的顺序,则结束冒泡法排序;若不符合要求的顺序,则交换两者的位置,然后结束冒泡法排序。
共n-1轮排序处理,第j轮进行n-j次比较。
算法描述:
如果共有n个数:
第1个数要进行n-1次两两比较
第2个数要进行n-2次两两比较
第j个数要进行n-j次两两比较,j=1, n-j
n个数总共要进行n-1次排序
DO I = 1, N-1
DO J = 1, N-J
如果A(J) > A(J+1) 交换A(J) 和A(J+1) END DO
END DO
PROGRAM MAIN
IMPLICIT NONE
INTEGER,ALLOCA TABLE::A(:)
INTEGER I,J,N,T
PRINT*,"PLEASE INPUT N"
READ*,N
DO I=1,N
PRINT*,I
READ*,A(I)
END DO
DO I=1,N-1
DO J=1,N-I
IF(A(J)>A(J+1)) THEN
T=A(J)
A(J)=A(J+1)
A(J+1)=T
END IF
END DO
END DO
PRINT*,A
END
PROGRAM MAIN
IMPLICIT NONE
INTEGER,PARAMETER::X=7
INTEGER::A(X)=(/2,8,6,3,4,7,9/)
INTEGER::I,J
INTEGER::K
DO I=1,X-1