Fortran95实验指导 实验八 子程序

上传人:daj****de 文档编号:151021116 上传时间:2022-09-11 格式:DOCX 页数:11 大小:57.99KB
收藏 版权申诉 举报 下载
Fortran95实验指导 实验八 子程序_第1页
第1页 / 共11页
Fortran95实验指导 实验八 子程序_第2页
第2页 / 共11页
Fortran95实验指导 实验八 子程序_第3页
第3页 / 共11页
资源描述:

《Fortran95实验指导 实验八 子程序》由会员分享,可在线阅读,更多相关《Fortran95实验指导 实验八 子程序(11页珍藏版)》请在装配图网上搜索。

1、实验八函数与子例行程序子程序是FORTRAN95提供的重要功能之一,FORTRAN95允许用户自己定义子程序, 允许用户通过子程序设计和编写程序。在设计和编写一个复杂的程序时,通常需要使用科学 的程序设计方法,如:结构化程序设计方法、模块化程序设计方法、面向对象程序设计方法 等,子程序功能完全支持结构化和模块化程序设计方法,结构化和模块化程序设计方法可通 过子程序得到应用。使用子程序可提高程序的可读性、可理解性、可维护性和可修改性,是 编写高质量、高水平、高效率程序的有效手段。子程序分内部子程序和外部子程序。内部子程序是包含在程序单元CONTAINS结构中 的子程序,只有定义它们的程序单元才能

2、调用执行它们。内部子程序包括函数子程序和子例 行程序两类,通常将函数子程序简称为函数,子例行程序简称为子程序。本次实验是学习和掌握子程序的一次系统实验活动。通过本次实验,能够熟练使用语句 函数、内部子程序、外部子程序设计和编写程序,求解比较复杂的实际问题。一、实验目的1. 了解函数的有关基本概念,如:函数名称、函数自变量、函数调用、函数表达式等。2. 掌握语句函数定义、调用、参数的基本内容和使用规则。3. 掌握使用语句函数设计和编写程序的方法。4. 了解内部子程序的有关基本概念,如:定义、调用、形式参数、实在参数、参数传 递关系等。5. 掌握内部子程序定义、调用、形式参数、实在参数、参数传递的

3、基本内容和使用规 则。6. 掌握结构化程序设计方法。7. 掌握使用内部子程序设计和编写程序的方法。8. 了解递归概念,掌握递归问题的求解方法。9. 掌握递归子程序定义、调用、参数传递关系的基本内容和使用规则。10. 了解外部子程序概念,掌握并行、协调、合作编写大型复杂程序的方法。11. 掌握外部子程序定义、调用、参数传递关系的基本内容和使用规则。12. 掌握使用递归和外部子程序设计和编写程序的方法二、实验内容11、问题描述在解决某工程计算问题时,遇到下列函数:J (x) = 1 + 2 x + x 2f (x) = ,x2; 1 + 2 x + x2ln(1+ x)P(x)=;1 + x2xq

4、(x) = arctan ,x,1 - x 2计算x=0.1,0.2,0.3时,上述函数的值,并输出。使用语句函数编写程序实现之。2、算法设计该问题求解算法比较简单,可使用顺序结构或循环结构实现。根据分析,设计循环结构算法如下:算法:1) 定义语句函数 y(x),f(x),p(x),q(x)2) x=0.1;3) 如果x0.3,则转(7)执行;4) 计算各函数值并输出;5) x=x+1;6) 转执行;7) 结束3、程序编写设计和编写程序如下(不完整,请在下划线空白处填充正确内容):!班级:???!姓名:???旧期:?!语句函数应用PROGRAM MAINy(x)=1+2*x+x*2f(x)=p

5、(x)=q(x)=DO x=0.1,0.3,0.1yx=y(x)fx=f(x)px=qx=q(x)PRINT*,x=,xPRINT*,y(x)=,yxPRINT*,p(x)=,pxPRINT*, q(x)=,qxEND4、实验要求分析问题,理解算法,编写程序,将程序填写正确完整。函数计算必须使用语句函数实现。在D盘上创建新工作区:shiyan08和新项目:xm81。在项目xm81内创建源程序文件:xm81.f90,同时在文件中编辑输入程序。在项目xm81内编译、构建、运行、调试程序。将输出结果以注释形式编辑输入到源程序文件xm81.f90末尾。使用FORALL语句改写程序,实现程序的并行处理,

6、提高程序运行和处理速度。5、实验步骤分析问题,理解算法,编写程序。启动软件开发环境 Microsoft Developer Studio。在D盘上创建新工作区:shiyan08。 在工作区shiyan08内创建新项目:xm81。在项目xm81内创建源程序文件xm81.f90,编辑输入源程序文本。编译、构建、运行、调试程序,得到输出结果。输出结果以注释形式编辑输入到源程序文件末尾。在工作区shiyan08内创建新项目:xm811,在新项目内创建源程序文件xm811.f90, 在文件中编辑输入已改写程序。编译、构建、运行、调试程序,获得输出结果。使用FORALL语句改写程序如下:PROGRAM M

7、AINy(x)=1+2*x+x*2f(x)=p(x)=q(x)=REAL,DIMENSION():yx,fx,px,qxFORALL()yx(i)=y(0.1*i)fx(i)=f(0.1*i) qx(i)=q(0.1*i)DO I=1,3PRINT*,x=,0.1*IPRINT*,y(x)=,yx(I)PRINT*,p(x)=,px(I)PRINT*, q(x)=,qx(I)ENDDOEND三、实验内容21、问题描述已知二项式公式如下:(X + J ) n = C 0 Xn + C1 Xn-1 y + C 2 Xn-2 y 2 + . + CXn-rjr + . + C其中:Cr为二项式系数,

8、通过下面公式计算: n n! ,一一 、Cr = (r = 0,1,2,., n)n(n - r)! r!计算(x + y)5的二项展开式系数,并输出。通过内部函数子程序计算阶乘和二项式系数,编写程序实现之。2、算法设计分析问题,进行任务分解,得到求解问题的分层结构图,如图8-1所示。根据任务分解 图,自行设计和编写主程序来求解总问题,分别设计和编写子程序来求解子问题。根据子问 题的具体内容,设计和编写子程序为函数。图8-1任务分解及分层结构图3、程序编写设计和编写程序如下(不完整,请在下划线空白处填充正确内容):!班级:???!姓名:???旧期:?!计算n阶所有二项式系数PROGRAM MA

9、ININTEGER n,r,pPRINT(A),请输入二项式阶数n:READ*,nPRINT(I2,A),n,二项式系数有:DO r=0,np=PRINT (I4,2X),pENDDOPRINT*CONTAINS!计算阶乘函数FUNCTION fact(n)INTEGER fact,nfact=1DO i=1,nfact=ENDDO!计算任意一个二项式系数函数cnr(n,r)INTEGER cnr,n,rcnr=fact(n)/()END FUNCTIONEND4、实验要求分析问题,分解任务,设计算法,理解程序,将程序填写完整。阶乘和二项式系数计算要求使用内部函数子程序实现。输入输出数据采用有

10、格式输入输出,使输入输出数据规范、醒目、简洁。 在工作区:shiyan08内创建新项目:xm82。在项目xm82内创建源程序文件:xm82.f90,同时在文件中编辑输入程序。在项目xm82内编译、构建、运行、调试程序。将输出结果以注释形式编辑输入到源程序文件xm82.f90末尾。使用递归子程序改写阶乘计算程序。5、实验步骤分析问题,设计算法,编写程序。启动软件开发环境 Microsoft Developer Studio。 在工作区shiyan08内创建新项目:xm82。在项目xm82内创建源程序文件xm82.f90,编辑输入源程序文本。编译、构建、运行、调试程序,得到输出结果。 输出结果以注

11、释形式编辑输入到源程序文件末尾。在工作区shiyan08内创建新项目:xm821,在新项目内创建源程序文件xm821.f90, 在文件中输入已改写程序。编译、构建、运行、调试程序,获得输出结果。四、实验内容31、问题描述已知两个正整数数列A和B,每个数列数据个数不定(最多50个)。从A数列中删除 B数列中出现的数,输出删除前后数列数据。通过内部子例行程序完成删除操作。编写程序 实现之。2、算法设计分析问题,进行任务分解,得到求解问题的分层结构图,如图8-2所示。根据图8-2, 设计和编写主程序求解总问题,设计和编写子例行程序求解子问题。问题:从A数列删除R数列为舞广问题:敏列为容删除图8-2任

12、务分解及分层结构图根据分析,设计求解总问题算法如下:(1)输入A数列和B数列数据(数据个数不定,最多50个)。(2)输出删除前的A数列和B数列数据。(3)从A数列中删除B数列中出现的数据。(4)输出删除后A数列数据。(5)结束。根据分析,设计求解子问题算法,绘制流程图如图8-3所示。n、m分别表示A、B数 列数据个数。因为数据均为正整数,规定-1为删除标志,要删除的数据ai赋值为-1即可。i=i 十 I将知置为-I图8-3流程图3、程序编写使用内部子例行程序设计和编写程序如下(含有若干错误,请查找并改正错误):!班级:???!姓名:???旧期:?!从A数列中删除B数列中出现的数据PROGRAM

13、 mainPARAMETER(max=50)INTEGER A(n),B(max),n,mPRINT (A),请输入A数列数据个数n:READ*,nPRINT (A,I2,A),请输入A数列,n,个数据:READ*,A(i),i=1,nPRINT (A),请输入B数列数据个数m:READ*,mPRINT (A,I2,A),请输入 B 数列,m,个数据:,(B(i),i=1,m)PRINT*,删除前A数列数据:PRINT (1X,(I3,2X),(A(i),i=1,n)PRINT*,删除前B数列数据:PRINT (1X,(I3,2X),(B(i),i=1,m)CALL del(A,B)PRINT

14、*,删除后A数列数据:DOIF(A (i )/=-1) PRINT (I3,2x),A(i)END DOPRINT*CONTAINS!数列内容删除SUBROUTINE del(A,B,n,m)INTEGER A(n),B(m),n,m,i,jDO i=1,nDO j=1,mIF(A (i) B(j) A(i)=-1END IFEND DOEND FUNCTIONEND4、实验要求分析问题,分解任务,理解算法和程序,查找并改正程序错误,得到正确程序。在工作区shiyan08内创建新项目:xm83。在项目xm83内创建源程序文件:xm83.f90,同时在文件中编辑输入程序。在项目xm83内编译、构

15、建、运行、调试程序。输入自行确定的A数列和B数列数据, 得到运行结果。将输入数据和输出结果以注释形式编辑输入到源程序文件xm83.f90末尾。5、实验步骤分析问题,分解任务,理解算法和程序,查找并改正程序错误,得到正确程序。在工作区shiyan08内创建新项目:xm83。在项目xm83内创建源程序文件:xm83.f90,同时在文件中编辑输入程序。在项目xm83内编译、构建、运行、调试程序。输入自行确定的A数列和B数列数据, 得到运行结果。将输入数据和输出结果以注释形式编辑输入到源程序文件xm83.f90末尾。五、实验内容41、问题描述已知:f (X, n)=xn +x(n -1) +n - 2

16、 +x+1 + X计算当x=2.85,n=15时的函数值。使用递归函数求解该问题。编写程序实现之。x和n的值从键盘输入。2、算法设计函数f可用以下递推公式描述。rxf (x, n)= 1) THENf=x/(n+)ELSEPRINT*,n值不符合n31要求.END IFEND FUNCTION END4、实验要求分析问题,理解递推公式、算法、程序和递归函数,将程序填写完整。函数计算使用递归函数子程序实现。输入输出数据采用有格式输入输出,使输入输出数据规范、醒目、简洁。 在工作区:shiyan08内创建新项目xm84。在项目xm84内创建源程序文件:xm84.f90,同时在文件中编辑输入程序。在

17、项目xm84内编译、构建、运行、调试程序。将输出结果以注释形式编辑输入到源程序文件xm84.f90末尾。5、实验步骤分析问题,理解递推公式、算法、程序和递归函数,将程序填写完整。 在工作区:shiyan08内创建新项目xm84。在项目xm84内创建源程序文件:xm84.f90,同时在文件中编辑输入程序。在项目xm84内编译、构建、运行、调试程序,输入x和n的值:2.85,15,得到输 出结果。输出结果以注释形式编辑输入到源程序文件末尾。六、实验内容51、问题描述12 40 20 18 11、25 17 50 30 45已知5x5矩阵A:24 16 14 54 1548 20 10 38 28急

18、 19 28 35 42;按以下要求完成操作:1) 从键盘输入矩阵数据;2) 从屏幕输出矩阵数据;3) 将第2行与第4行交换;4) 从屏幕输出交换后矩阵数据;5) 求矩阵中绝对值最小元素值,及所在行号和列号;6) 用绝对值最小元素值与所在行、列每个元素相加;7) 从屏幕输出相加后矩阵数据;8) 结束对于矩阵输入、矩阵输出、矩阵元素交换、求矩阵绝对值最小元素值、绝对值最小元素 值与所在行列元素相加五类操作,使用外部子例行程序实现。要求外部子例行程序与主程序 单元分别保存在不同的源程序文件中。编写程序实现之。2、算法设计主程序算法类似于问题描述中给出的操作要求和操作顺序。分析问题,学生自行设计主

19、程序算法和绘制主程序流程图。五类操作分别通过 5 个外部子程序 input( A,m,n)、output( A,m,n)、exchange( A,m,n,i1,i2)、 find(A,m,n,minval,min_i,imn_j)和 add( A,m,n,minval,min_i,min_j)实现。学生 自行设计五 个外部子程序求解算法,绘制流程图。A表示二维矩阵,m和n表示矩阵的行数和列数,i1 和i2表示要交换的两个行号,minval、min_i和min_j分别表示绝对值最小值和所在的行号、 列号。3、程序编写根据算法设计和编写主程序程序如下:!班级:???!姓名:???旧期:?!主程序P

20、ROGRAM MAINEXTERNAL input,output,exchange,find,addPARAMETER(m=5,n=5)INTEGER A(m,n),i,j,minval,min_i,min_jCALL input(A,m,n)CALL output(A,m,n)CALL exchange(A,m,n,2,4)CALL output(A,m,n)CALL find(A,m,n,minval,min_i,min_j)CALL add(A,m,n,minval,min_i,min_j)END根据矩阵输入子例行程序input算法,设计和编写外部子程序如下:!矩阵输入外部子例行程序SU

21、BROUTINE input(A,m,n)INTEGER A(m,n),m,n,i,jPRINT (A,I1,A,I1,A),请输入,m,*,n,矩阵数据:READ*,(A(i,j),j=1,n),i=1,m)END SUBROUTINE根据矩阵元素行交换子例行程序exchange算法,设计和编写外部子程序如下:!矩阵元素行交换外部子例行程序SUBROUTINE exchange(A,m,n,i1,i2)INTEGER A(m,n),m,n,i1,i2,j,tDO j=1,nt=A(i1,j);A(i1,j)=A(i2,j);A(i2,j)=tEND DOEND SUBROUTINE根据矩阵绝

22、对值最小元素行、列元素累加子例行程序add算法,设计和编写外部子程序 如下:!矩阵元素累加外部子例行程序SUBROUTINE add(A,m,n,minval,min_i,min_j)INTEGER A(m,n),m,n,minval,min_i,min_j,i,j,sumsum=0DO i=1,msum=sum+A(i,min_j)END DODO j=1,nsum=sum+A(min_i,j)END DOsum=sum-minvalPRINT (绝对值最小元素值与所在行、列每个元素的和为:,I4),sumEND SUBROUTINE对于output和find子例行程序,学生可根据算法自行编

23、写。4、实验要求分析问题,理解主程序算法以及主程序和给定的外部子例行程序,编写其他外部子例 行程序。 在工作区shiyan08内创建新项目:xm85。在项目xm85内创建源程序文件:xm85.f90,同时在文件中编辑输入程序。在项目xm85内编译、构建、运行、调试程序。将输入数据和输出结果以注释形式编辑输入到源程序文件xm85.f90末尾。5、实验步骤分析问题,理解主程序算法以及主程序和给定的外部子例行程序,编写其他外部子例 行程序。 在工作区shiyan08内创建新项目:xm85。在项目xm85内创建源程序文件:xm85.f90,同时在文件中编辑输入程序。在项目xm85内编译、构建、运行、调

24、试程序。输入问题描述中给出的矩阵数据,得 到输出结果。 将输出结果以注释形式编辑输入到源程序文件末尾。七、实验小结本次实验主要涉及语句函数、内部子程序、递归和外部子程序的应用,实验时要注意语 句函数、内部子程序、递归和外部子程序的定义、调用和参数传递。通过本次实验,学生对语句函数、内部子程序、递归和外部子程序有深入了解,能够熟 练使用语句函数、内部子程序、递归和外部子程序设计和编写程序。八、课外练习利用课后业余时间,完成以下练习,以巩固所学知识。求解以下问题:已知:f (x, n) =、: n + Y n 1 + q n 2 +,. +、.,1 + x计算当 x=2.85,3.25,4.12,5.21,6.34,n=11,12,13,14,15 时的 25 个函数值。使用递归函数求解该问题。编写程序实现之。x值从键盘输入,25个函数值以每行5 个按有格式输出方式输出(F10.5格式),解题要求:对问题进行详细分析,设计算法,绘制框图,编写程序。在工作区lianxi08内创建新项目:lx08。在项目1x08内创建源程序文件:lx08.f90,同时在文件中编辑输入源程序文本。在项目1x08内编译、构建、运行、调试程序。 输入数据,得到输出结果,将输入输出数据以注释形式编辑输入到源程序文件末尾。

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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