fortran课后习题的答案.docx
第一章FORTRAN程序设计根基第15页1、21 .简述程序设计的步骤。“程序设计:反映了利用计算机解决问题的全过程,通常要经过以下四个基本步骤:(1)分析问题,确定数学模型或方法;(2)设计算法,画出流程图;(3)选择编程工具,编写程序;(4)调试程序,分析输出结果。2 .什么是算法它有何特征若何描述算法解决问题的方法和步骤称为算法。算法的五个特征:(1)有穷性。(2)确定性。(3)有效性。(4)要有数据输入。(5)要有结果输出。算法的描述有许多方法,常用的有:自然语言、一般流程图、N-S图等。第二章顺序构造程序设计第29页1、2、3、4、5、6、7、8、91 .简述符号常量与变量的区别符号常量在程序运行过程中其值不能改变。变量在程序运行过程中其值可以改变。2 .以下符号中为合法的FORTRAN90标识符的有哪些?(I)123B(2)M%10(3)XC2(4)5YZ(5)X+Y(6)F(X)(7)COS(X)(8)A.2(9)'A'ONE(10)U.S.S.R.(11)min*2(12)PRINT3 .以下数据中哪一些是合法的FORTRAN常量(1) 9,87(2).0(3)25.82(4)-356231(5) 3.57*E2(6)3.57E2.1(7)3.57E+2(g)3,57E-24 .=2,B=3,C=5(REL);且1=2,J=3(INTEGER),求以下表达式的值:(1) A*B+C表达式的值:11(2)*(B+C)表达式的值:16(3)BC*表达式的值:1.2(4)B(C*)表达式的值:0.3(5)A/I/J表达式的值:0.33(6)I/J/A表达式的值:0(7) A*B*IA*J*2表达式的值:4.5(8) C+(BA)*3B*2.表达式的值:7.25(9) A*B*I表达式的值:5125.将以下数学表达式写成相应的FORTRAN表达式:(1)1E-2(2)(-B+SQRT(B*B-4*C)/(2*)(3) 1+X+X*X2+X*323(4) COS(TN(*3÷B*3)*(L03)(C*C+1)(5) EXP(*X*2+B*X+C)(6) COS(X*YSQRT(X*X+Y*Y)*36.用FORTRAN语句完成以下操作:(1)将变量I的值增加1。1=1+1(2)I的立方加上J,并将结果保存到I中。I=I*3÷J(3)将E和F中大者存储到G中oG=Max(E,F)(4)将两位自然数N的个位与十位互换,得到一个新的数存储到M中(不考虑个位为。的情况)M=MOD(N,10)*10+N10第三章选择构造程序设计第43页1、2、3、5、6、7、91.分析以下程序运行结果1.OGICALPINTEGERI,II,12,13P=.FALSE.READ*,II1=MOD(I,10)I2=M0D(I10,10)I3=I100IF(I1+I3.EQ.2*I2)P=TRUE.PRINT*,PEND输入123时,输出:T输入132时,输出:F(1)REALX,Y,ZREAD*,X,YIF(X*Y)>O.ND.(X.NE.1.0)THENZ=10.0ELSEIF(X*Y<O.0)THENZ=0.0ELSEZ=-LOENDIFWRITE(*,*)ZEND输入1,4,输出:T.0输入4,1,输出:10.0输入1,-4,输出:0.0(2)INTEGERX,Y,A,BX=IY=OA=3B=4SELECTCASE(X)CASE(1)SELECTCASE(Y)CASE(O)A=A+1CASE(I)B=B+1ENDSELECTCASE(2)A=A+1B=B-ICASEDEFAULTA=A÷BB=A+BENDSELECTPRINT*,A,B=”,BEND输出结果是:A=4B=42.将以下数学运算转换成对应的FORTRAN表达式或写出语句。(1) x(3,6)FORTRAN表达式:x>0.AND.x<6(2) 2.5y8FORTRAN表达式:y>=2.5.AND.y<=8X7 7 7 73 4 5 6 < z zf <xx+yz+6FORTRAN表达式:(x+y)/=(z+6)2x+4y+xy=0FORTRAN表达式:2*x+4*y+x*y=0Ia-bIC2FORTRAn表达式:ABS(a-b)<=c*c如果x<y或x<z,那么min=xFoRTRAN语句:IF(x<y.OR.x<z)min=x(7)实数a,b,c能否构成三角形三边FORTRAN表达式:a>0.AND.b>0.AND.c>0.AND.(a+b)>c.AND.(b+c)>a.AND.(c+a)>b(8)a,b之一为。但不同时为0FORTRAN表达式:(a=0.OR.b=0).AND.(.NOT.(a=0.AND.b=0)(9)如果m与n相等,那么k为1,否那么k为0FORTRAN语句:IF(m=n)THENk=lELSEk=0ENDlF(10)a,b是否一样号FORTRAN表达式:a*b>03.如果A=2.5,B=7.5,C=5.0,D=6.0,L=.TRUE.,M=.FALSE.,请求出以下逻辑表达式的值。(1) (A+B).LT.(C+D).AND.A.EQ.3.5逻辑表达式的值:.FALSE.(2) A+B/2.0.NE.C-D.OR.C.NE.D逻辑表达式的值:.TRUE.(3) .NOT.L.OR.C.EQ.D.AND.M逻辑表达式的值:.FALSE.(4) C2.0+D.LT.A.AND.NOT.TRUE.OR.C.EQ.D逻辑表达式的值:.FALSE.(5) (C.GT.D).OR.C.NOT.(A+B.LT.D)该表达式错误(6) (A.LT.B).ND.(B.LT.)逻辑表达式的值:.FALSE.5、某运输公司在计算运费时,按照运输距离S对运费打一定的折扣I),其标准如下:S<250kmD=O250S<500kmD=2.5%500S<1000kmD=4.5%1000S<2000kmD=7.5%2000S<2500kmD=9.0%2500S<3000kmD=12.0%3000kmSD=15.0%编写程序,输入基本运费Price,货物重量Weight,距离S,计算总运费Freight0其中Freight=Price*Weight*S*(I-D)0REALPrice,Weight,S,Freight,DREAD*,Price,Weight,SIF(S<250)THEND=OELSEIF(S<500)THEND=0.025ELSEIF(S<1000)THEND=0.045ELSEIF(S<2000)THEND=0.075ELSEIF(S<2500)THEND=0.09ELSEIF(S<3000)THEND=O.12ELSED=0.15ENDIFFreight=Price*Weight*S*(I-D)WRITE(*,*)"Freight=",FreightEND6、编程判断自然数M是否为N的因子,是输出YES,不是输出NO。INTEGERM,NREAD(*,*)M,NIF(MOD(N,M)=0)THENWRrrE(*,*)YESELSEWRITE(*,*)"N0”ENDIFEND7、编程判断两位整数M是否为守形数。所谓守形数是指该数本身等于自身平方的低位数,如25是守形数,因为252=625,而625的低两位为250是输出YES,不是输出NOoINTEGERMRED(*,*)MIF(MOD(M*M,IOo)=M)THENWRITE(*,*)“YES”ELSEWRITE(*,*)"N0"ENDIFENDcos(x+1)-15<x<0从键盘输入x,求出y的值。In(X2+1)0x<109尸Vx15<x<20.x2其他REALX,YRED(*,*)XIF(X>-15.AND.X<O)THENY=COS(X+l)ELSEIF(X>=0.AND.X<10)THENY=LOG(X*X+1)ELSEIF(X>15.AND.X<20)THENY=X*(1.0/3)ELSEY=X*XENDIFWRITE(*,*),Y=zz,YEND第四章循环构造程序设计第64页1、2、5、11、121.写出以下程序的执行结果(1) 1.0(2) 811(3) k=6(4) 145(5) 5167P.652.利用下式计算的近似值。IMPLICITNONEREALPIINTEGERIPI=ODOI=1,NPI=PI+1.0/(4*I-3)-l.0/(4*1-1)ENDDOPRINT*,PI*4ENDP66习题5IMPLICITNONEINTEGERN,S,M,I1.OGICALFLAGDON=3,999,2FLAG=.TRUE.M=SQRT(REAL(N)DO1=2,MIF(MOD(N,I)=0)THENFLAG=.FALSE.EXITENDIFENDDOIF(FLAG)THENS=N100÷MOD(N10,10)+MOD(N,10)IF(MOD(S,2)/=0)PRINT*,NENDIFENDDOENDP.66习题11REALY0,YlRED(*,*)XYO=XYl=2*Y03+X(3*Y0*2)DOWHILE(BS(Yl-YO)>1E-5)YO=YlYl=2*Y03+X(3*Y0*2)ENDDOPRINT*,YlENDP.66习题12Reala,b,m,xf(x)=x*3-*2TRead*,a,bDowhile(Abs(a-b)>le-6)m=(a+b)/2If(f(a)*f(m)>0)thena=mElseb=mEndifEnddoPrint*,(a+b)2END第五章FORTRAN90数据类型第88页4、104.有一个三角形,顶点为X,Y,Z,其坐标分别为(1.5,2.0),(4.5,4.5),(18.0,10.5)。求三角形的面积和重心(提示:重心坐标=(+z)/3利用复数计算)。COMPLEXX,Y,Z,WREALA3,C,S,PREAD(*,*)X,Y,ZA=ABS(X-Y)B=ABS(Y-Z)C=ABS(Z-X)P=(A+B+C)2S=SQRT(P*(P-A)*(P-B)*(P-C)W=(X+Y+Z)3WRITE(*,*)SWRITE(*,*)WEND10.设有4个圆,圆心分别在(2,2)(2,2),(2,2),(2,2)泮径为1。当X,Y坐标点落在圆上和圆内时,Z=I;落在圆外时,Z=1;落在圆外时,Z=Oo编出相应的的程序(要求利用逻辑变量)。IMPLICITNONE1.OGICALP,Q,R,SREALX,YINTEGERZREAD*,X,YZ=OP=(X-2)*2+(Y-2)*2<=lQ=(X+2)*2+(Y+2)*2<=lR=(X-2)*2+(Y+2)*2<=lS=(X+2)*2+(Y-2)*2<=lIF(P.OR.Q.OR.R.OR.S)Z=IPRINT*,ZEND第七章数组第124页1、3、4、7、9、121.写出以下程序的执行结果(1)5.05.05.05.04.0(2) K=5(3)123456789101112147102581136912(4)S=15.003 .将一个数组的元素按逆序重新存放,例如,原来存放顺序为:8,6,5,4,10要求改为:1,4,5,6,80IMPLICITNONEINTEGER,PARAMETER:N=5INTEGERA(N),I,TDATAA8,6,5,4,1/WRITE(*,10)(A(I),1=1,5)DOI=1,N2T=A(I)A(I)=A(N-Hl)A(N-I+1)=TENDDOWRITE(*,10)(A(I),1=1,5)10FORMT(1X,514)END4 .求数组中的最大和最小元素,并将最大和最小元素分别与数组的第一和第二元素互换。IMPLICITNONEINTEGERX(10),I,T,M!变量M存放最大数下标序号X=(10,55,25,70,45,15,25,85,45,35/)WRITE(*,10)(X(I),1=1,10)MA=IDO1=2,10IF(X(I)>X(MA)MA=IENDDOT=X(I)X(I)=X(MA)X(MA)=TWRITE(*,10)(X(I),1=1,10)10FORMT(1X,1014)END7.求3X4矩阵中的最大元素和最小元素。REALA(3,4),MX,AMININTEGERI,JDO1=1,3READ(*,*)(A(I,J),J=l,4)ENDDOAMAX=A(1,1)AMIN=A(1,1)DO1=1,3DOJ=l,4IF(I,J)>MX)MX=(I,J)IF(A(I,J)<AMIN)MIN=A(I,J)ENDDOENDDOWRITE(*,*)”最大值:”,AMAXWRITE(*,*)最小值AMINEND9.输入5X5矩阵a,完成以下要求:(1)输出矩阵a。(2)将第2行和第5行元素对调后,输出新的矩阵a。(3)用对角线上的各元素分别去除各元素所在行,输出新的矩阵a。PARAMETER(N=5)INTEGER(N,N),I,J,TDOI=1,NREAD(*,*)(A(I,J),J=l,5)ENDDODOI=1,NWRITE(*,10)(A(I,J),J=1,N)ENDDODOI=1,NT=A(2,I)A(2,I)=A(5,J)A(5,J)=TENDDODOI=1,NWRITE(*,10)(A(I,J),J=1,N)ENDDODOI=1,NDOJ=1,NA(I,J)=A(I,J)A(I,I)ENDDOENDDODOI=1,NWRITE(*,10)(A(I,J),J=1,N)ENDDO10FORMAT(IX,515)END12.按以下格式打印出杨辉三角形的前N行。11 11 2113311464115101051Parameter(N=IO)INTEGERA(N,N),I,JDO1=1,NA(I,1)=1A(I,1)=1ENDDODOI=3,NDOJ=2fI-I(I,J)=A(I-1,J)+A(I-1,J-DENDDOENDDODOI=1,NWRITE(*,10)(I,J),J=1,DENDDO10FORMT(1X,1015)END第八章子程序第173页1、6、8、12、131.指出以下错误的语句函数定义:F(X,Y)=X+Y+2+A-B(2) SUM(X(2),Y,Z)=3*Y+(X(2)+Z)*Z(3) F(X,Y,X)=X*2-Y+X+C-SIN()(4) X2(Z,Y(I)=EXP(Z+l)-*Y(I)(5)LAN(,B,C)=*X+(B-C)*2-X*Y6.设计一个计算n!的函数子程序,并调用该子程序计算数e的近似值。当n!>lE8时停顿计算。计算公式是:FUNCTIONJC(N)JC=IDO1=1,NJC=JC*IENDDOENDPROGRAMEX6REAL*8E,TE=OT=1.01=0DOWHILE(T>lE-8)E=E+TI=I+1T=1.0JC(I)ENDDOPRINT*,EEND8.对任意自然数n,设计一个求n的各数位立方和的函数子程序F(n)(如F(121)=l*3+2*3+l*2=l+8+l=10),并调用F(n)求1000以内的所有水仙花数(水仙花数的概念请参看例8.5)O!子程序FUNCTIONF(N)INTEGERF,N,S,TS=OT=NDOWHILE(T>0)K=MOD(T,10)S=S+K*3T=T/10ENDDOF=SEND!主程序PROGRAMEX8INTEGERF,IDO1=100,999IF(F(I)=I)PRINT*,IENDDOENDDO12 .设计一个子例行程序,计算一个任意数组A中正数、负数和0的个数及其和。!子程序SUBROUTINETJ(A,M,P,N,Z,S)INTEGER(M),M,P,N,Z,S,IP=ON=OZ=OS=ODOI=1,MIF(I)>0)THENP=P+1ELSEIF(AdXO)THENN=N+1ELSEZ=Z+1ENDIFS=S+A(I)ENDDOEND!主程序INTEGERX(10),P,N,S,Z,IDO1=1,10RED(*,*)X(I)ENDDOCALLTJ(X,10,P,N,Z,S)WRITE(*,*)正数个数”,PWRITE(*,*)负数个数,NWRITE(*,*)零数个数”,ZWRITE(*,*)所有数的和,SEND13 .设计一个子例行程序SORT(A,N,K),其中A是一个一维数组,N是A的元素个数,SoRT的功能是:当K=I时,将数组A按升序排列;当K=O时,将数组A按降序排列;当K为其它数值时,数组A保持原序。!子程序SUBROUTINESORT(A,N,K)INTEGERA(N),K,P,TDOI=1,N-1P=IDOJ=I+1,NIF(K=I)THENIF(A(JXA(P)P=JELSEIF(A(J)>A(P)P=JENDIFENDDOT二AA(I)=A(P)A(P)=TENDDOEND!主程序PARAMETER(N=IO)INTEGERX(10),IRED(*,*)XWRITE(*,10)(X(I),I=1,N)CALLSORT(X,N,1)!将数组A按升序排列WRITE(*,10)(X(I),I=1,N)CALLSORT(X,N,0)!将数组A按降序排列WRITE(*,10)(X(I),I=1,N)10FORMT(1X,1015)END