当前位置:文档之家› fortran程序案例题汇编(14道)

fortran程序案例题汇编(14道)

1.Fibonacci数列定义如下:F1=1F2=1F n=F n-1+F n-2 (n>2)求Fibonacci数列的前30项。

integer f(30),if(1)=1f(2)=2do i=3,30f(i)=f(i-1)+f(i-2)enddoprint*,fend2.输入10个学生的总分,求每个学生的名次integer s(10),a(10),i,jdo i=1,10read*,s(i)enddodo i=1,10a(i)=1do j=1,10if(s(i)<s(j)) a(i)=a(i)+1enddoenddodo i=1,10print*,s(i),a(i)enddoend3.给定一组数,按照从小到大的顺序输出。

integer a(10)integer pdo i=1,10read *,a(i)enddodo j=1,9p=jdo i=j+1,10if (a(i)<a(p)) p=ienddoif (p/=j) thent=a(p);a(p)=a(j);a(j)=tendifenddoprint *,(a(i),i=1,10)end4.输入若干名学生的学号和三门课程(语数英)的成绩,要求从键盘输入一个学生的学号,能打印出该学生的三门功课成绩和总分。

character*6,dimension(:),allocatable::xueinteger,dimension(:,:),allocatable::ginteger,dimension(:),allocatable::zonginteger i,j,ncharacter*6,xhprint *,"请输入学生的个数"read *,nallocate(xue(n))allocate(g(n,3))allocate(zong(n))do i=1,nread *,xue(i),(g(i,j),j=1,3)enddodo i=1,nzong(i)=0do j=1,3zong(i)=zong(i)+g(i,j)enddoenddoprint *,"请输入你要打印的学生的学号"read *,xhdo i=1,nif(xue(i)==xh)thenprint *,(g(i,j),j=1,3),zong(i)exitendifenddoend5.编写一个函数子程序计算所输入两个整数m、n的最大公约数。

integer function gcd(m,n)integer rr=mod(m,n)do while (r/=0)m=nn=rr=mod(m,n)enddogcd=nendinteger x,y,gcdread*,x,yprint*,gcd(x,y)end6.用函数子程序的方法设计一个判断某个数是否是素数的程序,统计100~1000内的素数的个数。

logical function prime(n)logical tt=.true.do i=2,n-1if(mod(n,i)==0)thent=.false.exitendifenddoprime=tendinteger slogical primes=0do i=100,1000if(prime(i))thens=s+1endifenddoprint*,send7.设计一个子程序,对于自然数m,n,该函数求m,n的最小公倍数。

integer function gcd(m,n)integer r,tt=m*nr=mod(m,n)do while (r/=0)m=nn=rr=mod(m,n)enddogcd=t/nendinteger x,y,gcdprint*,"请输入两个数"read*,x,yprint*,gcd(x,y)end8.对任意自然数n,设计一个求n的各位数字的立方和的子程序,并调用该子程序求100~999之间的所有水仙花数。

subroutine shu(n,t)integer n,i,a,b,clogical ta=n/100b=mod(n/10,10)c=mod(n,10)if(a**3+b**3+c**3==n)thent=.true.elset=.false.endifendlogical tdo i=100,999call shu(i,t)if(t)thenprint*,iendifenddoend9.设计一个子例行程序SORT(A,N,K),其中A是一个一维数组,N是A的元素个数,SORT 的功能是:当K=1时,将数组A按升序排列;当K=0时,将数组A按降序排列;当K为其它数值时,数组A保持原序。

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

subroutine sort(a,n,k)integer a(n)integer k,iselect case(k)case (0)do i=1,n-1do j=1,n-Iif(a(j)>a(j+1)) thent=a(j)a(j)=a(j+1)a(j+1)=tendifenddoenddocase(1)do i=1,n-1do j=1,n-Iif(a(j)<a(j+1)) thent=a(j)a(j)=a(j+1)a(j+1)=tendifenddoenddoend selectendreal,dimension(:),allocatable::binteger k,nprint*,"请输入要排序的数据数目"read*,nallocate(b(n))print *,"请输入这n个数据"read *,(b(i),i=1,n)print*,"请输入k的值"read *,kcall sort(b,n,k)print *,(b(i),i=1,n)end10.编写一个判断闰年的程序。

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

function s(n)integer nlogical sif(mod(n,4)==0.and.mod(n,100)/=0.or.mod(n,400)==0)thens=.true.elses=.false.endifendlogical sdo i=2011,2050if(s(i))thenprint*,iendifenddoend11.利用子程序机制实现:输入若干名学生的学号和三门课程的成绩;计算每个学生的总分;输出每个学生的学号、三门课程的成绩和总分。

integer,dimension(:,:),allocatable::gradeinteger,dimension(:),allocatable::zonginteger,dimension(:),allocatable::mingciinteger m,nread *,m,nallocate (grade(m,n))allocate(zong(m))allocate(mingci(m))call input(grade,m,n)call sum1(grade,m,n,zong)call qiuming(zong,m,mingci)call output(grade,m,n,zong,mingci)endsubroutine input(grade,m,n)integer grade(m,n)print *,"请输入成绩"do i=1,mread *,(grade(i,j),j=1,n)enddoendsubroutine sum1(grade,m,n,zong)integer grade(m,n)integer zong(m)zong=0do i=1,mdo j=1,nzong(i)=zong(i)+grade(i,j)enddoenddoendsubroutine qiuming(zong,m,mingci)integer zong(m)integer mingci(m)mingci=1do i=1,mdo j=1,mif(zong(i)<zong(j))thenmingci(i)=mingci(i)+1endifenddoenddoendsubroutine output(grade,m,n,zong,mingci)integer grade(m,n)integer zong(m)integer mingci(m)do i=1,mprint *,(grade(i,j),j=1,n) ,zong(i),mingci(i)enddoend12.利用递归函数方法实现:求n !;然后调用该函数求integer recursive function fac(n) result(f)if(n==1) thenf=1elsef=n*fac(n-1)endifendparameter(pi=3.1416926)real x,sinteger n,fs=1print*,"请输入角度值"read*,xx=x*pi/180f=-1n=2do while(abs(f*x**n/fac(n)>1e-6)s=s+f*x**n/fac(n)n=n+2f=-fenddoprint*,s end.10...!6!4!21)cos(6642-<+-+-=直到最后一项x x x x13.输入10名学生的学号、姓名、性别和一门课程的成绩,要求打印出不及格学生的所有信息。

type scharacter*11 numcharacter*8 namelogical sexreal gradeend typetype(s) g(10)integer i,jprint*,"请输入学生的基本信息"do i=1,10read*,g(i).num,g(i).name,g(i).sex,g(i).gradeenddodo i=1,10if(g(i).grade<60)thenj=iendifenddoprint*,g(j).num,g(j).name,g(j).sex,g(j).gradeend14.已知职工工资表记录包括:职工号,姓名,年龄、职称、工资,建立一个10个职工组成的记录表,打印输出职工中工资最高者和最低者所有信息,以及工资总额和平均工资。

type empcharacter*6 numcharacter*8 nameinteger agecharacter*16 zhichenreal wageendtypetype(emp) s(10)integer ireal max,min,sum,avgprint*,"请输入职工的基本信息"do i=1,10read *,s(i).num,s(i).name,s(i).age,s(i).zhichen,s(i).wageenddomax=s(1).wage;j=1do i=2,10if(max<s(i).wage)thenmax=s(i).wagej=iendifenddomax=s(1).wage;k=1do i=2,10if(min>s(i).wage)thenmin=s(i).wagek=iendifenddosum=0do i=1,10sum=sum+s(i).wageenddoavg=sum/10print *,"输出最高工资的职工信息"print *,s(j).num,s(j).name,s(j).age,s(j).zhichen,s(j).wageprint *,"输出最低工资的职工信息"print *,s(k).num,s(k).name,s(k).age,s(k).zhichen,s(k).wageprint *,"输出工资总额和平均值"print *,sum,avgend11。

相关主题