您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 交通运输 > 西安交通大学fortran习题
1二维数组的输入与输出programmainimplicitnoneintegeri,jintegerA(2,2)!若为data((A(j,i),i=1,2),j=1,2)/1,2,3,4/print*,Aend!结果为1324实际为A(1,1)=1A(1,2)=2A(2,1)=3A(2,2)=4!若为data((A(i,j),i=1,2),j=1,2)/1,2,3,4/print*,Aend!结果为1234实际为A(1,1)=1A(2,1)=2A(1,2)=3A(2,2)=4programmainimplicitnoneintegeri,jintegerA(2,2)data((A(i,j),i=1,2),j=1,2)/1,2,3,4/write(*,(I3,I3))Aend!结果为1234翻卡片!用数组编写下面的题目:假定有一叠卡片,卡片号为1到52,并且所有卡片的正面朝上。从卡片号2开始,把凡是偶数的卡片都翻成正面朝下。再从3号卡片开始,把凡是卡片号为3的倍数的卡片都翻一个面(即把正面朝上的翻成正面朝下,正面朝下的翻成正面朝上)。下一步从4号卡片开始,把凡是卡片号为4的倍数的卡片都翻一个面,依次类推,直到从52号卡片开始,把凡是卡号为52的倍数的卡片翻一个面。写出一个程序,来测定全过程完成后,哪些卡片的面朝上,共有几张。答案:正面朝上的卡片是第1、4、9、16、25、36、49张,共7张。programmainimplicitnoneintegers(52)integeri,js=0doi=2,52j=idowhile(j=52)s(j)=s(j)+1j=j+ienddoenddodoi=1,52if(mod(s(i),2)==0)thenwrite(*,*)iendifenddoendprogrammain//用C语言写#includestdio.hintmain(){ints[52];inti,j;for(i=0;i52;i++)s[i]=0;for(i=1;i=51;i++){for(j=i;j=51;j+=i+1)//也可以写作j=j+i+1,不能写作j==j+i+1{s[j]=s[j]+1;}}斐波拉契!使用递归时result()不能与函数名相同PROGRAMMAINIMPLICITNONEINTEGERn,i,sumread*,nif(n0)THENPRINT*,出错ENDIFwrite(*,*)'f(n)=',f(n)doi=1,nsum=sum+f(n)enddowrite(*,*)'sum=',sumcontainsrecursivefunctionf(n)result(g)integerg,nif(n==0)theng=0elseif(n==1.or.n==2)theng=1elseg=f(n-1)+f(n-2)endifendfunctionEndprogram分解质因数!分解质因数programmainimplicitnoneintegera,c,i,bprint*,请输入一个大于二的整数read*,aprint*,'则它的所有质因子为'dowhile(a/=1)i=1b=1dowhile(b/=0)i=i+1b=mod(a,i)c=ienddoa=a/cprint*,cenddoendprogram哥德巴赫猜想!屏幕上不能显示500行,所以不能将结果完全显示,需要将结果输入文件FUNCTIONf(i)IMPLICITNONEINTEGERi,f,hf=0if(i1)thendoh=2,i-1if(mod(i,h)==0)thenf=f+1endifenddoendifendfunctionprogrammainimplicitnoneinteger(4)i,j,n,fintegersdon=4,600,2s=0j=0doi=1,n/2-1j=n-iif(f(i)==0.and.f(j)==0)thens=s+1endifenddoif(s==0)thenprint*,n,'不满足猜想'elseprint*,n,sendifenddoendprogram黄金值法解方程!将中值法中取中点的值改为取黄金点的值,理论上可以提高效率modulegolden_sectionimplicitnonereala,b,ccontainssubroutinesub1(a,b,c)reala,b,c,ycc=(a*0.618+b)/1.618yc=f(c)dowhile(abs(yc)0.00001)if(yc*f(a)0)thenb=celsea=cendifc=(a*0.618+b)/1.618yc=f(c)enddoendsubroutinefunctionf(x)realf,xf=x*x-4.0*x+3endfunctionendmodulegolden_sectionprogrammainusegolden_sectionimplicitnonerealeprint*,请输入解的下界aread*,aprint*,请输入解的上界bread*,be=f(a)*f(b)!用一个循环来判断输入值是否合适,或者就是解if(f(a)==0)thenprint*,aelseif(f(b)==0)thenprint*,belsedowhile(e0)print*,f(a)=,f(a);f(b)=,f(b);请重新输入下界aread*,aprint*,请重新输入解的下界bread*,benddocallsub1(a,b,c)endifprint*,cend回文输出programmainimplicitnoneintegeri,jintegera(5),b(5)dataa/1,2,8,2,10/datab/2,3,4,5,6/doi=1,5doj=1,5b(j)=b(j)-1if(b(j)1)thenb(j)=b(j)+5endifenddoprint*,a(b(1:5))!实践证明这是正确的输出方法enddoend!forall语句中不能使用if语句,但可以用where语句,注意()中的内容变化但本题从逻辑上就应该先做完forall,再做where,故不必嵌套programmainimplicitnoneintegeri,jintegera(6),b(6)DATAa/1,4,9,16,25,36/datab/2,3,4,5,6,7/doi=1,6forall(j=1:6)b(j)=b(j)-1endforallwhere(b==0)!可以写为where(b(:)==0)b(:)=b(:)+6endwhereb=b+6endwhereprint*,a(b(1:6))!实践证明这是正确的输出方法enddo回文数据若干相邻想和并比较大小!1.圆盘上有如图1(1)所示的20个数。请找出哪四个相邻的数之和为最大。请指出他们的位置和数值。如果是1(2)图,又是哪四个相邻的数?programmainimplicitnoneintegera(20),b(23),c(20)integeri,j,d,edataa/20,21,8,4,13,6,10,15,2,17,3,19,7,16,8,11,14,9,12,5/datab/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,1,2,3/doi=1,20c(i)=a(b(i))+a(b(i+1))+a(b(i+2))+a(b(i+3))enddoe=1doi=1,19if(c(1)c(i+1))thend=c(1)c(1)=c(i+1)c(i+1)=de=i+1endifenddoprint*,c(1)write(*,*)(a(b(i)),i=e,e+3)end//用C语言写,注意C的数组从0开始计数,所有的i变量减一;嵌套数组仍然有效#includestdio.hintmain(){inta[20]={20,21,8,4,13,6,10,15,2,17,3,19,7,16,8,11,14,9,12,5};intb[23]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,0,1,2};intc[20];inti,j,d,e;for(i=0;i=18;i++){c[i]=a[b[i]]+a[b[i+1]]+a[b[i+2]]+a[b[i+3]];}e=0;for(i=0;i=18;i++){if(c[0]c[i+1]){d=c[0];c[0]=c[i+1];c[i+1]=d;e=i+1;}}printf(和最大的是%d,这四个数是:\n,c[0]);for(i=e;i=e+3;i++)printf(%d,,a[b[i]]);return0;}!圆盘上有如图所示的K个数。请找出哪l个相邻的数之和为最大。请指出他们的位置和数值。programmainimplicitnoneintegeri,j,d,eintegerk,linteger,allocatable::a(:),b(:),c(:)print*,请输入数据的总数read*,kprint*,请输入求和的元素个数read*,lallocate(a(k),b(k+l-1),c(k))print*,请依次输入数据doi=1,kread*,a(i)enddodoi=1,kb(i)=ienddodoi=k+1,k+l-1b(i)=i-kenddodoi=1,kdoj=i,i+l-1c(i)=c(i)+a(b(j))!一维数组嵌套的功能可由二维数组代替enddoenddoe=1doi=1,k-1if(c(1)c(i+1))thend=c(1)c(1)=c(i+1)c(i+1)=de=i+1endifenddoprint*,'和最大为',c(1),'这些数为'write(*,*)(a(b(i)),i=e,e+l-1)end计算六边形的面积PROGRAMMAINIMPLICITNONEREALAREA,L1,L2,L3,L4,L5,L6,L7,L8,L9,L10,L11,L12PRINT*,请输入将六边形分割成三角形后各个三角形的边长PRINT*,第一个三角形三边为READ*,L1,L2,L3PRINT*,第二个三角形三边为READ*,L4,L5,L6PRINT*,第三个三角形三边为READ*,L7,L8,L9PRINT*,第四个三角形三边为READ*,L10,L11,L12AREA=F(L1,L2,L3)+F(L4,L5,L6)+F(L7,L8,L9)+F(L10,L11,L12)write(*,*)AREACONTAINSFUNCTIONF(A,B,C)REALF,A,B,C,SS=(A+B+C)/2F=SQRT(S*(S-A)*(S-B)*(S-C))ENDFUNCTIONEND计算最大公约数和最小公倍数PROGRAMMAIN!计算两个数的最小公倍数与最大公约数IMPLICITNONEINTEGERX,Y,F,GPRINT*,请输入两个正整数READ*,X,YG=X*Y/F(X,Y)write(*,*)最大公因数为,F(X,Y)write(*,*)最小公倍数为,GENDPROGRAMMAIN!FFUNCTIONF(X,Y)IMPLICITNONEINTEGERX,Y,Z,FIF(XY)THENZ=YY=XX=ZENDIFZ=X-YDOWHILE(Z/=Y)IF(ZY)THENX=ZELSEX=YY=ZENDIFZ=X-YENDDOF=ZENDFUNCTION牛顿法解方程!牛顿法解方程,效率高,但是方程有多解时,解对初值很敏感;另外还要求函数处处可导modulenewtonimplicitnonerealx,y,k,vcontainssubroutinesub1(x)realx,k,yrealdxdx=0.00001y=f(x)k=(f(x)-f(x-dx))/dxdowhile(abs(y)
本文标题:西安交通大学fortran习题
链接地址:https://www.777doc.com/doc-5232024 .html