欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    西安交通大学fortran习题.doc

    • 资源ID:28557776       资源大小:35.50KB        全文页数:12页
    • 资源格式: DOC        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    西安交通大学fortran习题.doc

    精品文档,仅供学习与交流,如有侵权请联系网站删除1 二维数组的输入与输出program mainimplicit noneinteger i,jinteger A(2,2)!若为data(A(j,i),i=1,2),j=1,2)/1,2,3,4/print*,Aend !结果为 1 3 2 4实际为A(1,1)=1 A(1,2)=2 A(2,1)=3 A(2,2)=4!若为data(A(i,j),i=1,2),j=1,2)/1,2,3,4/print*,Aend !结果为 1 2 3 4实际为A(1,1)=1 A(2,1)=2 A(1,2)=3 A(2,2)=4program mainimplicit noneinteger i,jinteger A(2,2)data(A(i,j),i=1,2),j=1,2)/1,2,3,4/write(*,"(I3,I3)")Aend !结果为 1 2 3 4翻卡片!用数组编写下面的题目:假定有一叠卡片,卡片号为1到52,并且所有卡片的正面朝上。从卡片号2开始,把凡是偶数的卡片都翻成正面朝下。再从3号卡片开始,把凡是卡片号为3的倍数的卡片都翻一个面(即把正面朝上的翻成正面朝下,正面朝下的翻成正面朝上)。下一步从4号卡片开始,把凡是卡片号为4的倍数的卡片都翻一个面,依次类推,直到从52号卡片开始,把凡是卡号为52的倍数的卡片翻一个面。写出一个程序,来测定全过程完成后,哪些卡片的面朝上,共有几张。答案:正面朝上的卡片是第1、4、9、16、25、36、49张,共7张。program mainimplicit none integer s(52)integer i,js=0do i=2,52j=ido while(j<=52)s(j)=s(j)+1j=j+iend doend dodo i=1,52if(mod(s(i),2)=0)thenwrite(*,*)iend ifend doend program main/用C语言写#include<stdio.h>int main()int s52;int i,j;for(i=0;i<52;i+)si=0;for(i=1;i<=51;i+)for(j=i;j<=51;j+=i+1)/ 也可以写作j=j+i+1,不能写作j=j+i+1sj=sj+1;斐波拉契!使用递归时result()不能与函数名相同PROGRAM MAINIMPLICIT NONEINTEGER n,i,sumread*,nif(n<0)THENPRINT*,"出错" END IFwrite(*,*)'f(n)=',f(n)do i=1,nsum=sum+f(n)end dowrite(*,*)'sum=',sumcontainsrecursive function f(n) result(g)integer g,nif(n=0)theng=0else if(n=1.or.n=2)theng=1elseg=f(n-1)+f(n-2)end ifend functionEnd program分解质因数!分解质因数program mainimplicit noneinteger a,c,i,bprint*,"请输入一个大于二的整数"read*,aprint*,'则它的所有质因子为'do while(a/=1)i=1b=1do while(b/=0)i=i+1b=mod(a,i)c=iend doa=a/cprint*,cend doend program哥德巴赫猜想!屏幕上不能显示500行,所以不能将结果完全显示,需要将结果输入文件FUNCTION f(i)IMPLICIT NONEINTEGER i,f,hf=0if(i>1)thendo h=2,i-1if(mod(i,h)=0)thenf=f+1endifend doendifend functionprogram mainimplicit noneinteger(4) i,j,n,finteger sdo n=4,600,2s=0j=0do i=1,n/2-1j=n-iif(f(i)=0.and.f(j)=0)thens=s+1end ifend doif(s=0)thenprint*,n,'不满足猜想'elseprint*,n,send ifend doend program 黄金值法解方程!将中值法中取中点的值改为取黄金点的值,理论上可以提高效率module golden_sectionimplicit nonereal a,b,ccontainssubroutine sub1(a,b,c)real a,b,c,ycc=(a*0.618+b)/1.618yc=f(c)do while(abs(yc)>0.00001)if(yc*f(a)<0)thenb=celsea=cend ifc=(a*0.618+b)/1.618yc=f(c)end doend subroutinefunction f(x)real f,xf=x*x-4.0*x+3end functionend module golden_sectionprogram mainuse golden_sectionimplicit nonereal eprint*,"请输入解的下界a"read*,aprint*,"请输入解的上界b"read*,be=f(a)*f(b)!用一个循环来判断输入值是否合适,或者就是解if(f(a)=0)thenprint*,aelse if(f(b)=0)thenprint*,belsedo while(e>0)print*,"f(a)=,f(a);f(b)=,f(b);请重新输入下界a"read*,aprint*,"请重新输入解的下界b"read*,bend docall sub1(a,b,c)end ifprint*,cend回文输出program mainimplicit noneinteger i,jinteger a(5),b(5)data a /1,2,8,2,10/data b /2,3,4,5,6/do i=1,5 do j=1,5 b(j)=b(j)-1 if(b(j)<1)then b(j)=b(j)+5 end if end doprint*,a(b(1:5)!实践证明这是正确的输出方法end doend! forall语句中不能使用if语句,但可以用where语句,注意()中的内容变化但本题从逻辑上就应该先做完forall,再做where,故不必嵌套program mainimplicit noneinteger i,jinteger a(6),b(6)DATA a /1,4,9,16,25,36/data b /2,3,4,5,6,7/do i=1,6forall(j=1:6)b(j)=b(j)-1end forallwhere(b=0) !可以写为where(b(:)=0) b(:)=b(:)+6 end whereb=b+6end whereprint*,a(b(1:6)!实践证明这是正确的输出方法end do回文数据若干相邻想和并比较大小!1.圆盘上有如图1(1)所示的20个数。请找出哪四个相邻的数之和为最大。请指出他们的位置和数值。如果是1(2)图,又是哪四个相邻的数?program mainimplicit noneinteger a(20),b(23),c(20)integer i,j,d,edata a /20,21,8,4,13,6,10,15,2,17,3,19,7,16,8,11,14,9,12,5/data b /1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,1,2,3/do i=1,20c(i)=a(b(i)+a(b(i+1)+a(b(i+2)+a(b(i+3)end doe=1do i=1,19 if(c(1)<c(i+1)then d=c(1) c(1)=c(i+1) c(i+1)=d e=i+1 end ifend doprint*,c(1)write(*,*)(a(b(i),i=e,e+3)end /用C语言写,注意C的数组从0开始计数,所有的i变量减一;嵌套数组仍然有效#include<stdio.h>int main()int a20=20,21,8,4,13,6,10,15,2,17,3,19,7,16,8,11,14,9,12,5;int b23=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,0,1,2;int c20; int i,j,d,e;for(i=0;i<=18;i+)ci=abi+abi+1+abi+2+abi+3;e=0;for(i=0;i<=18;i+)if(c0<ci+1) d=c0;c0=ci+1;ci+1=d;e=i+1;printf("和最大的是%d,这四个数是:n",c0); for(i=e;i<=e+3;i+)printf("%d,",abi);return 0;!圆盘上有如图所示的K个数。请找出哪l个相邻的数之和为最大。请指出他们的位置和数值。program mainimplicit noneinteger i,j,d,einteger k,linteger,allocatable: a(:),b(:),c(:)print*,"请输入数据的总数"read*,kprint*,"请输入求和的元素个数"read*,lallocate(a(k),b(k+l-1),c(k)print*,"请依次输入数据"do i=1,kread*,a(i)end dodo i=1,kb(i)=iend dodo i=k+1,k+l-1b(i)=i-kend dodo i=1,kdo j=i,i+l-1c(i)=c(i)+a(b(j) !一维数组嵌套的功能可由二维数组代替end doend doe=1do i=1,k-1 if(c(1)<c(i+1)then d=c(1) c(1)=c(i+1) c(i+1)=d e=i+1 end ifend doprint*,'和最大为',c(1),' 这些数为'write(*,*)(a(b(i),i=e,e+l-1)end 计算六边形的面积PROGRAM MAINIMPLICIT NONEREAL AREA, 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(*,*)AREACONTAINSFUNCTION F(A,B,C)REAL F,A,B,C,SS=(A+B+C)/2F=SQRT(S*(S-A)*(S-B)*(S-C)END FUNCTIONEND 计算最大公约数和最小公倍数PROGRAM MAIN!计算两个数的最小公倍数与最大公约数IMPLICIT NONEINTEGER X,Y,F,GPRINT*,"请输入两个正整数"READ*,X,YG=X*Y/F(X,Y)write(*,*)"最大公因数为",F(X,Y)write(*,*)"最小公倍数为",GEND PROGRAM MAIN!FFUNCTION F(X,Y)IMPLICIT NONEINTEGER X,Y,Z,FIF(X<Y)THEN Z=YY=XX=ZENDIFZ=X-YDO WHILE(Z/=Y)IF(Z>Y)THENX=ZELSEX=YY=ZENDIFZ=X-YEND DOF=ZEND FUNCTION牛顿法解方程!牛顿法解方程,效率高,但是方程有多解时,解对初值很敏感;另外还要求函数处处可导module newtonimplicit none real x,y,k,vcontainssubroutine sub1(x)real x,k,yreal dxdx=0.00001y=f(x)k=(f(x)-f(x-dx)/dxdo while(abs(y)>0.00001)x=x-y/k !注意方程不要解错y=f(x)end doend subroutinefunction f(x)real f,xf=x*x-4.0*x+3end functionend module newtonprogram mainuse newtonimplicit none print*,"请输入初值x:" read*,xcall sub1(x)print*,xend program main牛追人问题!用派生定义坐标,但没有定义向量运算符本题可以不用派生,直接定义坐标变量,应该可以简化。精度由v的增量,时间间隔t,判定相遇的临界距离三者决定module module1implicit nonetype vectorreal xreal yend type!下面的声明语句可以不要,但私下下认为不应省略type (vector):va,vc,ra,rc,dr !模块中定义了type后,其他例程都不用再定义但要声明变量real v,tcontainsfunction norm(r)real normtype(vector):rnorm=(r.x*r.x+r.y*r.y)*0.5end functionsubroutine sub1(v,ra)type (vector):va,vc,ra,rc,drreal v,tt=0.1ra.x=10ra.y=50rc.x=0rc.y=0vc.x=5.0/(26*0.5)vc.y=5.0/(26*0.5)*5va.x=v*2.0/(5*0.5)va.y=v*(-1.0)/(5*0.5)dr.x=ra.xdr.y=ra.y do while(norm(dr)>1) rc.x=rc.x+vc.x*trc.y=rc.y+vc.y*tra.x=ra.x+va.x*tra.y=ra.y+va.y*tdr.x=ra.x-rc.xdr.y=ra.y-rc.yvc.x=5*dr.x/(norm(dr)vc.y=5*dr.y/(norm(dr)end doend subroutine sub1end module program mainuse module1implicit nonev=0print*,'小孩的速度应为'ra.x=10ra.y=50do while(ra.x<60.0)v=v+0.1ra.x=10ra.y=50call sub1(v,ra)write(*,*)v,ra.xend dowrite(*,*)vend判断闰年subroutine sub1(p)implicit noneinteger ,target:pinteger,pointer:ainteger i,j,sif(mod(p,400)=0.or.mod(p,100)/=0.and.mod(p,4)=0)then!事实证明这么写是正确的a=>pprint*,aend ifendsubroutine program mainimplicit noneinteger iinteger ,target:pdo p=1900,2008call sub1(p)end doend program mai最大公约数!辗转相除法PROGRAM MAINIMPLICIT NONEINTEGER M,NPRINT*,"请输入两个正整数"read*,M,Nprint*,'他们的最大公约数为'print*,F(M,N)containsFUNCTION F(M,N)integer M,N,F,I,PI=1IF(M<N)THEN P=MM=NN=PEND IFDO WHILE(I/=0)I=MOD(M,N)M=NN=IEND DOF=MEND FUNCTIONEND PROGRAM!秦九韶算法PROGRAM MAINIMPLICIT NONEINTEGER M,NPRINT*,"请输入两个正整数"read*,M,Nprint*,'他们的最大公约数为'print*,F(M,N)containsFUNCTION F(M,N)integer M,N,F,I,PI=1DO WHILE(I/=0)IF(M<N)THEN P=MM=NN=PEND IFI=M-N梯形积分module integralimplicit noneinteger nreal a,bcontainsfunction s(n,a,b)integer nreal a,binteger ireal s,hh=(b-a)/ns=0 do i=1,n,1s=s+(f(a+h*(i-1)+f(a+h*i)/2*hend doend functionfunction f(x)real x,ff=exp(x)end functionend module integralprogram mainuse integralimplicit nonewrite(*,*)"被积函数f=ex,请输入积分下限a,与积分上限b:"read*,a,bwrite(*,*)"请输入n,"read*,nprint*,"积分结果为:",s(n,a,b)end program main用幂级数近似计算PROGRAM MAINIMPLICIT NONEREAL(8) X,SIN,AREAD*,XCALL ISIN(X,SIN,A)PRINT*,SINEND PROGRAMSUBROUTINE ISIN(X,SIN,A)IMPLICIT NONEREAL(8) SIN,X,AINTEGER II=0SIN=X !明确累加从何开始A=XDO WHILE(ABS(A)>=0.0000006)I=I+1A=A*(-1)*X*X/(I*2+1)/(2*I)SIN=SIN+AEND DOEND SUBROUTIN【精品文档】第 12 页

    注意事项

    本文(西安交通大学fortran习题.doc)为本站会员(豆****)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开