fortran习题参考答案.docx

上传人:b****5 文档编号:6337333 上传时间:2023-01-05 格式:DOCX 页数:9 大小:81.75KB
下载 相关 举报
fortran习题参考答案.docx_第1页
第1页 / 共9页
fortran习题参考答案.docx_第2页
第2页 / 共9页
fortran习题参考答案.docx_第3页
第3页 / 共9页
fortran习题参考答案.docx_第4页
第4页 / 共9页
fortran习题参考答案.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

fortran习题参考答案.docx

《fortran习题参考答案.docx》由会员分享,可在线阅读,更多相关《fortran习题参考答案.docx(9页珍藏版)》请在冰豆网上搜索。

fortran习题参考答案.docx

fortran习题参考答案

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

模块化编程

上机目的:

掌握内部例程、主程序、外部例程、模块等功能的使用方法。

1、有一个六边形,求其面积。

为求面积,作了3条辅助线。

如图所示:

(提示,三角形面积=

,其中

,a、b、c为三个边长)。

要求用内部函数来计算每个三角形的面积。

programmain

implicitnone

real:

:

A(9)=(/10,30,16,13,21,14,20,36,28/)

integeri

reals

s=area(A(3),A(4),A(7))+area(A

(2),A(7),A(8))+&

area(A

(1),A(8),A(9))+area(A(5),A(6),A(9))

print*,'Theareais',s

contains

functionarea(x,y,z)

implicitnone

realx,y,z

realp,area

p=(x+y+z)/2

area=sqrt(p*(p-x)*(p-y)*(p-z))

endfunction

end

2、编写一个子例程子程序,SUM(S,T,N1,N2)。

把整型数N1到N2进行求和,并把求和的结果放置到S,把整型数N1到N2进行求积,并把求积的结果放置到T。

并用这个子程序来计算:

programmain

implicitnone

integerA(8)

integeri,b,c,d,e,f,g,m,n,y

b=0;d=0;g=1;n=1

doi=1,8

A(i)=i

enddo

callsum(b,c,1,4)

callsum(d,e,3,8)

callsum(f,g,3,6)

callsum(m,n,1,3)

y=b+d+g-n

print*,'y=(1+2+3+4)+(3+4+5+6+7+8)+(3*4*5*6)-(1*2*3)=',y

contains

subroutinesum(s,t,N1,N2)

integers,t,N1,N2,i

doi=N1,N2

s=s+A(i)

t=t*A(i)

enddo

endsubroutine

end

3、编写函数子程序GDC求两个数的最大公约数。

求最大公约数的算法如下:

把两个数中大的那个数作为被除数,两数相除得到一个余数。

把余数去除除数得到新一轮的余数。

不断重复这一过程直到余数为0,这时的除数就是两个数的最大公约数。

调用此函数,求1260,198,72三个数的最大公约数。

programmain

implicitnone

integera,b,c,m,n,temp

print*,'请输入三个数:

'

print*,'abc'

read*,a,b,c

if(a

temp=a

a=b

b=temp

endif

callGDC(a,b,m)

if(c

temp=c

c=m

m=temp

endif

callGDC(m,c,n)

print*,'最大公约数为',n

contains

subroutineGDC(x,y,z)

integerx,y,z,k

dowhile(mod(x,y)/=0)

k=mod(x,y)

x=y

y=k

enddo

z=y

endsubroutine

end

4、编写一个模块程序,提供以下服务:

定义出常量、e。

定义出子程序,实现求和

、求阶乘n!

并在主程序中计算如下结果:

从键盘上输入整数n、实型数A、R、R0,求

(实型)和

(实型)。

modulemytask

implicitnone

real,parameter:

:

PI=3.1415926

real,parameter:

:

e=2.7182818

contains

functionsub(n)

integeri,n,sub

sub=0

doi=1,n

sub=sub+i*i

enddo

endfunctionsub

functionfact(n)

integeri,n

realfact

fact=1

doi=1,n

fact=fact*i

enddo

endfunctionfact

endmodulemytask

programmain

usemytask

implicitnone

integern

realA,R,R0

realx,y

print*,'请输入依次n,A,R,R0:

'

read*,n,A,R,R0

x=fact(n)/sub(n)

y=(A*n/(2*PI*R*R))*(R/R0)**n*e**(-(R/R0)**n)

print*,'n!

/∑n^2(i=1,n)=',x

print*,'(A*n/(2*PI*R*R))*(R/R0)**n*e**(-(R/R0)**n)',y

endprogram

5、编写外部函数,计算

的值,直到最后一项的绝对值小于10-6为止。

再编写主程序,从键盘读入x,调用该外部函数并输出sinx的计算结果。

注意不能用Fortran的标准函数SIN(X)。

programmain

implicitnone

realx,p

externalsub

print*,'请输入角度x:

'

read*,x

p=x/180*3.14

callsub(p)

endprogram

subroutinesub(k)

implicitnone

realk,y

integeri

y=0

i=1

dowhile(abs(k**i/(fact(i)))>1.0e-6)

y=y+(-1)**((i-1)/2)*k**i/(fact(i))

i=i+2

enddo

print*,'sin(x)=',y

contains

functionfact(m)

integerm,j,fact

fact=1

doj=1,m

fact=fact*j

enddo

endfunctionfact

endsubroutinesub

6、编写程序,用欧拉法数值求解一阶微分方程。

数值解法的基本思想:

用差分方程代替微分方程,然后在若干个离散点上逐点求解差分方程,得到各离散点x0,x1,x2,…等处函数

的近似值y0,y1,y2,…。

其中各离散点x0,x1,x2,…之间的距离称为步长h。

欧拉法的基本思想是,一阶微分

可用向前差分代替,即

带入微分方程,可得

因此,

,其中

当给定x0,y0和步长h后,即可按下面步骤求得数值解:

请按上述方法编写程序用Euler法求解微分方程

,当x0=0时,y0=1.0。

取h=0.1,试求出当xi=0.1,0.2,0.3,0.4….,1.0时的yi值。

programmain

implicitnone

realx(0:

10)

realy(0:

10)

realp(0:

10)

integer

(2)i,j

y(0)=1.0;x(0)=0.0

p(0)=f(x(0),y(0))

doi=1,10

x(i)=x(i-1)+0.1

enddo

doj=1,10

y(j)=y(j-1)+0.1*p(j-1)

p(j)=f(x(j),y(j))

print*,'x(',j,')=',x(j),'y(',j,')=',y(j)

enddo

contains

functionf(a,b)

reala,b,f

f=b*b-a*a

endfunction

end

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

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1