Fortran95瀹為獙鎸囧 瀹為獙鍏?瀛愮▼搴?- 鐧惧害鏂囧簱 联系客服

发布时间 : 星期三 文章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、实验要求

? 分析问题,分解任务,设计算法,理解程序,将程序填写完整。 ? 阶乘和二项式系数计算要求使用内部函数子程序实现。

? 输入输出数据采用有格式输入输出,使输入输出数据规范、醒目、简洁。