您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 工程监理 > fortran程序案例题汇编(14道)
11.Fibonacci数列定义如下:F1=1F2=1Fn=Fn-1+Fn-2(n2)求Fibonacci数列的前30项。integerf(30),if(1)=1f(2)=2doi=3,30f(i)=f(i-1)+f(i-2)enddoprint*,fend2.输入10个学生的总分,求每个学生的名次integers(10),a(10),i,jdoi=1,10read*,s(i)enddodoi=1,10a(i)=1doj=1,10if(s(i)s(j))a(i)=a(i)+1enddoenddodoi=1,10print*,s(i),a(i)enddoend23.给定一组数,按照从小到大的顺序输出。integera(10)integerpdoi=1,10read*,a(i)enddodoj=1,9p=jdoi=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)end34.输入若干名学生的学号和三门课程(语数英)的成绩,要求从键盘输入一个学生的学号,能打印出该学生的三门功课成绩和总分。character*6,dimension(:),allocatable::xueinteger,dimension(:,:),allocatable::ginteger,dimension(:),allocatable::zongintegeri,j,ncharacter*6,xhprint*,请输入学生的个数read*,nallocate(xue(n))allocate(g(n,3))allocate(zong(n))doi=1,nread*,xue(i),(g(i,j),j=1,3)enddodoi=1,nzong(i)=0doj=1,3zong(i)=zong(i)+g(i,j)enddoenddoprint*,请输入你要打印的学生的学号read*,xhdoi=1,nif(xue(i)==xh)thenprint*,(g(i,j),j=1,3),zong(i)exitendifenddoend45.编写一个函数子程序计算所输入两个整数m、n的最大公约数。integerfunctiongcd(m,n)integerrr=mod(m,n)dowhile(r/=0)m=nn=rr=mod(m,n)enddogcd=nendintegerx,y,gcdread*,x,yprint*,gcd(x,y)end6.用函数子程序的方法设计一个判断某个数是否是素数的程序,统计100~1000内的素数的个数。logicalfunctionprime(n)logicaltt=.true.doi=2,n-1if(mod(n,i)==0)thent=.false.exitendifenddoprime=tendintegerslogicalprimes=0doi=100,1000if(prime(i))thens=s+1endifenddoprint*,send57.设计一个子程序,对于自然数m,n,该函数求m,n的最小公倍数。integerfunctiongcd(m,n)integerr,tt=m*nr=mod(m,n)dowhile(r/=0)m=nn=rr=mod(m,n)enddogcd=t/nendintegerx,y,gcdprint*,请输入两个数read*,x,yprint*,gcd(x,y)end8.对任意自然数n,设计一个求n的各位数字的立方和的子程序,并调用该子程序求100~999之间的所有水仙花数。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)thent=.true.elset=.false.endifendlogicaltdoi=100,999callshu(i,t)if(t)thenprint*,iendifenddoend69.设计一个子例行程序SORT(A,N,K),其中A是一个一维数组,N是A的元素个数,SORT的功能是:当K=1时,将数组A按升序排列;当K=0时,将数组A按降序排列;当K为其它数值时,数组A保持原序。调用该子程序根据不同输入得出数组不同的输出方式。subroutinesort(a,n,k)integera(n)integerk,iselectcase(k)case(0)doi=1,n-1doj=1,n-Iif(a(j)a(j+1))thent=a(j)a(j)=a(j+1)a(j+1)=tendifenddoenddocase(1)doi=1,n-1doj=1,n-Iif(a(j)a(j+1))thent=a(j)a(j)=a(j+1)a(j+1)=tendifenddoenddoendselectendreal,dimension(:),allocatable::bintegerk,nprint*,请输入要排序的数据数目read*,nallocate(b(n))print*,请输入这n个数据read*,(b(i),i=1,n)print*,请输入k的值read*,kcallsort(b,n,k)print*,(b(i),i=1,n)end710.编写一个判断闰年的程序。调用该过程输出2011~2050之间所有的闰年。functions(n)integernlogicalsif(mod(n,4)==0.and.mod(n,100)/=0.or.mod(n,400)==0)thens=.true.elses=.false.endifendlogicalsdoi=2011,2050if(s(i))thenprint*,iendifenddoend811.利用子程序机制实现:输入若干名学生的学号和三门课程的成绩;计算每个学生的总分;输出每个学生的学号、三门课程的成绩和总分。integer,dimension(:,:),allocatable::gradeinteger,dimension(:),allocatable::zonginteger,dimension(:),allocatable::mingciintegerm,nread*,m,nallocate(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)endsubroutineinput(grade,m,n)integergrade(m,n)print*,请输入成绩doi=1,mread*,(grade(i,j),j=1,n)enddoendsubroutinesum1(grade,m,n,zong)integergrade(m,n)integerzong(m)zong=0doi=1,mdoj=1,nzong(i)=zong(i)+grade(i,j)enddoenddoendsubroutineqiuming(zong,m,mingci)integerzong(m)integermingci(m)mingci=1doi=1,mdoj=1,mif(zong(i)zong(j))thenmingci(i)=mingci(i)+19endifenddoenddoendsubroutineoutput(grade,m,n,zong,mingci)integergrade(m,n)integerzong(m)integermingci(m)doi=1,mprint*,(grade(i,j),j=1,n),zong(i),mingci(i)enddoend12.利用递归函数方法实现:求n!;然后调用该函数求integerrecursivefunctionfac(n)result(f)if(n==1)thenf=1elsef=n*fac(n-1)endifendparameter(pi=3.1416926)realx,sintegern,fs=1print*,请输入角度值read*,xx=x*pi/180f=-1n=2dowhile(abs(f*x**n/fac(n)1e-6)s=s+f*x**n/fac(n)n=n+2f=-fenddoprint*,send.10...!6!4!21)cos(6642直到最后一项xxxx1013.输入10名学生的学号、姓名、性别和一门课程的成绩,要求打印出不及格学生的所有信息。typescharacter*11numcharacter*8namelogicalsexrealgradeendtypetype(s)g(10)integeri,jprint*,请输入学生的基本信息doi=1,10read*,g(i).num,g(i).name,g(i).sex,g(i).gradeenddodoi=1,10if(g(i).grade60)thenj=iendifenddoprint*,g(j).num,g(j).name,g(j).sex,g(j).gradeend1114.已知职工工资表记录包括:职工号,姓名,年龄、职称、工资,建立一个10个职工组成的记录表,打印输出职工中工资最高者和最低者所有信息,以及工资总额和平均工资。typeempcharacter*6numcharacter*8nameintegeragecharacter*16zhichenrealwageendtypetype(emp)s(10)integerirealmax,min,sum,avgprint*,请输入职工的基本信息doi=1,10read*,s(i).num,s(i).name,s(i).age,s(i).zhichen,s(i).wageenddomax=s(1).wage;j=1doi=2,10if(maxs(i).wage)thenmax=s(i).wagej=iendifenddomax=s(1).wage;k=1doi=2,10if(mins(i).wage)thenmin=s(i).wagek=iendifenddosum=0doi=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,avgend
本文标题:fortran程序案例题汇编(14道)
链接地址:https://www.777doc.com/doc-1395006 .html