fortran95作业答案.docx

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

fortran95作业答案.docx

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

fortran95作业答案.docx

fortran95作业答案

FORTRAN90程序设计

[麒麟火小组]

作业:

一.求一元方程的根

1.采用语句函数或函数子程序定义一元方程;

2.程序采用以下多种方法求方程的根;

牛顿迭代法,二分法,迭代法

程序利用控制变量(如nmethod)来选择计算方法。

ProgramFrist!

一个可以选择子程序的主程序

integerxuhao

print*,"请选择方法:

1:

二分法。

2:

迭代法。

3:

牛顿迭代法。

"

read*,xuhao

if(xuhao==1)then!

将3种方法放在不同的子程序中,并用选择结构进行选择。

callbisection()

endif

if(xuhao==2)then

calldiedai()

endif

if(xuhao==3)then

callniudun()

endif

end

subroutinebisection()!

二分法的子程序

realx1,x2,x

realbisect,func1!

对要调用的子程序作说明

do

print*,"输入x1,x2的值:

"

read*,x1,x2

if(func1(x1)*func1(x2)<0.0)exit

print*,"不正确的输入!

"

enddo

x=bisect(x1,x2)

print10,'x=',x

10format(a,f15.7)

end

realfunctionbisect(x1,x2)!

二分法结构的函数子程序

realx1,x2,x,f1,f2,fx

x=(x1+x2)/2.0

fx=func1(x)

dowhile(abs(fx)>1e-6)

f1=func1(x1)

if(f1*fx<0)then

x2=x

else

x1=x

endif

x=(x1+x2)/2.0

fx=func1(x)

enddo

bisect=x

end

realfunctionfunc1(x)!

二分法的一元方程子程序

realx

func1=x**3-2*x**2+7*x+4

end

subroutinediedai()!

迭代法的子程序

realx

integerm

print*,'请输入x0和最高循环次数的值:

'

read*,x,m

calliteration(x,m)

end

subroutineiteration(x,m)!

迭代法结构的函数子程序

implicitnone

realx,x1

realfunc2

integeri,m

i=1

x1=func2(x)

dowhile(abs(x-x1)>1e-6.and.i<=m)

print10,i,x1

x=x1

i=i+1

x1=func2(x)

enddo

if(i<=m)then

print20,'x=',x1

else

print30,'经过',m,'次迭代后仍未收敛'

endif

10format('i='i4,6x,'x='f15.7)

20format(a,f15.7)

30format(a,i4,a)

end

realfunctionfunc2(x)!

迭代法一元方程的子程序

realx

func2=(-x**3+2*x**2-4)/7

end

subroutineniudun()!

牛顿迭代法的子程序

realx

integerm

print*,'输入初值'

read*,x

callnewton(x)

end

subroutinenewton(x)!

牛顿迭代法结构的函数子程序

implicitnone

realx,x1

realfunc3,dfunc3

integeri,m

i=1

x1=x-func3(x)/dfunc3(x)

dowhile(abs(x-x1)>1e-6)

print10,i,x1

x=x1

i=i+1

x1=x-func3(x)/dfunc3(x)

enddo

print20,'x=',x1

10format('i=',i4,6x,'x=',f15.7)

20format(a,f15.7)

end

realfunctionfunc3(x)!

牛顿迭代法一元方程的函数子程序

realx

func3=x**3-2*x**2+7*x+4

end

realfunctiondfunc3(x)!

牛顿迭代法一元方程的导数的子程序

realx

dfunc3=3*x**2-4*x+7

end

 

二.求解线性方程组

用高斯消去法解线性方程组

Ax=B

的解,其中A为N*N系数矩阵,x为解向量,B为方程组右端n维列向量。

要求程序能够求解任意多个未知数的方程组,并附算例。

programsecond!

一个可以选择未知数数量的求线性方程的小程序

real,allocatable:

:

a(:

:

),b(:

),c(:

print*,'输入未知数个数n:

'

read*,n

allocate(a(n,n))!

为数组分配空间

allocate(b(n))

allocate(c(n))

print*,'输出系数矩阵a:

'

callinput(a,n)!

引入输入子程序

print*,'输入等值矩阵b:

'

read*,b

print*,'联立方程组:

'

calloutput(a,b,n)!

引入输出子程序

callgauss_jordan(a,b,c,n)!

引入乔丹法子程序

print*,'求解:

'

doi=1,n

print10,i,c(i)

enddo

10format('x',i1,'=',f8.4)

deallocate(a)!

解除数组单元的分配

deallocate(b)

deallocate(c)

end

subroutineinput(a,n)!

定义输入子程序

reala(n,n)

doi=1,n

read*,(a(i,j),j=1,n)

enddo

end

subroutinegauss_jordan(a,b,c,n)!

定义乔丹法子程序

dimensiona(n,n),b(n),c(n)

callup(a,b,n)!

乔丹法中包含的两个子程序

calllow(a,b,n)

forall(i=1:

n)

c(i)=b(i)/a(i,i)

endforall

end

subroutineoutput(a,b,n)!

定义输出子程序

reala(n,n),b(n)

doi=1,n

print10,a(i,1),i

doj=2,n

if(a(i,j)>0)then

print20,a(i,j),j

else

print30,abs(a(i,j)),j

endif

enddo

print40,b(i)

enddo

10format(f5.2,'x',i1\)

20format('+',f5.2,'x',i1\)

30format('-',f5.2,'x',i1\)

40format('=',f8.4)

end

subroutineup(a,b,n)

reala(n,n),b(n)

doi=1,n-1

doj=i+1,n

p=a(j,i)/a(i,i)

a(j,i:

n)=a(j,i:

n)-a(i,i:

n)*p

b(j)=b(j)-b(i)*p

enddo

enddo

end

subroutinelow(a,b,n)

reala(n,n),b(n)

doi=n,2,-1

doj=i-1,1,-1

p=a(j,i)/a(i,i)

a(j,1:

i)=a(j,1:

i)-a(i,1:

i)*p

b(j)=b(j)-b(i)*p

enddo

enddo

end

 

三.编写班级成绩考评程序

1.采用数据文件输入某班级30名同学的学号及五门课程的成绩;

2.求出每名同学的总分、统计各门成绩的平均分;

3.统计各门课程中高于和低于平均分的人数;

4.按总分高低排序,利用文件输出名次、学号和分数;

5.分数查询输入某一学号,输出该生的名次、各门课程的成绩和总分。

parameter(n=30)

typestudent_score!

!

定义派生类型studentrecord

integernum

realchin,math,eng,phy,che,sum

integerrank

endtype

type(student_score)a(n)!

结构体数组a

open(1,file='stu1.dat')

doi=1,n

read(1,1)a(n)!

读入30个人的信息

enddo

1format(2x,i6,5(3x,f4.1))

close

(1)

open(2,file='stu2.dat')

dataave1,ave2,ave3,ave4,ave5/5*0.0/

doj=1,0!

每名同学成绩的求和以及各门成绩的平均分

a(j)%sum=(a(j)%chin+a(j)%math+a(j)%eng+a(j)%phy+a(j)%che)

ave1=ave1+a(j)%chin/30.0

ave2=ave2+a(j)%math/30.0

ave3=ave3+a(j)%eng/30.0

ave4=ave4+a(j)%phy/30.0

ave5=ave5+a(j)%che/30.0

enddo

p=0;q=0!

输出每门成绩的平均分

doi=1,n

if(a(i)%chin>=ave1)then

p=p+1

else

q=q+1

endif

enddo

print*,'高于语文平均分的人数:

',p

print*,'低于语文平均分的人数:

',q

p=0;q=0

doi=1,n

if(a(i)%math>=ave2)then

p=p+1

else

q=q+1

endif

enddo

print*,'高于数学平均分的人数:

',p

print*,'低于数学平均分的人数:

',q

p=0;q=0

doi=1,n

if(a(i)%eng>=ave3)then

p=p+1

else

q=q+1

endif

enddo

print*,'高于英语平均分的人数:

',p

print*,'低于英语平均分的人数:

',q

p=0;q=0

doi=1,n

if(a(i)%phy>=ave4)then

p=p+1

else

q=q+1

endif

enddo

print*,'高于物理平均分的人数:

',p

print*,'低于物理平均分的人数:

',q

p=0;q=0

doi=1,n

if(a(i)%che>=ave5)then

p=p+1

else

q=q+1

endif

enddo

print*,'高于化学平均分的人数:

',p

print*,'低于化学平均分的人数:

',q

dok=1,n-1

dom=1,n-k

if(a(m)%sum>a(m+1)%sum)then

t=a(m)%sum

a(m)%sum=a(m+1)%sum

a(m+1)%sum=t

endif

enddo

a(m+1)%rank=0

a(m+1)%rank=a(m+1)%rank+1

enddo

doi=1,n

print*,'学号总分名次'

print10,a(i)%num,a(i)%sum,a(i)%rank

enddo

10format(2x,i6,3x,f4.1,3x,i2)

print*,'enterastudent’snumber:

'

read*,s!

输出符合条件的人的信息

dok=1,n

if(s==a(k)%num)then

print*,'学号语文数学英语物理化学总分名次'

print100,a(k)

exit

endif

enddo

if(k>n)print*,'cannotfindthestudent!

'

100format(2x,i6,6(3x,f4.1),3x,i2)

close

(2)

end

编译通过,但运行发生错误,可能是环境自身的错误吧。

 

四.求定积分

1.采用函数子程序定义f(X);

2.程序可选择以下多种方法定积分

矩形法、梯形法、辛普生法

3.对于不同的算法分别编写子程序,选择调用。

programforth!

一个可以选择的方法的主程序

integershuzhi

print*,'请选择您需要的方法:

1:

矩形法,2:

梯形法,3:

辛普生法。

'

read*,shuzhi

if(shuzhi==1)then

calljuxing()

elseif(shuzhi==2)then

calltixing()

elseif(shuzhi==3)then

callxinpusheng()

endif

end

subroutinejuxing()!

矩形法的子程序

reala,b,s

integern

realyrectangle

print*,'欢迎使用矩形法,请输入a,b和n的值'

read*,a,b,n

s=rectangle(a,b,n)!

调用矩形法求解的函数

print10,a,b,n

print20,s!

输出计算结果

10format('a=',f5.2,3x,'b=',f5.2,3x,'n=',i4)

20format('s',f15.8)

end

realfunctionrectangle(a,b,n)!

矩形法求解函数

implicitnone

realx,a,b,h,s

integeri,n

realfunc1

x=a

h=(b-a)/n

s=0

doi=1,n

s=s+func1(x)*h

x=x+h

enddo

rectangle=s

end

realfunctionfunc1(x)!

矩形法的积分函数

realx

func1=1+exp(x)

end

subroutinetixing()!

梯形法的子程序。

reala,b,s

integern

realtrapezia!

对要调用的子程序作说明

print*,'感谢您使用梯形法,请输入a,b和n的值'

read*,a,b,n

s=trapezia(a,b,n)!

调用梯形法求解的函数

print10,a,b,n

print20,s!

输出计算结果

10format('a=',f5.2,3x,'b=',f5.2,3x,'n=',i4)

20format('s',f15.8)

end

realfunctiontrapezia(a,b,n)!

梯形法求解函数

implicitnone

realx,a,b,h,s

integeri,n

realfunc2

x=a

h=(b-a)/n

s=0

doi=1,n-1

s=s+2*func2(x+i*n)

enddo

trapezia=(s+func2(a)+func2(b))*h/2.0

end

realfunctionfunc2(x)!

梯形法积分函数

realx

func2=1+exp(x)

end

subroutinexinpusheng()

reala,b,s

integern

realsinpson!

对要调用的函数子程序作说明

print*,'辛普生法很不错哦,请输入a,b和n的值'

read*,a,b,n

s=sinpson(a,b,n)!

调用辛普生法求解的函数

print10,a,b,n

print20,s!

输出计算结果

10format('a=',f5.2,3x,'b=',f5.2,3x,'n=',i4)

20format('s',f15.8)

end

realfunctionsinpson(a,b,n)!

辛普生法求解函数

implicitnone

reala,b,h,f2,f4,x

integeri,n

realfunc3

h=(b-a)/(2.0*n)

x=a+h

f2=0

f4=func3(x)

doi=1,n-1

x=x+h

f2=f2+func3(x)

x=x+h

f4=f4+func3(x)

enddo

sinpson=(func3(a)+func3(b)+4.0*f4+2.0*f2)*h/3.0

end

realfunctionfunc3(x)!

辛普生法的积分函数

realx

func3=1+exp(x)

end

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

当前位置:首页 > IT计算机 > 电脑基础知识

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

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