fortran习题3答案.docx

上传人:b****6 文档编号:8870739 上传时间:2023-05-15 格式:DOCX 页数:15 大小:116.55KB
下载 相关 举报
fortran习题3答案.docx_第1页
第1页 / 共15页
fortran习题3答案.docx_第2页
第2页 / 共15页
fortran习题3答案.docx_第3页
第3页 / 共15页
fortran习题3答案.docx_第4页
第4页 / 共15页
fortran习题3答案.docx_第5页
第5页 / 共15页
fortran习题3答案.docx_第6页
第6页 / 共15页
fortran习题3答案.docx_第7页
第7页 / 共15页
fortran习题3答案.docx_第8页
第8页 / 共15页
fortran习题3答案.docx_第9页
第9页 / 共15页
fortran习题3答案.docx_第10页
第10页 / 共15页
fortran习题3答案.docx_第11页
第11页 / 共15页
fortran习题3答案.docx_第12页
第12页 / 共15页
fortran习题3答案.docx_第13页
第13页 / 共15页
fortran习题3答案.docx_第14页
第14页 / 共15页
fortran习题3答案.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

fortran习题3答案.docx

《fortran习题3答案.docx》由会员分享,可在线阅读,更多相关《fortran习题3答案.docx(15页珍藏版)》请在冰点文库上搜索。

fortran习题3答案.docx

fortran习题3答案

工程分析程序设计上机作业(四)

数组

上机目的:

练习数组的声明、存储、操作,以及数组参数、动态数组的使用。

1、请声明一个大小为10的一维数组,它们的初值为A

(1)=2,A

(2)=4,A(3)=6,……A(I)=2*I,并计算数组中这10个数字的平均值。

programmain

implicitnone

integerA(10)

integeri,sum

sum=0

doi=1,10

A(i)=2*i

sum=sum+A(i)

enddo

print*,'Theaverageofthetennumbersis:

',sum/10.

end

2、编写一个程序来计算费氏数列的前10项,并把它们按顺序保存在一个一维数组当中。

费氏数列(FibonacciSequence)的数列规则如下:

F(0)=0

F

(1)=1

当n>1时

F(n)=f(n-1)+f(n-2)

programmain

implicitnone

integeri

integer

(2)A(11)

A

(1)=0;A

(2)=1

doi=3,11

A(i)=A(i-1)+A(i-2)

enddo

print*,A(2:

11)

End

3、输入任意n个数存放在数组中(如5个数1、2、8、2、10),请在屏幕上打印如下方阵

128210

101282

210128

821012

282101

programmain

implicitnone

integer,allocatable:

:

A(:

integer

(2)i,j,n,temp

print*,'请输入数字的个数:

'

read*,n

allocate(A(n))

print*,'请输入数字:

'

read*,A(1:

n)

print*,A

doi=2,n

temp=A

(1)

doj=1,n-1

A(j)=A(j+1)

enddo

A(n)=temp

print*,A

enddo

deallocate(A)

end

4、打印杨辉三角形,打印的行数由键盘输入。

1

11

121

1331

14641

programmain

implicitnone

integer

(2),allocatable:

:

A(:

:

integeri,j,n

print*,'请输入要打印的行数:

'

read*,n

allocate(A(n,n))

doi=1,n

A(i,1)=1;A(i,i)=1

enddo

if(n>=2)then

doi=1,n-1

doj=1,i

A(i+1,j+1)=A(i,j)+A(i,j+1)

enddo

enddo

endif

doi=1,n

print*,A(i,1:

i)

enddo

deallocate(A)

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次排序

DOI=1,N-1

DOJ=1,N-J

如果A(J)>A(J+1)交换A(J)和A(J+1)

ENDDO

ENDDO

programmain

implicitnone

integer,allocatable:

:

A(:

integer

(2)i,j,k,n,temp

print*,'请输入数字的个数:

'

read*,n

allocate(A(n))

print*,'请输入数字:

'

read*,A(1:

n)

doi=1,n-1

doj=1,n-1

if(A(j)>A(j+1))then

temp=A(j)

A(j)=A(j+1)

A(j+1)=temp

endif

enddo

enddo

print*,A

deallocate(A)

end

6、从A、B两个数列中,把同时出现在两个数列中的数据删去。

例如:

A:

255891218

B:

58121214

操作完成后:

A:

2918

B:

14

programmain

implicitnone

integer

(2)A(7),B(5),Temp(7)

externalSub

dataA/2,5,5,8,9,12,18/

dataB/5,8,12,12,14/

integerm,n

Temp=A

print*,'删去相同的数后:

'

print*,'A'

callSub(Temp,B,7,5)

print*,'B'

callSub(B,A,5,7)

end

subroutineSub(C,D,m,n)

integer

(2)C(m),D(n)

integeri,j,k,m,n,p

p=m

10doi=1,p

doj=1,n

if(C(i)==D(j))then

dok=i,p-1

C(k)=C(k+1)

enddo

p=p-1

goto10

endif

enddo

enddo

print*,C(1:

p)

endsubroutine

7、高斯消去法求解线性代数方程组:

对于一般的n阶方程组,

高斯消去法步骤如下:

第一步:

,令

,用

乘第1个方程加到第i个方程上

,得同解方程组

其中

第二步:

,用

乘第2个方程加到第i个方程上

,则将

消去。

一般,设第k-1步后方程组化为如下的同解方程组

则第k步:

若若

,用

乘第k个方程加到第i个方程上(

),得到如下的同解方程组

其中

按上述做法,做完n-1步,原方程组化为同解的上三角形方程组

最后,设

,逐步代回得原方程组的解

此方程病态,提示:

列主元消去法,第k步消去过程选取第k行绝对值最大元素akq,交换k和q列,然后继续消去过程

注意:

上述公式中

的上标k,是用来区别消去过程中第k步利用的量。

在用编程求解时,可把

存在

位置,

存在

位置。

解方程组

(1)

(2)

programmain

implicitnone

real,allocatable:

:

A(:

:

real,allocatable:

:

X(:

integer

(2)i,j,k,n

real(4)m

print*,'请输入方程组所含方程的个数:

'

read*,n

allocate(A(n,n+1))

allocate(X(n))

print*,'请输入方程组的系数矩阵:

'

doi=1,n

read*,A(i,:

enddo

dok=1,n-1

doi=k+1,n

A(i,:

)=A(k,:

)*(A(i,k)/A(k,k)*(-1))+A(i,:

enddo

enddo

X(n)=A(n,n+1)/A(n,n)

dok=n-1,1,-1

m=0

doi=k+1,n

m=m+A(k,i)*X(i)

enddo

X(k)=(A(k,n+1)-m)/A(k,k)

enddo

doi=1,n

print*,'X(',i,')=',X(i)

enddo

deallocate(A)

deallocate(X)

End

选作:

魔方阵,古代又称“纵横图”,是指组成元素为自然数1、2…n的平方的n×n的方阵,其中每个元素值都不相等,且每行、每列以及主、副对角线上各n个元素之和都相等。

如3×3的魔方阵:

816

357

492

5×5的魔方阵:

17241815

23571416

46132022

101219213

11182529

魔方阵的排列规律如下:

(1)将1放在第一行中间一列;

(2)从2开始直到n×n止各数依次按下列规则存放;每一个数存放的行比前一个数的行数减1,列数加1(例如上面的三阶魔方阵,5在4的上一行后一列);

(3)如果上一个数的行数为1,则下一个数的行数为n(指最下一行);例如1在第一行,则2应放在最下一行,列数同样加1;

(4)当上一个数的列数为n时,下一个数的列数应为1,行数减去1。

例如2在第3行最后一列,则3应放在第二行第一列;

(5)如果按上面规则确定的位置上已有数,或上一个数是第一行第n列时,则把下一个数放在上一个数的下面。

例如按上面的规定,4应该放在第1行第2列,但该位置已经被占据,所以4就放在3的下面;

试打印出奇数阶魔方阵。

programmain

integern,i,x,y

integer

(2),allocatable:

:

a(:

:

print*,'请输入魔方的阶数(奇数)'

read*,n

allocate(a(n,n))

a=0;y=(n+1)/2;x=1;a(x,y)=1

doi=2,n*n

if(x==1.and.y==n)then

x=2

else

x=x-1

if(x==0)x=n

y=y+1

if(y==n+1)y=1

if(a(x,y)/=0)then

x=x+1;y=y-1

if(x==n+1)x=1

if(y==0)y=n

x=x+1

endif

endif

a(x,y)=i

enddo

doi=1,n

print*,a(i,1:

n)

enddo

endprogram

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2