发布时间 : 星期三 文章Fortran95瀹為獙鎸囧 瀹為獙鍏?瀛愮▼搴?- 鐧惧害鏂囧簱更新完毕开始阅读65e3be480066f5335a8121a7
实验八 函数与子例行程序
子程序是FORTRAN95提供的重要功能之一,FORTRAN95允许用户自己定义子程序,允许用户通过子程序设计和编写程序。在设计和编写一个复杂的程序时,通常需要使用科学的程序设计方法,如:结构化程序设计方法、模块化程序设计方法、面向对象程序设计方法等,子程序功能完全支持结构化和模块化程序设计方法,结构化和模块化程序设计方法可通过子程序得到应用。使用子程序可提高程序的可读性、可理解性、可维护性和可修改性,是编写高质量、高水平、高效率程序的有效手段。
子程序分内部子程序和外部子程序。内部子程序是包含在程序单元CONTAINS结构中的子程序,只有定义它们的程序单元才能调用执行它们。内部子程序包括函数子程序和子例行程序两类,通常将函数子程序简称为函数,子例行程序简称为子程序。
本次实验是学习和掌握子程序的一次系统实验活动。通过本次实验,能够熟练使用语句函数、内部子程序、外部子程序设计和编写程序,求解比较复杂的实际问题。
一、实验目的
1. 2. 3. 4.
了解函数的有关基本概念,如:函数名称、函数自变量、函数调用、函数表达式等。 掌握语句函数定义、调用、参数的基本内容和使用规则。 掌握使用语句函数设计和编写程序的方法。
了解内部子程序的有关基本概念,如:定义、调用、形式参数、实在参数、参数传递关系等。
5. 掌握内部子程序定义、调用、形式参数、实在参数、参数传递的基本内容和使用规
则。
6. 掌握结构化程序设计方法。
7. 掌握使用内部子程序设计和编写程序的方法。 8. 了解递归概念,掌握递归问题的求解方法。
9. 掌握递归子程序定义、调用、参数传递关系的基本内容和使用规则。 10. 了解外部子程序概念,掌握并行、协调、合作编写大型复杂程序的方法。 11. 掌握外部子程序定义、调用、参数传递关系的基本内容和使用规则。 12. 掌握使用递归和外部子程序设计和编写程序的方法
二、实验内容1
1、问题描述
在解决某工程计算问题时,遇到下列函数:
y(x)?1?2x?x2
1?2x?xln(1?x)p(x)? 1?x2x q(x)?arctan21?x计算x=0.1,0.2,0.3时,上述函数的值,并输出。使用语句函数编写程序实现之。
f(x)?x22
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) 转(3)执行; 7) 结束
3、程序编写
设计和编写程序如下(不完整,请在下划线空白处填充正确内容): !班级:??? !姓名:??? !日期:??? !语句函数应用 PROGRAM MAIN y(x)=1+2*x+x**2
f(x)= __________________ p(x)=__________________ q(x)= __________________ DO x=0.1,0.3,0.1 yx=y(x) fx=f(x) px=____ qx=q(x)
PRINT*,'x=',x PRINT*,'y(x)=',yx PRINT*, _________ ______,'p(x)=',px PRINT*, 'q(x)=',qx _________ END
4、实验要求
? ? ? ? ? ? ? 分析问题,理解算法,编写程序,将程序填写正确完整。 函数计算必须使用语句函数实现。
在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 MAIN y(x)=1+2*x+x**2
f(x)= __________________ p(x)=__________________ q(x)= __________________
REAL,DIMENSION(____)::yx,fx,px,qx FORALL(____) yx(i)=y(0.1*i) fx(i)=f(0.1*i) __________ qx(i)=q(0.1*i)
____________________ DO I=1,3
PRINT*,'x=',0.1*I PRINT*,'y(x)=',yx(I) PRINT*, _________ ______,'p(x)=',px(I) PRINT*, 'q(x)=',qx(I) ENDDO END
三、实验内容2
1、问题描述
已知二项式公式如下:
0n1n?12n?22rn?rrnn(x?y)n?Cnx?Cnxy?Cnxy?...?Cnxy?...?Cny
r其中:Cn为二项式系数,通过下面公式计算: rCn?n! (r?0,1,2,...,n)
(n?r)!r!5计算(x?y)的二项展开式系数,并输出。通过内部函数子程序计算阶乘和二项式系数,
编写程序实现之。
2、算法设计
分析问题,进行任务分解,得到求解问题的分层结构图,如图8-1所示。根据任务分解图,自行设计和编写主程序来求解总问题,分别设计和编写子程序来求解子问题。根据子问题的具体内容,设计和编写子程序为函数。
图8-1 任务分解及分层结构图
3、程序编写
设计和编写程序如下(不完整,请在下划线空白处填充正确内容): !班级:??? !姓名:??? !日期:???
!计算n阶所有二项式系数 PROGRAM MAIN INTEGER n,r,p
PRINT'(A\\)','请输入二项式阶数n:' READ*,n
PRINT'(I2,A\\)',n,'二项式系数有:' DO r=0,n
p=_________ PRINT '(I4,2X\\)',p ENDDO PRINT* CONTAINS !计算阶乘函数 FUNCTION fact(n) INTEGER fact,n fact=1 DO i=1,n
fact=_________ ENDDO _________
!计算任意一个二项式系数函数 _________cnr(n,r)
INTEGER cnr,n,r
cnr=fact(n)/( _________) END FUNCTION END
4、实验要求
? 分析问题,分解任务,设计算法,理解程序,将程序填写完整。 ? 阶乘和二项式系数计算要求使用内部函数子程序实现。
? 输入输出数据采用有格式输入输出,使输入输出数据规范、醒目、简洁。