您好,欢迎访问三七文档
当前位置:首页 > 财经/贸易 > 资产评估/会计 > Fortran作业期末复习西南交大
编写两个子程序,分别求两个整数的最大公约数和最小公倍数,并编写主程序调用这两个子程序,输出结果programxintegerm,n,swrite(*,*)请输入两个数:read(*,*)m,ns=m*ncallacb(n,m)callasd(n,m,s)endsubroutineacb(n,m)integertempif(mn)thentemp=m;m=n;n=tempendifdowhile(mod(m,n)/=0)temp=n;n=mod(m,n);m=tempenddowrite(*,('最大公约数为:'i4))nreturnendsubroutineasd(n,m,s)if(mn)thentemp=m;m=n;n=tempendifdowhile(mod(m,n)/=0)temp=n;n=mod(m,n);m=tempenddowrite(*,('最小公倍数为:'i4))s/nreturnend编写一个递归子程序,求Fibonacci数列某项的值。并编写主程序调用该递归子程序,输出结果。programxintegern,tempwrite(*,*)输入Fibonacci数列某项数,n大于三read(*,*)ncallabc(n)endsubroutineabc(n)integeri,j,temp,a(n)a(1)=1a(2)=1doi=3,na(i)=a(i-1)+a(i-2)enddotemp=a(n)write(*,('Fibonacci数列n项的值为:',i8))tempreturnend1:输入10名学生的学号和一门课程的考试成绩,分别存入顺序文件和直接文件中。每名学生的数据占一个记录。分别对顺序文件和直接文件进行以下各项操作:(1)从数据文件中读入数据,然后按学生的成绩优劣放在文件中,每个记录包含一名学生的数据。(2)把文件中超过平均分的学生学号和记录输出出来。programxintegera(10),b(10),i,j,tempA,tempB,sumwrite(*,*)请输入10个同学的学号和分数read(*,*)(a(i),b(i),i=1,10)sum=0doi=1,9doj=i+1,10if(b(i)b(j))thentempA=a(i)tempB=b(i)b(i)=b(j)a(i)=a(j)b(j)=tempBa(j)=tempAendifenddoenddodoi=1,10sum=a(i)+sumenddoopen(unit=2,file='C:\Users\Administrator\Desktop\f2.txt',status='new',access='sequential',form='formatted')write(2,*)按学生的成绩优劣排名write(2,(2i5))(a(i),b(i),i=1,10)close(2)write(*,*)超出平均分的有doi=1,10if(b(i)(sum/10))thenwrite(*,*)a(i),b(i)endifenddoend编程建立一个链表,每个节点的值为2,4,6,......,20,在第i个节点后插入一个节点,该节点的值为i+1。然后删除第j个节点。ProgramxIntegerI,j,n,m,p,a(11)Doi=1,10A(i)=i*2Enddom=10Write(*,*)请输入需要删除的节点位置iRead(*,*)nDoI=1,m-1If(n==i)thenm=m+1doj=m-1,n,-1A(j+1)=a(j)enddoA(i)=i+1a(m)=a(m-1)+2endifEnddowrite(*,*)插入节点后的数列为write(*,*)(a(i),i=1,m)write(*,*)请输入删除的节点位置jRead(*,*)pDoI=1,mIf(p==i)thendoj=i,m-1A(j)=a(j+1)enddom=m-1endifEnddowrite(*,*)删除后的数列为write(*,*)(a(i),i=1,m)end游泳池栏杆造价,和走廊地板造价moduleABCpublicD,T,m,xpublicS1,A1containssubroutineS1(d,t,x)integerL1,L2,LL1=3.14*d*xL2=3.14*t*xl=L1+L2write(*,*)围栏总造价为,LreturnendsubroutinesubroutineA1(d,t,m)integerAA=((3.14)/4)*((d**2)-(t**2))*mwrite(*,*)地板总造价为,Areturnendsubroutinesubroutinesum(d,t,m,x)integerss,L1,L2,AL1=3.14*d*xL2=3.14*t*xl=L1+L2A=((3.14)/4)*((d**2)-(t**2))*mss=A+Lwrite(*,*)总费用为,ssendsubroutineendmoduleprogramx1useABCwrite(*,*)请输入水池外围栏直径Dread(*,*)dwrite(*,*)请输入水池内围栏直径Tread(*,*)twrite(*,*)请输入围栏造价X/mread(*,*)xwrite(*,*)请输入地板造价Y/mread(*,*)mcallS1(d,t,x)callA1(d,t,m)callsum(d,t,m,x)stopend从a、b数列中,把那些在a中出现又在b中出现的数统统删去。programmainintegerm1,m2,n1,n2integera(100),b(100),c(100)write(*,*)请输入数组a元素的个数read(*,*)m1write(*,*)请输入数组b元素的个数read(*,*)m2write(*,*)请输入a数组do10i=1,m1read(*,*)a(i)10continuewrite(*,*)请输入b数组do20i=1,m2read(*,*)b(i)20continuecallquchong(a,m1)callquchong(b,m2)n1=m1n2=m2calldel(a,b,n1,n2)pauseend!删除每个数组中重复的元素subroutinequchong(a,n)integera(n)integern,j,x,pp=1do50while(p=n)j=p+1do60while(j=n)if(a(p)==a(j))thendox=j,n-1a(x)=a(x+1)enddon=n-1j=j-1endifj=j+160continuep=p+150continueendsubroutinedel(a,b,m,n)integera(m),b(n)integerm,n,pp=1do50while(p=m)do60j=1,nif(a(p)==b(j))thendox=j,n-1b(x)=b(x+1)enddon=n-1doy=p,m-1a(y)=a(y+1)enddom=m-1p=p-1endif60continuep=p+150continuewrite(*,*)删除后a数组元素有write(*,*)(a(i),i=1,m)write(*,*)删除后b数组元素有write(*,*)(b(i),i=1,n)end编程输出以下的方阵。1161514131121110217242312213169318252211314158419202110456756789programmainintegerNintegerb(100,100)write(*,*)输入螺旋矩阵阶数Nread(*,*)NcallABC(b,N)endsubroutineABC(b,n)integerb(100,100)integerJ,K,N,Ip=n/2b(1,1)=1doK=1,p+1if(K==1)thendoJ=K,N-Kb(J+1,K)=b(J,K)+1enddoelsedoJ=K,N+1-Kb(J,K)=b(J-1,K)+1enddoendifdoI=K,N-Kb(N+1-K,I+1)=b(N+1-K,I)+1enddodoJ=N-K,K,-1b(J,N+1-K)=b(J+1,N+1-K)+1enddodoI=N-K,K+1,-1b(K,I)=b(K,I+1)+1enddoenddodoi=1,Nwrite(*,(ni5))(b(i,j),j=1,N)enddoendsubroutine各个进制数转换为十进制programxintegernintegermwrite(*,*)请选择输入16/十六,8/八,2/二进制数read(*,*)nselectcase(n)case(16)write(*,*)请选择输入数据read(*,(z10))mwrite(*,*)转换为十进制后,mcase(8)write(*,*)请选择输入数据read(*,(o10))mwrite(*,*)转换为十进制后,mcase(2)write(*,*)请选择输入数据read(*,(b10))mwrite(*,*)转换为十进制后,mendselectend
本文标题:Fortran作业期末复习西南交大
链接地址:https://www.777doc.com/doc-2872392 .html