西安交通大学fortran习题doc文档格式.docx

上传人:b****5 文档编号:16338092 上传时间:2022-11-23 格式:DOCX 页数:17 大小:22.76KB
下载 相关 举报
西安交通大学fortran习题doc文档格式.docx_第1页
第1页 / 共17页
西安交通大学fortran习题doc文档格式.docx_第2页
第2页 / 共17页
西安交通大学fortran习题doc文档格式.docx_第3页
第3页 / 共17页
西安交通大学fortran习题doc文档格式.docx_第4页
第4页 / 共17页
西安交通大学fortran习题doc文档格式.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

西安交通大学fortran习题doc文档格式.docx

《西安交通大学fortran习题doc文档格式.docx》由会员分享,可在线阅读,更多相关《西安交通大学fortran习题doc文档格式.docx(17页珍藏版)》请在冰豆网上搜索。

西安交通大学fortran习题doc文档格式.docx

J=J+1

enddo

doi=l,52

if(mod(s⑴,2)==0)then

write(*,*)i

endif

endprogrammain

〃用c语言写

#include<

stdio.h>

intmain()

{

ints[52];

inti,j;

for(i=0;

i<

52;

i++)s[i]=0;

for(i=l;

=51;

i++)

{for(j=i;

j<

=51;

j+二i+1)//也可以写作j=j+i+1,不能写作j=j+i+1

s[j]二s[j]+l;

}

斐波拉契

使用递归时result()不能与函数名相同

PROGRAMMAIN

IMPLICITNONE

INTEGERn,i,sum

rcad*,nif(n<

0)THENPRINT*,"

出错”

ENDIF

write(*,*)'

f(n)=,,f(n)doi=l,nsum=sum+f(n)enddowrite(*,*),sum=\sumcontains

recursivefunctionf(n)result(g)integergj

if(n==0)then

g=0

elseif(n==l.or.n==2)then

g=l

else

g=f(n-l)+f(n-2)

endfunction

Endprogram

分解质因数

integera,c,i,b

print*,"

请输入一个大于二的整数"

read*,a

print*,呗!

j它的所有质因子为

dowhile(a/=l)

i=l

b=l

dowhile(b/=0)

i=i+l

b=mod(aj)

c=i

a=a/c

print*,c

endprogram

哥德巴赫猜想

屏幕上不能显示500,所以不能将结果完全显示,需要将结果输入文件

FUNCTIONf(i)

INTEGERi,f,h

f=0

if(i>

l)lhen

doh=2,i-l

if(mod(i,h)==0)then

f=f+l

endifenddoendifendfunction

programmainimplicitnoneinteger(4)i,j,n,fintegers

don=4,600,2

s=0

j=o

doi=hn/2-lj=n-iif(f(i)==O.and<

f(j)==O)thens=s+lendif

jf(s==O)then

print*,n;

不满足猜想’elseprint*,n,sendifenddo

黄金值法解方程

将中值法中取中点的值改为取黄金点的值,理论上可以提髙效率modulegolden_section

reala,b,c

contains

subroutinesubl(abc)

reala,b,c,yc

c=(a*0.618+b)/1.618

yc=f(c)

dowhile(abs(yc)>

0.00001)

if(yc*f(a)<

O)then

b=c

a=c

c=(a*0.618+b)/1.618yc=f(c)

endsubroutine

functionf(x)realf,xf=x*x・4.0*x+3

endmodulegolden_sectionprogrammain

usegolden_section

reale

请输入解的下界a"

请输入解的上界b”

read*,b

e=f(a)*f(b)

用一个循环来判断输入值是否合适,或者就是解

if(f(a)==O)then

print*,a

elseif(f(b)==O)then

print*,b

dowhile(e>

0)

print*,Hf(a)=,f(a);

f(b)=,f(b)谓重新输入F界a"

print*;

*请重新输入解的下界b”

enddocallsubl(a,b,c)endif

print*,cend

回文输出

integera(5),b(5)

dataa/l,2,8,2,10/

datab/2,3,4,5,6/

doi=l,5

doj=l,5

b(j)=b(j)-l

if(b(j)<

l)then

b(j)二b(j)+5

print*,a(b(1:

5))!

实践证明这是正确的输出方法

forall语句中不能使用讦语句,但可以用where语句,注意()中的内容变化但本题从逻辑上就应该先做完forall,再做where,故不必嵌套

implicitnoneintegerijintegera(6),b(6)DATAa/l,4,9,16,25,36/datab23,4,5,6,7/doi=l,6

forall(j=l:

6)b(j)=b(j)・lendforall

where(b==0)!

可以写为where(b(:

)==0)b(:

)=b(:

)+6endwhereb=b+6endwhereprint\a(b(l:

6))!

回文数据若干相邻想和并比较大小

1.圆盘上有如图1

(1)所示的20个数。

请找出哪四个相邻的数之和为最大。

请指出他们的位置和数值。

如果是1

(2)图,又是哪四个相邻的数?

programmainimplicitnone

integera(20),b(23),c(20)

integeri,j,d,edataa/20,21,&

4,13,6,10,15,2,17,3,19,7,16,&

11,14,9,12,5/

datab/1,2,3,4,5,6,7,&

9,10,11,12,13,14,15,16,17,1&

19,20,1,2,3/

doi=l,20

c(i)=a(b(i))+a(b(i+1))+a(b(i+2))+a(b(i+3))

e=l

doi=l,19

if(c(l)<

c(i+l))then

d=c(l)

c(l)=c(i+l)

c(i+l)=d

e=i+l

print*,c(l)

write(*,*)(a(b(i)),i=e,e+3)

〃用C语言写,注意C的数组从0开始计数,所有的i变量减一;

嵌套数组仍然有效

#include<

inta[20]={20,21,8413610」5,2,17,3J9,7,16,8,11,14,9,12,5};

intb[23]={0,1,2,3,4,5,6,7,&

9,10,11,12,13,14,15,16,17,18,19,0,1,2};

intc[20];

intijd,e;

=18;

c[i]二a[b[i]]+a[b[i+l]]+a[b[i+2]]+a[b[i+3]];

e=0;

=l&

{if(c[0]vc[i+l])

d=c[0];

c[0]=c[i+l];

c[i+l]=d;

c=i+1;

printif和最大的是%山这四个数是:

\njc[0]);

for(i=e;

=e+3;

prinlf(“%d,”,a[b[i]]);

return0;

圆盘上有如图所示的K个数。

请找出哪1个相邻的数之和为最大。

请指出他们的位置和数值。

integeri

integerk」

integenallocatable:

:

a(:

),b(:

).c(:

print*/请输入数据的总数”

read*k

1请输入求和的元素个数”

read*」

allocate(a(k),b(k+l-1),c(k))

print*/请依次输入数据“

doi=l,k

rcad*,a(i)

b(i)=i

doi=k+l,k+l-l

b(i)=i-k

doj=i,i+l-l

c(i)=c(i)+a(b①)!

一・维数组嵌套的功能可由二维数组代替enddo

doi=1,k-1

c(i+l))thcn

c二i+1

prim*,湘最大为,c(l),这些数为’

write(*,*)(a(b(i)),i=e,e+l-l)

计算六边形的面积

REALAREA,L1,L2,L3,L4,L5,L6,L7,L&

L9,L10,L11,L12

PRINT*,”请输入将六边形分割成三角形后各个三角形的边长“

PRINT*;

'

第一个三角形三边为”

READ*,L1X2,L3

第二个三角形三边为”

READ*,L4,L5,L6

第三个三角形三边为”

READ*,L7,L&

L9

PRINT*,”第四个三角形三边为”

READ*,L1O,L11,L12

AREA=F(L1,L2,L3)+F(L4,L5,L6)+F(L7,L&

L9)+F(L10,L11,L12)write(*,*)AREA

CONTAINS

FUNCTIONF(A,B,C)

REALF,A,B,C,S

S=(A+B+C)/2

F=SQRT(S*(S-A)*(S-B)*(S-C))

ENDFUNCTION

END

计算最大公约数和最小公倍数

计算两个数的最小公倍数与最大公约数

INTEGERX,Y,F,G

PRINT*,”请输入两个正整数“

READ*,X,Y

G=X*Y/F(X,Y)write(*,*)"

ft大公因数为“,F(X,Y)write(*,*)H最小公倍数为”,GENDPROGRAMMAIN

F

FUNCTIONF(X,Y)

INTEGERX,Y,Z,F

IF(X<

Y)THEN

Z=Y

Y=X

X=Z

ENDIF

Z=X-Y

DOWHILE(Z/=Y)

IF(Z>

ELSEX=YY=ZENDIFZ=X-YENDDO

F=Z

牛顿法解方程

另外还要求函数处处可导

牛顿法解方程,效率高,但是方程有多解时,解对初值很敏感;

modulenewton

realx,y,k,v

containssubroutinesubl(x)

realx,k,y

realdxdx=0.00001

y=f(x)

k=(f(x)-f(x-dx))/dx

注意方程不要解错

dowhile(abs(y)>

0.00001)x=x-y/k

enddoendsubroutinefunctionf(x)

realf,x

f=x*x・4.0*x+3

endmodulenewtonprogrammainusenewtonimplicitnone

*请输入初值x:

”read*,xcallsubl(x)print*,x

牛追人问题

用派生定义坐标,但没有定义向量运算符

本题可以不用派生,直接定义坐标变位,应该可以简化。

精度由v的增量,时间间隔t,判定相遇的临界距离三者决定

modulemodule1

typevector

realx

realy

endtype

下面的声明语句可以不要,但私下下认为不应省略

type(vector):

va,vc,ra,rc,dr!

模块中定义了type后,其他例程都不用再定义但要声明变量realv,t

functionnorm(r)

realnorm

type(vector):

r

norm=(EX*r.x+r.y*r.y)**0.5

endfunctionsubroutinesubl(vja)type(vector):

va,vc,ra,rc,drreal

t=0.1

ra.x=10

ra.y=50

rc.x=0

rc.y=0

vc.x=5.0/(26**0.5)

vc.y=5.0/(26:

l:

*0.5)*5

va.x=v*2.0/(5**0.5)

va.y=v*(-1.0)/(5**0.5)

d匚x=ra.x

dr.y=ra.y

dowhile(norm(dr)>

l)rc.x=rc.x+vc.xrc.y=rc.y+vc.y*t

ra.x=ra.x+va.x*t

ra.y=ra.y+va.y*t

dr.x=ra.x-rc.x

di;

y二ra.y・rc・y

vc.x=5*dr.x/(norm(dr))

vc.y=5*d匚y/(norm(dr))

endsubroutinesubl

endmoduleprogrammain

usemodule1

v=0

小孩的速度应为

dowhile(ra.x<

60.0)v=v+0.1

callsubI(v,ra)

write(*,*)v,ra.x

write(*,*)v

判断闰年

subroutinesubl(p)

integer.target:

p

integer,pointer:

a

if(mod(p,400)==0.or.mod(p,100)/=0.and.mod(p,4)==0)then!

事实证明这么写是正确的

a=>

endifendsubroutine

programmainimplicitnoneintegeriintegertarget:

pdop=1900,2008callsubl(p)enddo

endprogrammai

最大公约数

辗转相除法

INTEGERM,N

PRINT*,”请输入两个正整数“read*,M,N

print*,他们的最大公约数为

print*,F(M,N)

FUNCTIONF(M,N)integerM,N,F,I,P1=1

IF(M<

N)THEN

P=M

M=N

N=P

DOWHILE(I/=0)

I=MOD(M,N)

N=I

ENDDO

F=M

ENDPROGRAM

秦九韶算法

print*,F(M,N)contains

I=M-N

梯形积分moduleintegralimplicitnoneintegernreala,b

containsfunctions(n,a,b)

integern

reala,b

reals,h

h=(b-a)/n

doi=l,n,l

s=s+(f(a+h*(i-l))+f(a+h*i))/2*henddoendfunctionfunctionf(x)

realx,f

f=cxp(x)

endmoduleintegralprogrammainuseintegralimplicitnone

write(*,*)”被积函数f=eAx,请输入积分下限a,与积分上限b:

nread*,a,b

write(*,*)"

i#输入n,"

rcad*,n

积分结果为:

”,s(n,a,b)

用幕级数近似计算

REAL(8)X,SIN,A

READ*,X

CALLISIN(X,S1N,A)

PRINT*,SIN

SUBROUTINEISIN(X,SIN,A)

REAL(8)SIN,X,A

INTEGERI

1=0

SIN=X!

明确累加从何开始

A=X

DOWHILE(ABS(A)>

=0.0000006)

1=1+1

A=A*(-1)*X*X/(I*2+1)/(2*I)

SIN二SIN+A

ENDSUBROUTIN

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

当前位置:首页 > 工作范文 > 其它

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

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