
Fortran95实验指导 实验八 子程序.docx
11页实验八函数与子例行程序子程序是FORTRAN95提供的重要功能之一,FORTRAN95允许用户自己定义子程序, 允许用户通过子程序设计和编写程序在设计和编写一个复杂的程序时,通常需要使用科学 的程序设计方法,如:结构化程序设计方法、模块化程序设计方法、面向对象程序设计方法 等,子程序功能完全支持结构化和模块化程序设计方法,结构化和模块化程序设计方法可通 过子程序得到应用使用子程序可提高程序的可读性、可理解性、可维护性和可修改性,是 编写高质量、高水平、高效率程序的有效手段子程序分内部子程序和外部子程序内部子程序是包含在程序单元CONTAINS结构中 的子程序,只有定义它们的程序单元才能调用执行它们内部子程序包括函数子程序和子例 行程序两类,通常将函数子程序简称为函数,子例行程序简称为子程序本次实验是学习和掌握子程序的一次系统实验活动通过本次实验,能够熟练使用语句 函数、内部子程序、外部子程序设计和编写程序,求解比较复杂的实际问题一、实验目的1. 了解函数的有关基本概念,如:函数名称、函数自变量、函数调用、函数表达式等2. 掌握语句函数定义、调用、参数的基本内容和使用规则3. 掌握使用语句函数设计和编写程序的方法。
4. 了解内部子程序的有关基本概念,如:定义、调用、形式参数、实在参数、参数传 递关系等5. 掌握内部子程序定义、调用、形式参数、实在参数、参数传递的基本内容和使用规 则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(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) 如果x>0.3,则转(7)执行;4) 计算各函数值并输出;5) x=x+1;6) 转⑶执行;7) 结束3、程序编写设计和编写程序如下(不完整,请在下划线空白处填充正确内容):!班级:???!姓名:???旧期:???!语句函数应用PROGRAM MAINy(x)=1+2*x+x**2f(x)= p(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语句改写程序,实现程序的并行处理,提高程序运行和处理速度5、实验步骤•分析问题,理解算法,编写程序•启动软件开发环境 Microsoft Developer Studio•在D盘上创建新工作区:shiyan08• 在工作区shiyan08内创建新项目:xm81•在项目xm81内创建源程序文件xm81.f90,编辑输入源程序文本•编译、构建、运行、调试程序,得到输出结果•输出结果以注释形式编辑输入到源程序文件末尾•在工作区shiyan08内创建新项目:xm811,在新项目内创建源程序文件xm811.f90, 在文件中编辑输入已改写程序编译、构建、运行、调试程序,获得输出结果使用FORALL语句改写程序如下:PROGRAM MAINy(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 + ... + C^Xn-rjr + ... + C"其中:Cr为二项式系数,通过下面公式计算: n„ n! ,一一 、Cr = (r = 0,1,2,..., n)n (n - r)! r!计算(x + y)5的二项展开式系数,并输出。
通过内部函数子程序计算阶乘和二项式系数,编写程序实现之2、算法设计分析问题,进行任务分解,得到求解问题的分层结构图,如图8-1所示根据任务分解 图,自行设计和编写主程序来求解总问题,分别设计和编写子程序来求解子问题根据子问 题的具体内容,设计和编写子程序为函数图8-1任务分解及分层结构图3、程序编写设计和编写程序如下(不完整,请在下划线空白处填充正确内容):!班级:???!姓名:???旧期:???!计算n阶所有二项式系数PROGRAM MAININTEGER 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、实验要求•分析问题,分解任务,设计算法,理解程序,将程序填写完整。
•阶乘和二项式系数计算要求使用内部函数子程序实现•输入输出数据采用有格式输入输出,使输入输出数据规范、醒目、简洁• 在工作区:shiyan08内创建新项目:xm82•在项目xm82内创建源程序文件:xm82.f90,同时在文件中编辑输入程序•在项目xm82内编译、构建、运行、调试程序•将输出结果以注释形式编辑输入到源程序文件xm82.f90末尾•使用递归子程序改写阶乘计算程序5、实验步骤•分析问题,设计算法,编写程序•启动软件开发环境 Microsoft Developer Studio• 在工作区shiyan08内创建新项目:xm82•在项目xm82内创建源程序文件xm82.f90,编辑输入源程序文本•编译、构建、运行、调试程序,得到输出结果• 输出结果以注释形式编辑输入到源程序文件末尾•在工作区shiyan08内创建新项目:xm821,在新项目内创建源程序文件xm821.f90, 在文件中输入已改写程序编译、构建、运行、调试程序,获得输出结果四、实验内容31、 问题描述已知两个正整数数列A和B,每个数列数据个数不定(最多50个)从A数列中删除 B数列中出现的数,输出删除前后数列数据。
通过内部子例行程序完成删除操作编写程序 实现之2、 算法设计分析问题,进行任务分解,得到求解问题的分层结构图,如图8-2所示根据图8-2, 设计和编写主程序求解总问题,设计和编写子例行程序求解子问题问题:从A数列删除R数列为舞广问题:敏列'为容删除图8-2任务分解及分层结构图根据分析,设计求解总问题算法如下:(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 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,
•在工作区shiyan08内创建新项目:xm83•在项目xm83内创建源程序文件:xm83.f90,同时在文件中编辑输入程序•在项目xm83内编译、构建、运行、调试程序输入自行确定的A数列和B数列数据, 得到运行结果•将输入数据和输出结果以注释形式编辑输入到源程序文件xm83.f90末尾5、 实验步骤•分析问题,分解任务,理解算法和程序,查找并改正程序错误,得到正确程序•在工作区shiyan08内创建新项目:xm83•在项目xm83内创建源程序文件:xm83.f90,同时在文件中编辑输入程序•在项目xm83内编译、。
