西安交大Fortran上机作业4

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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,I4)

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

相关文档
最新文档