西安交通大学fortran习题doc文档格式.docx
- 文档编号:16338092
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:17
- 大小:22.76KB
西安交通大学fortran习题doc文档格式.docx
《西安交通大学fortran习题doc文档格式.docx》由会员分享,可在线阅读,更多相关《西安交通大学fortran习题doc文档格式.docx(17页珍藏版)》请在冰豆网上搜索。
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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 西安交通大学 fortran 习题 doc