工程分析程序设计上机作业Fortran部分1_第1页
工程分析程序设计上机作业Fortran部分1_第2页
工程分析程序设计上机作业Fortran部分1_第3页
工程分析程序设计上机作业Fortran部分1_第4页
工程分析程序设计上机作业Fortran部分1_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

工程分析程序设计 上机作业(二)模块化编程(1)上机目的:掌握内部例程、主程序、外部例程、接口块、模块等功能的使用方法。1、 有一个六边形,求其面积。为求面积,作了3条辅助线。如图所示:(提示,三角形面积=,其中,a、b、c为三个边长)。要求用内部函数来实现。PROGRAM MAINIMPLICIT NONEREAL :L1=10,L2=20,L3=18,L4=15,L5=21,L6=14,L7=30,L8=36,L9=28REAL FF=AREA(L5,L6,L9)+AREA(L1,L8,L9)+AREA(L2,L7,L8)+AREA(L3,L4,L7)PRINT*,FCONTAINSFUNCTION AREA(A,B,C)REAL S,A,B,C,AREAS=(A+B+C)/2AREA=SQRT(S*(S-A)*(S-B)*(S-C)END FUNCTIONEND2、 使用牛顿法求解以下方程的根:(要求用外部子程序)PROGRAM MAINIMPLICIT NONEREAL F,DFEXTERNAL GENCALL GEN(F,DF)ENDSUBROUTINE GEN(F,DF)IMPLICIT NONEREAL :X=0REAL F,DFINTEGER :N=0INTEGER :MaxN=100REAL :Eps=1.0E-6F=X*2+4*X+1DF=2*X+4DO WHILE (ABS(F)Eps.AND.NMaxN)X=X-F/DFN=N+1F=X*2+4*X+1DF=2*X+4END DOIF (FEps.AND.NMaxN)X=X-F/DFN=N+1F=7*X*4+6*X*3-5*X*2+4*X+3DF=28*X*3+18*X*2-10*X+4END DOIF (FB) A=A-B END DO C=A END SUBROUTINEEND MODULEPROGRAM MAIN USE Mod IMPLICIT NONE REAL A,B INTEGER C PRINT*,请输入A,B的值: READ*,A,B CALL ACR(A,B,C) PRINT*,A和B的余数是:,C END PROGRAM2、 编写函数子程序GDC求两个数的最大公约数。求最大公约数的算法如下:把两个数中大的那个数作为被除数,两数相除得到一个余数。把余数去除除数得到新一轮的余数。不断重复这一过程直到余数为0,这时的除数就是两个数的最大公约数。调用此函数,求1260,198,72三个数的最大公约数。program main implicit none integer a,b,c,i,j,k print*,请输入要求的数:a,b,c read*,a,b,c i=gdc(a,b) j=gdc(b,c) k=gdc(i,j) print*,k contains function gdc(a,b) implicit noneinteger a,b,c,d,gdc if (ba) then d=a a=b b=dend if c=mod(a,b)do while (c0) a=b b=c c=mod(a,b)end do gdc=b end functionend3、 编写一个函数子程序求sinh(x),以下分三个步骤完成:(1)用递归算法,求出;(2)自行编程求出,要求计算精度是不能用Fortran的内部函数EXP(x);(3)计算。 PROGRAM MAINIMPLICIT NONEINTEGER N,XREAL M PRINT*,请输入X值: READ*,X M=SINH(X) PRINT*,SINH(X)=,M CONTAINS FUNCTION SINH(X) IMPLICIT NONE INTEGER I,X,N REAL A,B,C,SINH I=1 A=X/I DO WHILE (A1.0E-6) C=1+A I=I+1 A=A*(X/I) END DO SINH=(C-(1/C)/2 END FUNCTION END4、 编写一程序用Euler法求解微分方程,当x=0时,y=1.0。试求出x=0.1,0.2,0.3,0.4.,1.0时的y值。算法如下:Euler法求解,定解条件:。取向前差分,令, 得 PROGRAM MAINIMPLICIT NONEREAL X,YINTEGER I Y=1.0 X=0 DO I=1,10 Y=Y+0.1*(Y*Y-X*X) X=X+0.1 PRINT*,X=,X,Y=,Y END DOEND工程分析程序设计 上机作业(四)结构化编程上机目的:练习使用选择结构和循环结构编制程序。1、 求y值,x由键盘输入。PROGRAM MAINIMPLICIT NONE REAL X,Y PRINT*,请输入X值 READ*,X IF (X=0.AND.X=10.AND.X=20.AND.XE(J) THEN T=E(I) E(I)=E(J) E(J)=T END IFEND DO END DO PRINT*,E END3、 编写一个子程序,判断一个整数是否素数。PROGRAM MAINIMPLICIT NONEINTEGER X,SSPRINT*,请输入一个整数:READ*,X CALL SUSHU(X,SS)CONTAINSSUBROUTINE SUSHU(A,SS) IMPLICIT NONE INTEGER I,A,B,SS,K K=0 DO I=2,A-1 B=MOD(A,I) IF (B=0) THEN K=K+1END IF END DO IF (K=0) THEN PRINT*,是素数 ELSE PRINT*,不是素数 END IFEND SUBROUTINEEND4、 利用上一编程结果,对1000以内的所有偶数验证哥德巴赫猜想。即:对于大于2的任一偶数,先分解为两个奇数之和,然后验证第一个奇数是否素数,如果是,再验证第二个奇数是否素数,如果两个奇数都是素数,则输出结果。(要求给出所有把偶数分解成两个素数之和的等式)。并统计,每个偶数可以分解的等式个数(两个素数互换位置的不算一个独立的结果),研究随着偶数增大,分解的等式个数的变化规律。PROGRAM MAINIMPLICIT NONEINTEGER I,x,y,SS,NDO I=2,1000,2N=0 DO X=1,I/2,2 Y=I-X CALL SUSHU(X,SS) IF (SS=0) THEN CALL SUSHU(Y,SS) IF (SS=0) THEN PRINT*,I,X,Y N=N+1 END IF END IF END DO PRINT*,共有N种,NEND DOCONTAINSSUBROUTINE SUSHU(A,SS) INTEGER J,A,B,SS,K K=0 DO J=2,A-1 B=MOD(A,J) IF (B=0) THEN K=K+1END IF END DO IF (K=0) THEN SS=0 ELSE SS=1 END IFEND SUBROUTINEEND5、 输入一个自然数,进行因子分解并输出结果,例如24=12223。(输出格式不限)。PROGRAM MAINIMPLICIT NONEINTEGER X,I,A,K,B,JPRINT*,请输入一个自然数:READ*,XB=XDO I=1,B DO J=2,X A=MOD(X,J) IF (A=0) THEN X=X/J PRINT*,J EXIT END IFEND DOEND DOEND工程分析程序设计 上机作业(五)数组(1)上机目的:练习数组的声明、存储、操作,以及数组参数、动态数组、数组函数的使用。1、 打印杨辉三角形(格式不限)。PROGRAM MAINIMPLICIT NONEINTEGER I,J,KINTEGER:A(5,5)DO I=2,5 A(1,1)=1 A(I,1)=1 DO J=2,5 A(I,J)=A(I-1,J-1)+A(I-1,J) END DO END DO DO K=1,5 PRINT*,A(K,:) END DOEND2、 输入两个矩阵,并用矩阵作为子程序的参数,用子程序完成任意两个矩阵的乘法。(如果可能,用数组函数子程序来完成这一功能)3、 PROGRAM MAIN4、 IMPLICIT NONE5、 INTEGER,PARAMETER:L=2,M=2,N=26、 REAL:A(L,M)7、 REAL:B(M,N)8、 REAL:D(L,N)9、 INTEGER R,C,I10、 WRITE(*,*)矩阵A11、 DO R=1,L12、 DO C=1,M13、 WRITE(*,(A(,I1,I1,)=)R,C14、 READ(*,*)A(R,C)15、 END DO16、 END DO17、 WRITE(*,*)矩阵B18、 DO R=1,M19、 DO C=1,N20、 WRITE(*,(B(,I1,I1,)=)R,C21、 READ(*,*)B(R,C)22、 END DO23、 END DO24、 WRITE(*,*)A*B=25、 CALL CHENGFA(A,B,D,L,M,N)26、 DO I=1,L27、 WRITE(*,*)D(I,:)28、 END DO29、 CONTAINS30、 SUBROUTINE CHENGFA(A,B,D,L,M,N)31、 INTEGER L,M,N32、 REAL:A(L,M)33、 REAL:B(M,N)34、 REAL:D(L,N)35、 INTEGER K36、 DO R=1,L37、 DO C=1,M38、 D(R,C)=039、 DO K=1,N40、 D(R,C)=D(R,C)+A(K,C)*B(R,K)41、 END DO42、 END DO43、 END DO44、 END SUBROUTINE45、 END3,用“冒泡算法”对一个数列A(I)进行排序,步骤如下:(1)若A(2)A(1),则将A(2)与A(1)对换位置。(2)若A(3)A(J) THEN K=A(I) A(I)=A(J) A(J)=KEND IF END DO END DOWRITE(*,(10I4)AEND46、 从A、B两个数列中,把同时出现在两个数列中的数据删去。例如:A:2 5 5 8 9 12 18B:5 8 12 12 14操作完成后:A:2 9 18B:14PROGRAM MAINIMPLICIT NONEINTEGER,PARAMETER:X=7INTEGER,PARAMETER:Y=5INTEGER:A(X)=(/2,5,5,8,9,12,18/)INTEGER:B(Y)=(/5,8,12,12,14/)INTEGER:I,J,K,RDO I=1,X DO J=1,Y IF(A(I)=B(J) THEN DO K=I,X-1 DO R=I+1,X IF(A(K)=A(R)THEN A(R)=0END IF END DOEND DO A(I)=0 DO K=J,Y-1 DO R=J+1,Y IF(B(K)=B(R)THEN B(R)=0END IF END DOEND DO B(J)=0END IF END DOEND DOPRINT*,A:DO I=1,X IF(A(I)/=0)THEN PRINT*,A(I) END IFEND DOPRINT*,B:DO J=1,Y IF(B(J)/=0)THEN PRINT*,B(J) END IFEND DOEND工程分析程序设计 上机作业(六)数组(2)上机目的:练习数组的声明、存储、操作,以及数组参数、动态数组、数组函数的使用。1、 从键盘上输入10个整数,然后逆序打印出来。PROGRAM MAINIMPLICIT NONEINTEGER:A(10)INTEGER IDO I=1,10WRITE(*,(请输入第,I2,个整数),IREAD*,A(I)END DOA(1:10)=A(10:1:-1)PRINT*,AEND2、 输入任意n个数存放在数组中(如5个数1、2、8、2、10),请在屏幕上打印如下方阵128210101282210128821012282101PROGRAM MAINIMPLICIT NONEINTEGER A(5),B(5),C(5),D(5),E(5)INTEGER IDO I=1,5WRITE(*,(请输入第,I2,个整数),IREAD*,A(I)END DOPRINT*,AB(1)=A(5)B(2:5)=A(1:4)PRINT*,BC(1:2)=A(4:5)C(3:5)=A(1:3)PRINT*,CD(1:3)=A(3:5)D(4:5)=A(1:2)PRINT*,DE(1:4)=A(2:5)E(5)=A(1)PRINT*,EEND3、 用选择法进行排序:假定A数组中有n个数,设定两个变量P和J,J按顺序从数组开头指向数组的各个位置(也就是应该存放数据的位置),P则指向剩余的数据中最小的数。然后把J指向的元素和P指向的元素进行比较大小,若P指向的元素更小,则把二者对换。如此把J从1号位向后移动至数组末尾,则完成了排序。例如第一步:1584101JPJ指向1号位,P指向25号位的最小值5号位的1,二者对换。第二步:1841015JPJ指向号位,P指向35号位的最小值3号位的4,二者对换。第三步:1481015JPJ指向3号位,P指向45号位的最小值4号位的10,二者不对换。第四步:1481015JPJ指向4号位,P指向5号位的最小值号位的15,二者不对换。根据以上四步,整个数组完成排序。要求在屏幕上显示排序法每步进行的情况。有兴趣的同学还可以比较选择法排序和“冒泡算法”进行排序的速度。PROGRAM MAINIMPLICIT NONEINTEGER,PARAMETER:N=10INTEGER:A(N)=(/12,45,1,23,13,41,17,25,56,3/)INTEGER:P,JINTEGER:MDO J=1,N-1DO P=J+1,NIF(A(P)A(1,1)THEN L=A(2,2)/A(1,2) DO M=1,3 A(2,M)=A(2,M)-L*A(1,M) END DO END IFX1=A(2,3)/A(2,1)X2=(A(1,3)-A(1,1)*X1)/A(1,2)PRINT*,X1,X2END工程分析程序设计 上机作业(七)派生类型上机目的:练习派生类型的定义、构造、初始化,成员的调用和操作。操作符的重载。1、 用派生类型构造一个班的学生的数据库(10个人),包括学号、姓名、3门课的分数,并(1)按学号顺序显示每个人的信息;(2)计算每个人的平均分,按从高到低的顺序从屏幕上显示每个人的信息及其平均分。 PROGRAM MAINTYPE STUDENT CHARACTER(15) NAMEINTEGER XUEHAOREAL YUWEN,SHUXUE,YINGYU,AVREND TYPEINTEGER I,J,K,M,NTYPE(STUDENT):E,FTYPE(STUDENT):W(10) DO I=1,10WRITE(*,(请输入第,I2,个人的姓名:),IREAD*,W(I).NAMEWRITE(*,(请输入第,I2,个人的学号:),IREAD*,W(I).XUEHAOWRITE(*,(请输入第,I2,个人的语文成绩:),IREAD*,W(I).YUWENWRITE(*,(请输入第,I2,个人的数学成绩:),IREAD*,W(I).SHUXUE WRITE(*,(请输入第,I2,个人的英语成绩:),IREAD*,W(I).YINGYUW(I).AVR=(W(I).YUWEN+W(I).SHUXUE+W(I).YINGYU)/3 END DODO J=1,9 DO K=J+1,10 IF(W(J).XUEHAOW(K).XUEHAO) THEN E=W(J) W(J)=W(K) W(K)=E END IF END DOEND DO WRITE(*,(按学号排序:)DO I=1,10 PRINT*,W(I).NAME,W(I).XUEHAO,W(I).YUWEN,W(I).SHUXUE,W(I).YINGYU,W(I).AVREND DO WRITE(*,(2/) WRITE(*,(按均分排序:)DO M=1,9 DO N=M+1,10 IF(W(M).AVRW(N).AVR) THEN F=W(M) W(M)=W(N) W(N)=F END IF END DOEND DODO I=1,10 PRINT*,W(I).NAME,W(I).XUEHAO,W(I).YUWEN,W(I).SHUXUE,W(I).YINGYU,W(I).AVREND DOEND PROGRAM2、 仿照教材的例6-4,(1)设计一个“+”操作符的重载,实现两个集合的合集;(2)设计一个“-”操作符的重载,把集合A中那些同时又出现在集合B中的元素去掉。工程分析程序设计 上机作业(八)指针、格式化输入/输出、文件操作上机目的:练习指针的使用,格式化的输入/输出,文件的操作。1、 1)用自由格式、I2、I4、I4.2的格式操作符从键盘上读入整型数1234,然后再用自由格式、I2、I4、I4.2的格式操作符从屏幕上输出。PROGRAM MAINIMPLICIT NONEREAL I,J,KREAD(*,(I2) IPRINT (I2),IREAD(*,(I4)JPRINT (I4),JREAD(*,(I4.2)KPRINT (I4.2),KEND2)用自由格式、F6.2、E8.2、E12.2E3 、G6.2、EN10.2、ES10.2的格式操作符从键盘上读入实型数-1.234、0.0034567、3.14159E01和98.76E-2,然后再用自由格式、F6.2、E8.2、E12.2E3、G6.2、EN10.2、ES10.2的格式操作符从屏幕上输出。PROGRAM MAINIMPLICIT NONEREAL I,J,K,M,N,H,APRINT*,(自由格式:)READ(*,*) IPRINT*,IPRINT*,(F6.2)READ(*,(F6.2)JPRINT (F6.2),JPRINT*,(E8.2)READ(*,(E8.2)KPRINT (E8.2),KPRINT*,(E12.2E3)READ(*,(E12.2E3)MPRINT (E12.2E3),MPRINT*,(G6.2)READ(*,(G6.2)NPRINT (G6.2),NPRINT*,(EN10.2)READ(*,(EN10.2)HPRINT (EN10.2),HPRINT*,(ES10.2)READ(*,(ES10.2)APRINT (ES10.2),AEND3)从屏幕上读入一个复形数(1.23,-8.9E-02),然后从屏幕上用自由格式、F6.2、E8.2和“实部+虚部i”的形式输出。PROGRAM MAINIMPLICIT NONECOMPLEX:I=(1.23,-8.9E-02)PRINT*,(自由格式:)PRINT*,IPRINT*,(F6.2)PRINT (F6.2),IPRINT*,(E8.2)PRINT (E8.2),IEND4)用自由格式、L、L4从键盘上读入.TRUE.,.T.,.FALSE.,.F.,然后自由格式、L、L4从屏幕上输出。PROGRAM MAINIMPLICIT NONELOGICAL I,J,KPRINT*,(自由格式:)READ(*,*)IPRINT*,IPRINT*,(L)READ(*,(L),JPRINT (L),JPRINT*,(L4)READ(*,(L4),KPRINT (L4),KEND5)用自由格式、A、A3、A5从键盘上读入字符串“A”、“big”、“china”、”microsoft”,并用自由格式、A、A3、A5编辑符从屏幕上输出。注意观察并理解格式输入/输出的结果。PROGRAM MAINIMPLICIT NONECHARACTER I,J,K,MPRINT*,(自由格式:)READ(*,*)IPRINT*,IPRINT*,(A)READ(*,(A),JPRINT (A),JPRINT*,(A3)READ(*,(A3),KPRINT (A3),KPRINT*,(A5)READ(*,(A5),MPRINT (A5),MEND2、 在屏幕上输出如下任意阶的金字塔形状。 * * * *PROGRAM MAINIMPLICIT NONEINTEGER NCHARACTER(5),ALLOCATABLE:A(:,:)INTEGER I,JREAD(*,*)NALLOCAT

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论