fortran程序案例题汇编14道.docx

上传人:b****8 文档编号:27885467 上传时间:2023-07-06 格式:DOCX 页数:11 大小:17.99KB
下载 相关 举报
fortran程序案例题汇编14道.docx_第1页
第1页 / 共11页
fortran程序案例题汇编14道.docx_第2页
第2页 / 共11页
fortran程序案例题汇编14道.docx_第3页
第3页 / 共11页
fortran程序案例题汇编14道.docx_第4页
第4页 / 共11页
fortran程序案例题汇编14道.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

fortran程序案例题汇编14道.docx

《fortran程序案例题汇编14道.docx》由会员分享,可在线阅读,更多相关《fortran程序案例题汇编14道.docx(11页珍藏版)》请在冰豆网上搜索。

fortran程序案例题汇编14道.docx

fortran程序案例题汇编14道

1.Fibonacci数列定义如下:

F1=1F2=1

Fn=Fn-1+Fn-2(n>2)

求Fibonacci数列的前30项。

integerf(30),if

(1)=1f

(2)=2doi=3,30f(i)=f(i-1)+f(i-2)enddoprint*,fend

2.输入10个学生的总分,求每个学生的名次integers(10),a(10),i,j

doi=1,10

read*,s(i)

enddodoi=1,10

a(i)=1

doj=1,10

if(s(i)

enddo

enddo

doi=1,10

print*,s(i),a(i)

enddo

end

3.给定一组数,按照从小到大的顺序输出。

integera(10)integerpdoi=1,10read*,a(i)enddodoj=1,9p=jdoi=j+1,10if(a(i)

4.输入若干名学生的学号和三门课程(语数英)的成绩,要求从键盘输入一个学生的学号,能打印出该学生的三门功课成绩和总分。

character*6,dimension(:

),allocatable:

:

xue

integer,dimension(:

:

),allocatable:

:

ginteger,dimension(:

),allocatable:

:

zongintegeri,j,n

character*6,xh

print*,"请输入学生的个数"

read*,n

allocate(xue(n))

allocate(g(n,3))

allocate(zong(n))

doi=1,n

read*,xue(i),(g(i,j),j=1,3)

enddo

doi=1,n

zong(i)=0

doj=1,3

zong(i)=zong(i)+g(i,j)

enddo

enddo

print*,"请输入你要打印的学生的学号"

read*,xh

doi=1,n

if(xue(i)==xh)then

print*,(g(i,j),j=1,3),zong(i)

exit

endif

enddo

end

5.编写一个函数子程序计算所输入两个整数m、n的最大公约数。

integerfunctiongcd(m,n)

integerrr=mod(m,n)dowhile(r/=0)m=nn=rr=mod(m,n)enddogcd=nend

integerx,y,gcd

read*,x,yprint*,gcd(x,y)end

6.用函数子程序的方法设计一个判断某个数是否是素数的程序,统计100~1000内的素数

的个数。

logicalfunctionprime(n)

logicalt

t=.true.

doi=2,n-1

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

t=.false.

exit

endif

enddo

prime=t

end

integers

logicalprime

s=0

doi=100,1000if(prime(i))thens=s+1endifenddoprint*,send

7.设计一个子程序,对于自然数m,n,该函数求m,n的最小公倍数。

integerfunctiongcd(m,n)

integerr,t

t=m*nr=mod(m,n)dowhile(r/=0)m=nn=rr=mod(m,n)enddogcd=t/nend

integerx,y,gcd

print*,"请输入两个数"read*,x,yprint*,gcd(x,y)end

100~999

8•对任意自然数n,设计一个求n的各位数字的立方和的子程序,并调用该子程序求之间的所有水仙花数。

subroutineshu(n,t)integern,i,a,b,clogicalta=n/100b=mod(n/10,10)c=mod(n,10)

if(a**3+b**3+c**3==n)then

t=.true.

else

t=.false.

endif

end

logicalt

doi=100,999

callshu(i,t)

if(t)then

print*,i

endif

enddo

end

SORT

K为其

9.设计一个子例行程序SORT(AN,K),其中A是一个一维数组,N是A的元素个数,的功能是:

当K=1时,将数组A按升序排列;当K=0时,将数组A按降序排列;当

它数值时,数组A保持原序。

调用该子程序根据不同输入得出数组不同的输出方式。

subroutinesort(a,n,k)

integera(n)

integerk,i

selectcase(k)

case(0)

doi=1,n-1

doj=1,n-I

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

t=a(j)

a(j)=a(j+1)

a(j+1)=t

endif

enddo

enddo

case

(1)

doi=1,n-1

doj=1,n-I

if(a(j)

t=a(j)

a(j)=a(j+1)

a(j+1)=t

endif

enddo

enddo

endselect

end

real,dimension(:

),allocatable:

:

b

integerk,n

print*,"请输入要排序的数据数目"

read*,n

allocate(b(n))

print*,"请输入这n个数据"

read*,(b(i),i=1,n)

print*,"请输入k的值"

read*,k

callsort(b,n,k)

print*,(b(i),i=1,n)

end

10.编写一个判断闰年的程序。

调用该过程输出2011~2050之间所有的闰年。

functions(n)integernlogicals

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

s=.true.

else

s=.false.

endif

end

logicals

doi=2011,2050

if(s(i))then

print*,i

endif

enddoend

11.利用子程序机制实现:

输入若干名学生的学号和三门课程的成绩;计算每个学生的总分;输出每个学生的学号、三门课程的成绩和总分。

integer,dimension(:

:

),allocatable:

:

gradeinteger,dimension(:

),allocatable:

:

zonginteger,dimension(:

),allocatable:

:

mingci

integerm,n

read*,m,n

allocate(grade(m,n))allocate(zong(m))allocate(mingci(m))callinput(grade,m,n)callsum1(grade,m,n,zong)callqiuming(zong,m,mingci)calloutput(grade,m,n,zong,mingci)end

subroutineinput(grade,m,n)

integergrade(m,n)

print*,"请输入成绩"

doi=1,m

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

enddo

end

subroutinesum1(grade,m,n,zong)

integergrade(m,n)

integerzong(m)

zong=0

doi=1,m

doj=1,n

zong(i)=zong(i)+grade(i,j)

enddo

enddo

end

subroutineqiuming(zong,m,mingci)

integerzong(m)

integermingci(m)

mingci=1

doi=1,m

doj=1,m

if(zong(i)

mingci(i)=mingci(i)+1

endif

enddo

enddo

end

subroutineoutput(grade,m,n,zong,mingci)integergrade(m,n)

integerzong(m)

integermingci(m)

doi=1,m

print*,(grade(i,j),j=1,n),zong(i),mingci(i)enddo

end

12•利用递归函数方法实现:

求n!

;然后调用该函数求

246

,、’xxx

cos(x)=1-

2!

4!

6!

直到最后一项:

10上

integerrecursivefunctionfac(n)result(f)if(n==1)then

f=1

else

f=n*fac(n-1)

endif

endparameter(pi=3.1416926)

realx,s

integern,f

s=1

print*,"请输入角度值"

read*,x

x=x*pi/180

f=-1

n=2

dowhile(abs(f*x**n/fac(n)>1e-6)s=s+f*x**n/fac(n)

n=n+2

f=-f

enddo

print*,s

end

13.输入10名学生的学号、姓名、性别和一门课程的成绩,要求打印出不及格学生的所有信息。

typescharacter*11numcharacter*8namelogicalsexrealgradeendtypetype(s)g(10)integeri,jprint*,"请输入学生的基本信息"doi=1,10

read*,g(i).num,g(i).name,g(i).sex,g(i).grade

enddo

doi=1,10

if(g(i).grade<60)then

j=i

endif

enddo

print*,g(j).num,g(j).name,g(j).sex,g(j).grade

end

14.已知职工工资表记录包括:

职工号,姓名,年龄、职称、工资,建立一个10个职工组成

的记录表,打印输出职工中工资最高者和最低者所有信息,以及工资总额和平均工资。

typeemp

character*6num

character*8name

integerage

character*16zhichen

realwage

endtype

type(emp)s(10)

integeri

realmax,min,sum,avg

print*,"请输入职工的基本信息"

doi=1,10

read*,s(i).num,s(i).name,s(i).age,s(i).zhichen,s(i).wage

enddo

max=s

(1).wage;j=1

doi=2,10

if(max

max=s(i).wage

j=i

endif

enddo

max=s

(1).wage;k=1

doi=2,10

if(min>s(i).wage)then

min=s(i).wage

k=i

endif

enddo

sum=0

doi=1,10

sum=sum+s(i).wage

enddo

avg=sum/10

print*,"输出最高工资的职工信息"

print*,s(j).num,s(j).name,s(j).age,s(j).zhichen,s(j).wage

print*,"输出最低工资的职工信息"

print*,s(k).num,s(k).name,s(k).age,s(k).zhichen,s(k).wage

print*,"输出工资总额和平均值"

print*,sum,avg

end

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

当前位置:首页 > 高中教育 > 英语

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

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