Fortran 90上级实验报告

合集下载

Fortran程序总结

Fortran程序总结

1.行的书写(行的长度、分行、续行)一行可以是0~132个字符,空格有意义,语句最长不超过2640个字符一行可以有多个语句,用“;”分隔一个语句可分行写,读行标记为&(放在尾部),但如为关键字,首尾均加&。

最多可有511个续行。

2.说明语句必须出现在可执行语句之前,格式说明语句(FORMAT语句)除外。

3.注释标志符:自由格式:!固定格式:C *语句分隔符:分号;(仅自由格式可以使用)续行符:自由格式:&申明标号:1到5位无符号整数空格:关键字、变量、常量内部不能用空格,但相邻两者之间须用空格4.信息处理的分类:数值处理和信息处理现代计算机工作原理:程序存储和程序控制(冯·诺依曼)1、运算器——算术运算、逻辑运算2、控制器——根据指令控制计算机工作运算器、控制器和寄存器称为中央处理器CPU3、I/O设备——提供数据传输服务4、总线——数据传输的公共通道1.机器语言:二进制代码形式,可以被计算机直接执行,不可移植2.汇编语言:用助记符来代替机器指令,容易记忆,不可移植3.高级语言:接近自然语言(英语)的程序设计语言,又称算法语言,易学、易用、易维护,可移植性好例:FORTRAN、BASIC、PASCAL、C、LISP、PROLOG等5.FORTRAN90程序是一种分块结构,由若干个程序单元块组成:主程序、外部子程序、模块、块数据单元无论是主程序单元,还是子程序单元,都是独立的程序单位,应该独立编写,它们的形式相似。

非语句行:注释语句:!后的所有字符都被编译器忽略。

可独占一行,也可在其它语句之后,空行为注释行(固定格式用C和*)6.常量的定义:常量是程序执行过程中不能变化的量。

基本数据类型有五种:整型、实型、复型、字符型和逻辑型前三种属于数值类型,后两种为非数值类型,主要用于文字处理和控制。

FORTRAN 90通过KIND值确定整数的存储开销、最大位数和取值范围,如表所示。

F90实验报告

F90实验报告

实验1 FORTRAN 90的编程环境与简单程序设计一、实验目的1.熟悉FORTRAN90的编程环境——Fortran PowerStation 4.0,并能够在此环境下编写FORTRAN90的程序。

2.掌握FORTRAN90程序中所用到的类型说明语句、赋值语句、读、写语句等语句的语句格式,理解并掌握这些语句的功能。

3.掌握简单程序设计方法,能够用简单的语句编写一些简单的应用程序。

4.掌握FORTRAN90源程序的结构特点与书写规范。

二、实验要求1.根据题目,设计各题算法并画出流程图,按照流程图编写程序。

2.对每个程序认真进行语法检查与逻辑检查。

3.上机调试程序。

按各个程序输入计算机,并且编译和连接,如果在编译、连接中有错误信息,则要根据这些信息找到程序中的错误所在,然后修改程序,直至正确。

4.运行程序,记录数据输入和数据输出的情况。

5.写出实验报告。

三、实验内容1.开机;进入Fortran PowerStation4.0集成工作环境,了解工作环境及其菜单的使用,输入如下FORTRAN90源程序,并以A1.F90存盘。

PROGRAM EX1IMPLICIT NONEPRINT *,'2+3=',2+3PRINT *,'This is a program!'END PROGRAM EX1编译、链接、运行后,结果是:2.输入并调试以下程序,查看运行结果。

PROGRAM EX2IMPLICIT NONEINTEGER::A,B,CREAD *,A,BC=A+BPRINT *,'A+B=',CEND PROGRAM EX2运行时,输入2,3↙,则结果是:3.程序设计4π3R)及经过球心的横切面的直径(2R)、周长(2πr)⑴已知一个球的半径,求它的表面积(4π2R)、体积(3和面积(π2R)。

⑵某单位在发放工资时,为每个职工准备一个工资袋。

假定币值为100元、50元、10元、5元、2元、1元、5角、2角和1角9种,设某职工的工资为X,试计算他的工资袋里各币值的张数。

(新)FORTRAN90程序设计实验指导

(新)FORTRAN90程序设计实验指导

FORTRAN90程序设计实验指导第一节 FORTRAN PowerStation 4.0快速入门1.1 安装FORTRAN PowerStation 4.01.1.1 系统要求安装Microsoft FORTRAN PowerStation 4.0需要具备以下软硬件条件:●80486或以上处理器,运行Windows 95/Windows NT 3.51或以上操作系统。

●如果安装标准版,需要3.5英寸软盘驱动器或光盘驱动器,如安装专业版,则必须具有光盘驱动器。

●16MB或以上内存。

●足够的硬盘空间。

安装程序根据安装选项提示所需的硬盘空间。

标准版和专业版的典型安装分别需要约45MB和70MB硬盘空间。

●VGA显示器(推荐使用SVGA显示器)。

●鼠标。

1.1.2 安装步骤下面以Windows 95操作系统为例,对于Windows NT操作系统,安装过程与此类似。

首先,将含FORTRAN PowerStation 4.0的光盘插入光盘驱动器,在资源管理器中运行Setup程序,屏幕显示Microsoft FORTRAN PowerStation Setup窗口;安装程序自动搜索已有组件,单击【Continue】(继续)按钮,并按提示输入CD-Key后,安装程序会显示安装选项对话框(图1.1);如果要改变安装FORTRAN PowerStation 4.0的文件夹,单击【Change Folder...】(改变文件夹)按钮,选择或输入所需的文件夹名;如果输入的文件夹不存在,安装程序会自动生成该文件夹,并生成几个下级文件夹以存放相应的各类文件。

图1.1还显示了各安装选项的简短说明和安装时所需的硬盘空间。

选择下列四个安装选项之一继续安装:Typical(典型)Custom/Complete(定制/完全)Compact(紧凑)Run from CD-ROM(从光盘运行)图1.1 Setup程序的安装选项对话框Typical(典型)安装选项将安装最常用的部分,约需70MB 硬盘空间。

FORTRAN实验报告——牛顿插值

FORTRAN实验报告——牛顿插值
(N) DO I=N,2,-1 NBDF=NBDF*(S+I-1)/I+DIAG(N).R(I-1) ENDDO NBDF=Y(N)+S*NBDF END FUNCTION NBDF END MODULE INTERPOLATION 测试程序: PROGRAM TEST_1 !TEST For Newton Interpolatoin Formula with Divided Difference USE INTERPOLATION REAL*8::XSTAR=0.23D0,YSTAR CHARACTER(20)::FNAME='DATA01.TXT' CALL INIT1(FNAME) !初始化结点 PRINT '(2A13)','X','Y' DO I=0,N PRINT '(2F13.7)',X(I),Y(I) END DO PRINT* YSTAR=NIFDD(XSTAR) !插值函数 PRINT 100,'XSTAR','YSTAR','ERROR',XSTAR,YSTAR,YSTAR-(EXP(XSTAR)-EXP(-XSTAR))/2 CALL DESTROY() 100 FORMAT(3A13/,3F13.7)
IV / 4
s(s+1) 2! s(s −1) 2!
∆2 f0 + ⋯ +
s s −1 …(s −n+1) n!
∆n f0
∇2 fN + ⋯ +
s s+1 …(s+n −1) n!
∇n fN
ERROR 0.0000009 ERROR 0.0000023

中南大学计算机程序设计报告—FORTRAN

中南大学计算机程序设计报告—FORTRAN

中南大学本科生课程设计(实践)任务书、设计报告(计算机程序设计基础—FORTRAN)题目线性病态方程组问题学生姓名***指导教师***学院土木工程学院专业班级土木工程****班学生学号**********计算机基础教学实验中心20**年* 月* 日课程设计实践报告一、任务内容本次实践我的研究课题为“线性病态方程组问题”,题目如下:2.线性病态方程组问题。

下面是一个线性病态方程组:⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡52.067.095.06/15/14/15/14/13/14/13/12/1321x x x (1)求方程的解。

(2)将方程右边向量元素b 3改为0.53,再求解,并比较b 3的变化和解的相对变化。

(3)计算系数矩阵A 的条件数并分析结论。

提示:矩阵A 的条件数等于A 的范数与A 的逆矩阵的范数的乘积,即1)(-⋅=A A A cond 。

这样定义的条件数总是大于1的。

条件数越接近于1,矩阵的性能越好,反之,矩阵的性能越差。

矩阵A 的条件数1()cond A A A -=⋅,其中11max{}mij j ni A a ≤≤==∑,a ij 系矩阵A 的元素。

要求:(1)方程的系数矩阵、常数向量均从文件中读入。

(2)定义求解线性方程组Ax=b 的子程序,要求该子程序能求解任意线性方程组。

(3)在主程序中调用子程序,并对求解结果进行对比分析。

(4)绘制常数向量修改前后所求得的方程解的数据分布图。

二.系统开发设计思想本题采用的方法主要有高斯消元法和矩阵求逆法,然后按照有关线性方程组的解法,求出方程组的解。

对所求结果进行对比,然后绘制出有关图像。

首先编写主程序,从文件中调用主程序,进行调试,输出方程组的解。

本题编写了三个子程序,第一个子程序GAUSS是用高斯消元法编写而出,第二个子程序INVERSEMATRIX是用逆矩阵法编写而出,第三个子程序FANSHU由范数的定义来编写的。

FORTRAN实验报告(一)

FORTRAN实验报告(一)
3、格式输入输出控制函数PRINT、WRITE、READ,格式控制语句FORMAT(),以下是对整型I、浮点型F、指数形式E、字符型A、逻辑型L等输入输出的例子。
①整型:
PROGRAM ADD6_1
!输出9*9乘法表
INTEGER I,J
DO I=1,9
PRINT 10,(J,I,J*I,J=1,I) !隐性DO循环
输出:87 67.40 465 345.70
⑵输入:0087067.40
0046500345.70
输出:87 67.40
465 345.70
③指数形式:
PROGRAM XI6_2
!输入1234567891011121314151617181920
INTEGER A
REAL B,C
CHARACTER*10 D
1*3= 3 2*3= 6 3*3= 9
1*4= 4 2*4= 8 3*4=12 4*4=16
1*5= 5 2*5=10 3*5=15 4*5=20 5*5=25
1*6= 6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7= 7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
STATEMENT
END SELECT
2、循环结构格式如下:
DO循环:DO I=E1,E2,E3
STATEMENT
[IF(L) EXIT]
[IF(L) CYCLE]
ENDDO
DO WHIEL循环:DO WHILE(LOGICAL)
STATEMENT
ENDDO
隐DO循环:(STATEMENT, I=E1,E2,E3)(可以嵌套使用)

Fortran实验报告样例(1)

Fortran实验报告样例(1)

n n 1)1(312111+-+⋅⋅⋅-+-实验报告样例南京信息工程大学Fortran 语言程序设计 实验(实习)报告 实验(实习)名称 循环程序设计 实验(实习)日期 得分 指导老师系 专业 班级 姓名 学号一.实验目的:1. 掌握DO 、DO WHILE 语句的语法规则和使用要求。

2. 掌握循环结构概念和循环结构程序设计方法。

3. 掌握强制性终止循环语句EXIT 和CYCLE 的基本功能和使用规则,以及相互区别。

4. 掌握嵌套循环结构概念和应用。

二.实验内容1:1. 问题描述给定5名学生的考试成绩S,评判每个学生的成绩等级,并输出。

编写程序实现之。

成绩按以下标准评定等级:优:90≤S ≤100;良:80≤S<90;中:70≤S<80; 及格:60≤S<70;不及格:S<60。

2.问题分析已知:5个学生成绩:s 1、s 2、s 3、s 4、s 5,从键盘输入,数据类型为整型。

求:5个学生成绩等级,g1、g2、g3、g4、g5,数据类型为字符型。

求解该问题的基本思想是:从键盘依次读取学生成绩数据,每读一个学生成绩,就按照成绩等级评定标准评定等级,并输出该学生等级。

由于有确定的5个学生,所以读取学生成绩和评定成绩等级共5次。

该问题显然是一个重复次数确定的重复处理问题,可通过“计数型”循环结构和DO 循环语句实现。

用整型变量cj 表示学生成绩,用字符型变量grade 表示成绩等级。

用整型变量I 作为循环控制变量。

通过分析,设计算法,绘制框图,如图6-2所示。

3. 实验步骤:1) 算法流程图:2) 编制源程序:(可附在下一页上)3) 运行结果:输入:输出:4. 分析实验中遇到的问题及其解决的办法三、实验内容2:1.问题描述计算其中n 为满足不等式12+22+32+…+n 2>A 的最小项数n。

A 从键盘输入,如:10000。

编写程序实现之。

2.问题分析求解本题,先通过“条件型”循环结构求最小项数n ,整型数,然后再通过“计数型”循环计算级数之和。

fortran实验报告

fortran实验报告

fortran实验报告FORTRAN实验报告实验⽇期2012年3⽉6⽇⼀、实验⽬的1、了解FORTRAN90软件开发环境2、学会启动Fortran,掌握程序的编辑、编译、构建、运⾏⽅法。

3、了解软件开发环境常⽤菜单、⼯具按钮、环境窗⼝基本功能。

掌握⽂件、⽂件夹的移动、复制、删除等操作⽅法。

⼆、实验内容1、运⾏Microsoft Developer Studio软件开发环境。

2、理解有关⼯作区(Workspaces)、项⽬(Projects)、⽂件(Files)的基本概念。

3、掌握⼯作区(Workspaces)、项⽬(Projects)、⽂件(Files)创建⽅法。

4、掌握程序的编辑(Edit)、编译(Compile)、构建(Build)、运⾏(Run)⽅法三、实验步骤1、建⽴⽂件夹2、启动Microsoft Developer Studio软件开发环境,并创建⼯作区、项⽬3、创建⽂件4、编译项⽬内源程序⽂件5、构建可执⾏程序⽂件。

6、运⾏可执⾏程序⽂件四、实验结果与分析实验结果:FORTRAN实验报告实验⽇期2013年3⽉13⽇⼀、实验⽬的1、掌握源程序的书写格式;2、掌握FORTRAN 90中基本数据类型及其描述、运算;3、掌握基本语句的使⽤⼆、实验内容编写简单程序代码1、整数类型program ex0404 integer aa=3write(*,*) "a=",astopEndprogram ex0406 integer(kind=4) write write=2+2*4-3write(*,*) "2+2*4-3=",write stopEnd2、浮点数类型program ex0410real :: a,b,ca=0.5b=0.5c=sin(a)**2 + cos(b)**2 write(*,*) "c=",cstopEnd3、复数类型program ex0411 complex :: a,ba=(1.0,1.0)b=(1.0,2.0)write(*,*) "a+b=",a+b write(*,*) "a-b=",a-b write(*,*) "a*b=",a*b write(*,*) "a/b=",a/bstopend4、字符类型program ex0413 character(len=20) stringstring = "Good morning."write(*,*) stringstring(6:) = "evening." ! 重设设定从第6个字符之后的字符串write(*,*) string end5、逻辑类型program ex0416logical a,ba=.true.b=.false.write(*,*) a,bend三、实验步骤1、编译、构建、运⾏、调试程序2、编写实验报告四、实验结果与分析1、执⾏结果:2、执⾏结果:3、执⾏结果:45、FORTRAN实验报告实验⽇期2012年3⽉26⽇⼀、实验⽬的1、掌握⾃定义数据类型的使⽤,熟练进⾏程序编写⼆、实验内容⾃定义类型program ex0434implicit none! 开始建⽴person这个类型character(len=30) :: name ! ⼈名integer :: age ! 年龄integer :: height ! ⾝⾼integer :: weight ! 体重character(len=80) :: address ! 地址end type persontype(person) :: a ! 声明⼀个person类型的变量write(*,*) "NAME:"read(*,*) a%namewrite(*,*) "AGE:"read(*,*) a%agewrite(*,*) "HEIGHT:"read(*,*) a%heightwrite(*,*) "WEIGHT:"read(*,*) a%weightwrite(*,*) "ADDRESS:"read(*,"(A80)") a%addresswrite(*,100) a%name,a%age,a%height,a%weight100 format("Name:",A10/,"Age:",I3/,"Height:",I3/,"Weight:",I3,& &"Addres:",A50) stopend三、实验步骤1、编写程序代码、编译、调试2、编写实验报告四、实验结果与分析实验结果:输⼊Chang 23 171 59 hebeidaxue执⾏结果:FORTRAN实验报告实验⽇期2012年4⽉9⽇⼀、实验⽬的掌握输⼊输出的格式及变量声明的应⽤⼆、实验内容1、输⼊输出的格式integer areal bcomplex clogical dcharacter(len=20) ea=10b=12.34c=(1,2)d=.true.e="FORTRAN"write(*,"(1X,I5)") a ! ⽤I来格式化整数write(*,"(1X,F5.2)" ) b ! ⽤F来格式化浮点数write(*,"(1X,F4.1,F4.1)" ) c ! complex也是浮点数write(*,"(1X,L3)") d ! ⽤L来输出logicalwrite(*,"(1X,A10)") e ! ⽤A来输出字符串End⼆、变量声明的应⽤program ex0432implicit noneinteger :: a=1integer :: b=2real :: cc=real(a)/real(b) ! 经由库函数real把整数转换成浮点数write(*,"(F5.2)") c end⼆、实验步骤1、编译、调试2、编写实验报告四、实验结果与分析实验结果:1、2、FORTRAN实验报告实验⽇期2012 年4⽉17⽇⼀、实验⽬的1、熟悉和掌握选择结构程序的编写⽅法2、熟悉和掌握各种选择结构的实现⽅法⼆、实验内容1、编写计算⾝⾼、体重是否正常代码program ex0502implicit nonereal(kind=4) :: height ! 记录⾝⾼real(kind=4) :: weight ! 记录体重write(*,*) "height:"read(*,*) height ! 读⼊⾝⾼write(*,*) "weight:"read(*,*) weight ! 读⼊体重if ( weight > height-100 ) then! 如果体重⼤于⾝⾼减去100, 会执⾏下⾯的程序write(*,*) "Too fat!"else! 如果体重不⼤于⾝⾼减去100, 会执⾏下⾯的程序write(*,*) "Under control." end ifstopEnd2、计算学⽣的成绩program ex0512implicit noneinteger scorecharacter gradewrite(*,*) "Score:"read(*,*) scoreselect case(score)case(90:100) ! 90到100分之间grade='A'case(80:89) ! 80到89分之间grade='B'case(70:79) ! 70到79分之间grade='C'case(60:69) ! 60到69分之间grade='D'case(0:59) ! 0到59分之间grade='E'case default ! 其它情形grade='?'end selectwrite(*,"('Grade:',A1)") gradestopend三、实验步骤1、分析问题,设计算法,编写程序2、编译、构建、运⾏、调试程序3、编写实验报告四、实验结果与分析第⼀个程序执⾏结果:输⼊170 58输⼊170 89第⼆个程序执⾏结果:输⼊89输⼊98FORTRAN实验报告实验⽇期2012 年4⽉24⽇⼀、实验⽬的1、了解⼦程序定义、调⽤、形式参数、实在参数、参数传递的基本内容和使⽤规则2、了解结构化程序设计⽅法3、了解使⽤⼦程序设计和编写程序的⽅法⼆、实验内容1、要求验证书本所讲的Fortran程序的⼦程序编写规则及调⽤⽅法。

FORTRAN实验报告

FORTRAN实验报告

实验四 实验四
姓名 字符型数据程序设计
实验日期
任课教师 操作型
二、实验内容: 实验内容:
(1)编写程序:输入一个字符,若为小写字母,则输出其大写字母;若为大写字母,则输出其小写字 母;若为数字,则原样输出该数字字符;否则,输出*。 (2)编写程序,用双精度数据计算:
cos x ≈ 1 −
三、实验平台
e x − e−x ,编写程序求 sh(2)-sh(3)。 2
(3)编写求阶乘及累加和的函数,调用函数求:
S = ∑ (∏ i + ∑ i )
n =1 i =1 i =1
m
n
n
当 m=10 时,S=

三、实验平台
Fortrபைடு நூலகம்n PowerStation 4.0
四、程序清单 1.recursive function fib(a,b,n) result(fi) select case(n) case(1) fi=a case(2) fi=b case(3:) fi=fib(b,a+b,n-1) end select end program fib_pro real::a,b,maxfib=0 integer::k,num=0 read*,a,b write(*,*)(fib(a,b,k),k=1,20) do k=1,20 if(fib(a,b,k)<=5000.and.fib(a,b,k)>maxfib) then maxfib=fib(a,b,k)
p=>x(1:i,1) p=p+1 PRINT *,p END DO END 请将程序略作修改,用于输出下列图形: (1) 1 1 1 1 1 2 2 2 2 3 3 3 4 4 5

FORTRAN上机实验报告(文件)

FORTRAN上机实验报告(文件)

大气科学学院FORTRAN程序设计实验报告(2015)有格式文件:有格式文件包括数据本身和记录间的分隔信息,文件中的数据以字符形式(ASCII码)存放记录由一个个的字符组成,每个字符对应一个字节。

有格式文件由格式记录组成,记录的长度与指定的格式有关。

有格式文件的每一记录后用回车符和换行符作为结束标志,可以用文本编辑器直接打开查看内容,所有内部文件都是有格式文件。

FORM= FORMATTED无格式文件:无格式文件包括数据本身和记录间的分隔信息,文件中以二进制式存放数据。

输入输出无需转化,直接高效。

无格式文件的记录间用回车符和换行符作为分隔标志。

FORM= UNFORMATTED二进制文件:二进制文件仅包含数据本身,记录间无分隔信息,结构最紧凑,适合于保存大容量数据的文件。

FORM= BINARY占用空间:有格式〉无格式〉二进制无格式与二进制便于输入输出,但不便供人阅读。

对二进制文件和无格式文件输入输出无需格式控制。

顺序存取:文件中所有记录按存取的先后顺序排列,执行读写操作时,只能从头到尾顺序依次进行。

不能用一个读写语句随意指定要读取的某条记录。

ACCESS=SEQUENTIAL直接存取:文件中所有记录都以自然数进行编号(记录号)且每条记录都有相同长度,读写时可以根据程序需要直接对某条指定的记录进行操作。

ACCESS=DIRECT题目一PROGRAM llREAL,DIMENSION(100):: NUM,QINTEGER M,NREAL IOPEN(10,FILE="RND.TXT")OPEN(12,FILE="RAA.TXT")READ(10,'(F7.2)') NUM!READ(10,*)NUMPRINT '(5F7.2)',NUM !输出读入数据DO M=1,99DO N=M+1,100IF(NUM(M).GT.NUM(N))THEN !比较大小I=NUM(M)NUM(M)=NUM(N)NUM(N)=IEND IFEND DOEND DOWRITE(12,'(5F7.2)') NUM !写入文件12CLOSE(10)CLOSE(12)END题目二PROGRAM KKINTEGER :: I,N=0 REAL :: SUM=0,WATER INTEGER NAMECHARACTER(21) NUMOPEN(10,FILE="05070408.000")OPEN(11,FILE="R05070408.txt")OPEN(12,FILE="HR.txt")PRINT *,'站号:降水量'DO I=1,14READ(10,*) !去除文件头END DODO WHILE(.NOT.EOF(10))READ(10,'(I5,A22,F6.2)') NAME,NUM,WATERWRITE(11,'(I5,A22,F6.2)') NAME,NUM,WATER !写入文件11 IF(WATER.GT.50)THEN !比较〉50降水量WRITE(12,'(I5,3X,F6.2)') NAME,WATER !写入文件12WRITE(*,'(I5,3X,F6.2)')NAME,WATER !屏幕输出符合条件的站N=N+1SUM=SUM+WATEREND IFEND DOPRINT *,'平均降水量'PRINT *,SUM/NCLOSE(10)CLOSE(11)CLOSE(12)END。

河北大学工商学院Fortran程序设计实验报告

河北大学工商学院Fortran程序设计实验报告

年级2010级学号2010483036姓名王丽丽成绩专业土木工程实验地点B3-216 指导教师袁满实验项目输入输出和声明语句实验日期2012-3-2一、实验目的:练习fortran语言中的输入输出和声明语句的使用二、实验要求:阅读书上例题并调试运行三、实验结果及分析program e41implicit noneinteger areal bcomplex clogical dcharacter*(20) ea=10b=12.34c=(1,2)d=.true.e="fortran"write(*,100) a 运行结果:100 format(1x,i5)write(*,200) b200 format(1x,f5.2)write(*,300) c300 format(1x,f4.1,f4.1)write(*,400) d400 format(1x,l3)write(*,500) e500 format(1x,a10)End年级2010级学号2010483036 姓名王丽丽成绩专业土木工程实验地点B3-216 指导教师袁满实验项目输入输出和声明语句实验日期2012-3-9一、实验目的:练习fortran语言中的输入输出和声明语句的使用二、实验要求:练习使用输入输出和声明语句三、实验结果及分析(1)program t0402 运行结果:real r,mj,zcwrite(*,*)"请输入圆的半径"read(*,*) rpai=3.14mj=r*r*paizc=2*pai*rwrite(*,*) "圆的面积是:",mjwrite(*,*) "圆的周长是:",zcstopend program t0402end program t0403(2)program t0401 运行结果:real ra,rbinteger a,ba=2b=3ra=2.0rb=3.0write(*,*) b/a 整型变量只保留数值的整数位,小数部分舍去。

《Fortran语言程序设计》实验指导书(2005,理,工,王万银)

《Fortran语言程序设计》实验指导书(2005,理,工,王万银)

《Fortran 语言程序设计》实验指导书(勘查技术与工程地球物理学专业)王万银邱之云编写地质工程与测绘工程学院地球探测与信息工程系二O O六年前言一、实验课性质:非独立设课二、采用教材:白云,FORTRAN90程序设计,上海:华东理工大学出版社,2003年(该书为理论课教学教材,无相应的实验课教材)。

三、实验课总学时:20学时四、实验项目名称和学时分配五、实验教学的目的和要求本门实验课的目的是通过上机实验,让学生掌握Fortran语言的编程环境,熟悉Fortran 语言的语法规则,能够熟练使用Fortran语言编写小型程序。

六、实验课程考试方式1、实验报告每次实验完成后必须编写实验报告。

实验报告应包括实验内容(表达实验的基本内容)、实验结果(算法设计结果、程序编写结果、给定的输入实验数据、实验测试结果)及实验过程中存在的问题。

2、考核方式实验参加的次数和实验报告的成绩综合评定,方法如下:(1)必须参加实验和编写实验报告才可以参加成绩评定。

(2)共有10个必须的实验,每次占十分之一。

(3)实验课成绩占课程总成绩的30%。

实验一:Fortran基本程序结构及输入/输出实验一、实验课时:2学时二、实验目的、内容及要求1、实验目的(1)了解FORTRAN90软件开发环境。

掌握FORTRAN90上机实验基本操作过程。

掌握FORTRAN90软件开发环境启动方法。

理解有关工作区、项目、文件的基本概念。

掌握工作区、项目、文件创建方法。

熟悉Microsoft Developer Studio软件开发环境图形用户界面。

掌握程序的编辑、编译、构建、运行方法。

了解软件开发环境常用菜单、工具按钮、环境窗口基本功能。

掌握文件、文件夹的移动、复制、删除等操作方法。

(2)了解FORTRAN90字符集。

掌握FORTRAN90实体名称的语法描述规则和具体使用要求。

了解FORTRAN90关键字意义,以及与名称的区别。

掌握FORTRAN90程序组织结构和语句排列次序的基本原则。

FORTRAN课程设计报告

FORTRAN课程设计报告

中南大学本科生课程设计(实践)设计报告(程序设计基础)题目常微分方程数值解学生伟指导教师红雨学院土木建筑学院专业班级土建类0908学生学号1208090814计算机基础教学实验中心2010年07月07日FORTRAN 课程设计报告摘要本题是通过长期的观察统计,得到一个食饵一捕食者系统的数学 模型如下:捕食者(鲨鱼):a=0.5,入 2=0.02, X 2(0)= 2; 绘制食饵和鲨鱼数量随时间的变化情况图。

再由已知的初始条件,通过一阶线性微分方程组得到食饵和鲨鱼 数量随时间变化关系曲线。

这一过程首先要通过四阶龙格库塔法得到 多组鲨鱼和食饵随时间变化的数据,再通过FORTRAN 编译程序,QuickWin 的图形操作得到变化曲线。

关键词:四阶龙格一库塔法、FORTRAN 、QuickWin 图形操作设计思想 (一)总体设想1、 生成数据用四阶龙格库塔法,取不同的时刻对应鲨鱼和食饵数量, 得 到多组数据。

2、 Q uickWin 图形操作画出基本图形界面模仿课本及例题做出一个基本的图形界面,包括界面的大 小、颜色、名称等,以为后面绘图作准备。

dx 1 dtx i (r i1X 2)dX2X 2( dt2X 1),食饵: r i = 1,入 i = 0.1, X i (0)= 25;3、设计主程序连接数据与QuickWin程序,画出相应曲线将得到的多组数据与绘图程序连接起来,并最终绘制鲨鱼、食饵随时间变化曲线。

(二)系统模块结构简介常微分方程的数值解设计主程序连接数据文件和图形界面,绘制曲线系统设计与实现①数据生成模块首先要查阅资料了解四阶龙格库塔法的原理及其数学形式:dydtdxdtf (t, x , y ) y(t。

) y og (t, x, y ),其中X(t°) X oy i 1y i6(f12f2 2f3f4) f1hf(t i,\, y i)则f2hf (t i A,X i1-f1)2 1,同理可得f3hf (t i1h,x21尹2』^2)f4hf (t i h,X i93,y i f3) X i 1, g l, g2, g3, g4首先在FORTRAN POWER STATION中建立一个项目文件,命名为my files,之后新建一个text.f90文件命名为数据,开始编程。

Fortran90数组编程作业范文

Fortran90数组编程作业范文

数组--程序设计作业数组是FORTRAN90最重要的结构数据类型之一。

许多实际问题往往设计大量的数据,数组是存储和处理大批量数据的有效工具,有些问题如果不用数组求解将难以解决。

数组是类型相同且有序的一组数据,涉及到这类数据均可考虑使用数组。

本次实验是学习和掌握数组声明、数组元素引用、数组输入输出、数组赋初值的一次系统实验活动。

通过本次实验,能够设计和编写比较简单的数组应用程序。

一.实验内容11.问题描述已知10个正整数:10、55、25、70、45、15、25、85、45、35,输入一个待删除整数,在10个整数中查找,若有该整数,则将其删除,输出删除前后这组整数。

编写程序实现之。

2.算法设计已知的10个正整数符合数组定义,用一维整型数组num保存,用数组构造器赋初值。

待删除整数n从键盘输入。

算法基本思想:输入待删除整数,从第1个数组元素num(1)开始,依次用n去比较是否相等,若相等查找成功,将该数组元素删除(在该数组元素位置设置删除标志),直到第10个数组元素检查比较完毕。

输出删除前后数组元素。

因10个整数为正数,所以删除标志可用-1表示。

算法:(1)输入待删除整数n;(2)输出删除前10个整数;(3)用n依次在数组元素num(1)、num(2)、…、num(10)中查找,查找成功置删除标志;(4)输出删除后数据。

(5)结束算法第3步可用“计数型”循环结构和DO循环语句实现。

3.程序编写根据算法,设计和编写不完整示例程序如下(请在下划线空白处填充正确内容):程序8-1:!班级:???!姓名:???!时间:???!数据查询PROGRAM problem01INTEGER :: num(10)=( ),nPRINT*,‘请输入100以内的一个正整数:’READ*,nPRINT*,‘删除前数据:’WRITE(*,100) (num(I), )DO I=1,10IF (n==num(I)) num(I)=-1ENDDOPRINT*PRINT*,‘删除后数据:’DO I=IF ( ) WRITE(*,100) num(I)ENDDOPRINT*100 FORMAT((I3,2X\))END4.实验要求●分析问题,理解算法和程序,将程序填写完整。

Fortran课程设计报告_范文

Fortran课程设计报告_范文

中南大学课程设计报告书课程名称:Fortran语言课程设计班级:土木工程2005级06班学号:1201050624姓名:成丕富指导教师:蔡旭晖二○○六年六月目录一、课程设计任务书 (3)二、需求分析 (5)三、概要设计 (5)四、系统实现 (6)五、详细设计 (10)六、源程序代码 (12)七、总结 (28)八、参考文献 (28)《FORTRAN 程序设计课程设计》任务书一、 实践目的通过本课程设计,培养利用程序设计技术进行计算机与专业知识的交叉应用,综合解决实际问题的能力。

通过自己分析问题、寻求算法、编写、调试程序、解决问题的过程,掌握多模块结构的程序设计与调试方法,以及程序模块间的数据传递方法,建立提出问题、分析问题、解决问题的思维方式,促进灵活运用所学知识解决问题能力的提高。

二、 设计任务制作一个信息管理系统,从以下题目中任选其一。

1.上网查询各省会城市2005年生产总值(GDP)、农林牧渔业总产值、工业总产值,将数据。

以统一格式保存在一个纯文本文件tongji.dat 中。

编程实现:(1)从文件tongji.dat 中读取数据,计算全国省会2005年GDP 的平均值,统计GDP 高于平均值的城市数;(2)按第一产业(即农林牧渔业总产值与工业总产值之和)总产值的升序排序,将排序后的数据存入文件fenxi.dat 中。

(3)统计工业总产值在1000亿元以下、1000~2000亿元、2000~3000亿元、3000亿元以上的城市数,并绘制分布饼图和折线图。

(4)计算各城市2005年较2004年相比的GDP 增长幅度,计算并输出自己所在省的省会城市GDP 增长幅度在各省会城市中的排名。

2.已知[]ihk j i k j i k j i k ji k ijeh u u u uu 2)(1,)(1,)(,1)(,1)1(41-+++=-+-++,其中h=0.0021,,,1500,0,,500,0+==+⋅=+⋅=⋅⋅hi i hi i j j eu e u e h j u h j u)5000,5000(0.2)0(,<<<<=j i u j i 其中(1)计算)(,k j i u 及)()(,h j eu hi k j i ⋅+-⋅,k 、i 、j=0,1,2,….,500要求结果精确到小数点后第6位,并将结果输出到文件poisson.dat 中。

Fortran 90上级实验报告

Fortran 90上级实验报告

Fortran 90上级实验报告fortran90上级实验报告实验1上机日期:2021年2月23日1.实验目的:(1)了解Fortran 90与软件开发环境的关系(2)掌握Fortran 90的实际操作过程(3)掌握fortran90软件开发环境启动方法.(4)理解有关工作区,项目,文件创建方法.(6)熟悉软件开发环境图形用户界面.(7)掌握程序输入,编译,运行方法.(8)了解软件开发环境中常用菜单、工具按钮和环境窗口的基本功能。

2.计算机操作过程记录(1)主要记录输入程序的原代码:programmain真实长度、宽度、半径real::unitprice=0.5,totalprice,areaprint*,’请输入图形长宽值:’read*,length,width打印*“请输入绿色半径:“读取*,半径”area=length*width-3.1415926*radius**2totalprice=unitprice*area打印*,'地块总价为:'总价'万元'结束(2)调试过程:d:\\shiyan01\\xm1\\chengxul.f90d:\\shiyan01\\xm1\\chengxul。

f90(6):错误:syntaxerror,foundcharacter_uuuConstant'请输入绿地半径:'whenexpectingoneof:,;打印*\请输入绿色半径:\------^d:\\shiyan01\\xm1\\chengxul.f90(10):error:invalidcharacter_kind_parameter.noun derscoreprint*,'地块总价为:'totalprice'万元'------------------------------------^d:\\shiyan01\\xm1\\chengxul。

fortran实验一

fortran实验一

实验一熟悉FORTRAN90软件开发环境FORTRAN语言是最早出现的第一个计算机高级程序设计语言,它对计算机科学技术的发展产生过重要而深刻的影响。

FORTRAN90是FORTRAN语言的升级换代版本,它吸收和借鉴了现代程序设计语言的许多现代特性,以其强大功能和独特魅力越来越受到人们的欢迎。

任何程序设计语言都有一个与之相关联的软件开发环境。

Digital Visual FORTRAN 5.0是美国数据设备公司(Digital Equipment Corp.)和微软公司(Microsoft Corp.)合作研制、开发、推出的FORTRAN90可视化软件开发环境,它成功地借鉴了Microsoft Developer Studio 可视化软件开发环境,使FORTRAN90软件的输入、编辑、编译、构建、运行和调试等工作,都可在Microsoft Developer Studio可视化软件开发环境上高效、快捷地进行。

学习FORTRAN90及其程序设计,必须首先了解、学习和掌握与之相关联的Microsoft Developer Studio可视化软件开发环境,为深入学习和掌握FORTRAN90及其程序设计奠定坚实基础。

本实验是学习和掌握Microsoft Developer Studio软件开发环境的一次系统实验活动。

一.实验目的1.了解FORTRAN90与软件开发环境的关系。

2.掌握FORTRAN90上机实验基本操作过程。

3.掌握FORTRAN90软件开发环境启动方法。

4.理解有关工作区、项目、文件的基本概念。

5.掌握工作区、项目、文件创建方法。

6.熟悉Microsoft Developer Studio软件开发环境图形用户界面。

7.掌握程序的输入、编辑、编译、构建、运行方法。

8.了解软件开发环境常用菜单、工具按钮、环境窗口基本功能。

9.掌握文件、文件夹的移动、复制、删除等操作方法。

二.实验内容11.问题描述现有长1500米,宽1000米的地块要拍卖建造住宅小区,地块中央有一半径为100米的圆形公共绿地不属于拍卖范围,每平方米地价为5000元。

Fortran90数值计算chap4f9

Fortran90数值计算chap4f9

Sample page from NUMERICAL RECIPES IN FORTRAN 90: THE Art of PARALLEL Scientific Computing (ISBN 0-521-57439-0)Copyright (C) 1986-1996 by Cambridge University Press.Programs Copyright (C) 1986-1996 by Numerical Recipes Software. Permission is granted for internet users to make one paper copy for their own personal use. Further reproduction, or any copying of machine-readable files (including this one) to any server computer, is strictly prohibited. To order Numerical Recipes books or CDROMs, visit website or call 1-800-872-7423 (North America only),or send email to directcustserv@ (outside North America).Chapter B4.Integration of Functions SUBROUTINE trapzd(func,a,b,s,n)USE nrtype;USE nrutil,ONLY:arth IMPLICIT NONE REAL(SP),INTENT(IN)::a,b REAL(SP),INTENT(INOUT)::s INTEGER(I4B),INTENT(IN)::n INTERFACE FUNCTION func(x)USE nrtype REAL(SP),DIMENSION(:),INTENT(IN)::x REAL(SP),DIMENSION(size(x))::func END FUNCTION func END INTERFACE This routine computes the n th stage of refinement of an extended trapezoidal rule.func is input as the name of the function to be integrated between limits a and b,also input.When called with n=1,the routine returns as s the crudest estimate of b a f(x)dx.Subsequent calls with n=2,3,...(in that sequential order)will improve the accuracy of s by adding2n-2additional interior points.s should not be modified between sequential calls.REAL(SP)::del,fsum INTEGER(I4B)::it if(n==1)then s=0.5_sp*(b-a)*sum(func((/a,b/)))else it=2**(n-2)del=(b-a)/it This is the spacing of the points to be added.fsum=sum(func(arth(a+0.5_sp*del,del,it)))s=0.5_sp*(s+del*fsum)This replaces s by its refined value.end if END SUBROUTINE trapzd f90While most of the quadrature routines in this chapter are coded as functions,trapzd is a subroutine because the argument s that returns the function value must also be supplied as an input parameter.We could change the subroutine into a function by declaring s to be a local variable with the SAVE attribute.However,this would prevent us from being able to use the routine recursively to do multidimensional quadrature(see quad3d on p.1065).When s is left as an argument,a fresh copy is created on each recursive call.As a SAVE’d variable,by contrast,its value would get overwritten on each call,and the code would not be properly“re-entrant.”s=0.5_sp*(b-a)*sum(func((/a,b/)))Note how we use the(/.../)con-struct to supply a set of scalar arguments to a vector function.1052Chapter B4.Integration of Functions1053 Sample page from NUMERICAL RECIPES IN FORTRAN 90: THE Art of PARALLEL Scientific Computing (ISBN 0-521-57439-0)Copyright (C) 1986-1996 by Cambridge University Press.Programs Copyright (C) 1986-1996 by Numerical Recipes Software. Permission is granted for internet users to make one paper copy for their own personal use. Further reproduction, or any copying of machine-readable files (including this one) to any server computer, is strictly prohibited. To order Numerical Recipes books or CDROMs, visit website or call 1-800-872-7423 (North America only),or send email to directcustserv@ (outside North America).FUNCTION qtrap(func,a,b)USE nrtype;USE nrutil,ONLY:nrerror USE nr,ONLY:trapzd IMPLICIT NONE REAL(SP),INTENT(IN)::a,b REAL(SP)::qtrap INTERFACE FUNCTION func(x)USE nrtype REAL(SP),DIMENSION(:),INTENT(IN)::x REAL(SP),DIMENSION(size(x))::func END FUNCTION func END INTERFACE INTEGER(I4B),PARAMETER::JMAX=20REAL(SP),PARAMETER::EPS=1.0e-6_sp Returns the integral of the function func from a to b.The parameter EPS should be set to the desired fractional accuracy and JMAX so that2to the power JMAX-1is the maximum allowed number of steps.Integration is performed by the trapezoidal rule.REAL(SP)::olds INTEGER(I4B)::j olds=0.0Initial value of olds is arbitrary.do j=1,JMAX call trapzd(func,a,b,qtrap,j)if(j>5)then Avoid spurious early convergence.if(abs(qtrap-olds)<EPS*abs(olds).or.&(qtrap==0.0.and.olds==0.0))RETURN end if olds=qtrap end do call nrerror(’qtrap:too many steps’)END FUNCTION qtrap FUNCTION qsimp(func,a,b)USE nrtype;USE nrutil,ONLY:nrerror USE nr,ONLY:trapzd IMPLICIT NONE REAL(SP),INTENT(IN)::a,b REAL(SP)::qsimp INTERFACE FUNCTION func(x)USE nrtype REAL(SP),DIMENSION(:),INTENT(IN)::x REAL(SP),DIMENSION(size(x))::func END FUNCTION func END INTERFACE INTEGER(I4B),PARAMETER::JMAX=20REAL(SP),PARAMETER::EPS=1.0e-6_sp Returns the integral of the function func from a to b.The parameter EPS should be set to the desired fractional accuracy and JMAX so that2to the power JMAX-1is the maximum allowed number of steps.Integration is performed by Simpson’s rule.INTEGER(I4B)::j REAL(SP)::os,ost,st ost=0.0os=0.0do j=1,JMAXcall trapzd(func,a,b,st,j)qsimp=(4.0_sp*st-ost)/3.0_sp Compare equation(4.2.4).if(j>5)then Avoid spurious early convergence.if(abs(qsimp-os)<EPS*abs(os).or.&(qsimp==0.0.and.os==0.0))RETURNend ifos=qsimp1054Chapter B4.Integration of Functions Sample page from NUMERICAL RECIPES IN FORTRAN 90: THE Art of PARALLEL Scientific Computing (ISBN 0-521-57439-0)Copyright (C) 1986-1996 by Cambridge University Press.Programs Copyright (C) 1986-1996 by Numerical Recipes Software. Permission is granted for internet users to make one paper copy for their own personal use. Further reproduction, or any copying of machine-readable files (including this one) to any server computer, is strictly prohibited. To order Numerical Recipes books or CDROMs, visit website or call 1-800-872-7423 (North America only),or send email to directcustserv@ (outside North America).ost=st end do call nrerror(’qsimp:too many steps’)END FUNCTION qsimp FUNCTION qromb(func,a,b)USE nrtype;USE nrutil,ONLY:nrerror USE nr,ONLY:polint,trapzd IMPLICIT NONE REAL(SP),INTENT(IN)::a,b REAL(SP)::qromb INTERFACE FUNCTION func(x)USE nrtype REAL(SP),DIMENSION(:),INTENT(IN)::x REAL(SP),DIMENSION(size(x))::func END FUNCTION func END INTERFACE INTEGER(I4B),PARAMETER::JMAX=20,JMAXP=JMAX+1,K=5,KM=K-1REAL(SP),PARAMETER::EPS=1.0e-6_sp Returns the integral of the function func from a to b.Integration is performed by Romberg’s method of order2K,where,e.g.,K=2is Simpson’s rule.Parameters:EPS is the fractional accuracy desired,as determined by the extrapolation er-ror estimate;JMAX limits the total number of steps;K is the number of points used in the extrapolation.REAL(SP),DIMENSION(JMAXP)::h,s These store the successive trapezoidal ap-proximations and their relative stepsizes.REAL(SP)::dqromb INTEGER(I4B)::j h(1)=1.0do j=1,JMAX call trapzd(func,a,b,s(j),j)if(j>=K)then call polint(h(j-KM:j),s(j-KM:j),0.0_sp,qromb,dqromb)if(abs(dqromb)<=EPS*abs(qromb))RETURN end if s(j+1)=s(j)h(j+1)=0.25_sp*h(j)This is a key step:The factor is0.25even though the stepsize is decreased by only0.5.This makes the extrapolation a poly-nomial in h2as allowed by equation(4.2.1),not just a polynomial in h.end do call nrerror(’qromb:too many steps’)END FUNCTION qromb SUBROUTINE midpnt(func,a,b,s,n)USE nrtype;USE nrutil,ONLY:arth IMPLICIT NONE REAL(SP),INTENT(IN)::a,b REAL(SP),INTENT(INOUT)::s INTEGER(I4B),INTENT(IN)::n INTERFACEFUNCTION func(x)USE nrtypeREAL(SP),DIMENSION(:),INTENT(IN)::xREAL(SP),DIMENSION(size(x))::funcEND FUNCTION funcEND INTERFACEThis routine computes the n th stage of refinement of an extended midpoint rule.func is input as the name of the function to be integrated between limits a and b,also input.WhenChapter B4.Integration of Functions1055 Sample page from NUMERICAL RECIPES IN FORTRAN 90: THE Art of PARALLEL Scientific Computing (ISBN 0-521-57439-0)Copyright (C) 1986-1996 by Cambridge University Press.Programs Copyright (C) 1986-1996 by Numerical Recipes Software. Permission is granted for internet users to make one paper copy for their own personal use. Further reproduction, or any copying of machine-readable files (including this one) to any server computer, is strictly prohibited. To order Numerical Recipes books or CDROMs, visit website or call 1-800-872-7423 (North America only),or send email to directcustserv@ (outside North America).called with n=1,the routine returns as s the crudest estimate of b a f(x)dx.Subsequent calls with n=2,3,...(in that sequential order)will improve the accuracy of s by adding(2/3)×3n-1additional interior points.s should not be modified between sequential calls.REAL(SP)::del INTEGER(I4B)::it REAL(SP),DIMENSION(2*3**(n-2))::x if(n==1)then s=(b-a)*sum(func((/0.5_sp*(a+b)/)))else it=3**(n-2)del=(b-a)/(3.0_sp*it)The added points alternate in spacing between del and2*del.x(1:2*it-1:2)=arth(a+0.5_sp*del,3.0_sp*del,it)x(2:2*it:2)=x(1:2*it-1:2)+2.0_sp*del s=s/3.0_sp+del*sum(func(x))The new sum is combined with the old integral to give a refined integral.end if END SUBROUTINE midpnt f90midpnt is a subroutine and not a function for the same reasons as trapzd.This is also true for the other mid...routines below.s=(b-a)*sum(func((/0.5_sp*(a+b)/)))Here we use(/.../)to pass a single scalar argument to a vector function. FUNCTION qromo(func,a,b,choose)USE nrtype;USE nrutil,ONLY:nrerror USE nr,ONLY:polint IMPLICIT NONE REAL(SP),INTENT(IN)::a,b REAL(SP)::qromo INTERFACE FUNCTION func(x)USE nrtype IMPLICIT NONE REAL(SP),DIMENSION(:),INTENT(IN)::x REAL(SP),DIMENSION(size(x))::func END FUNCTION func SUBROUTINE choose(funk,aa,bb,s,n)USE nrtype IMPLICIT NONE REAL(SP),INTENT(IN)::aa,bb REAL(SP),INTENT(INOUT)::s INTEGER(I4B),INTENT(IN)::n INTERFACE FUNCTION funk(x)USE nrtype IMPLICIT NONE REAL(SP),DIMENSION(:),INTENT(IN)::x REAL(SP),DIMENSION(size(x))::funk END FUNCTION funk END INTERFACEEND SUBROUTINE chooseEND INTERFACEINTEGER(I4B),PARAMETER::JMAX=14,JMAXP=JMAX+1,K=5,KM=K-1REAL(SP),PARAMETER::EPS=1.0e-6Romberg integration on an open interval.Returns the integral of the function func from a to b,using any specified integrating subroutine choose and Romberg’s method.Normally choose will be an open formula,not evaluating the function at the endpoints.It is assumed that choose triples the number of steps on each call,and that its error series contains only1056Chapter B4.Integration of Functions Sample page from NUMERICAL RECIPES IN FORTRAN 90: THE Art of PARALLEL Scientific Computing (ISBN 0-521-57439-0)Copyright (C) 1986-1996 by Cambridge University Press.Programs Copyright (C) 1986-1996 by Numerical Recipes Software. Permission is granted for internet users to make one paper copy for their own personal use. Further reproduction, or any copying of machine-readable files (including this one) to any server computer, is strictly prohibited. To order Numerical Recipes books or CDROMs, visit website or call 1-800-872-7423 (North America only),or send email to directcustserv@ (outside North America).even powers of the number of steps.The routines midpnt,midinf,midsql,midsqu,and midexp are possible choices for choose.The parameters have the same meaning as in qromb.REAL(SP),DIMENSION(JMAXP)::h,s REAL(SP)::dqromo INTEGER(I4B)::j h(1)=1.0do j=1,JMAX call choose(func,a,b,s(j),j)if(j>=K)then call polint(h(j-KM:j),s(j-KM:j),0.0_sp,qromo,dqromo)if(abs(dqromo)<=EPS*abs(qromo))RETURN end if s(j+1)=s(j)h(j+1)=h(j)/9.0_sp This is where the assumption of step tripling and an even error series is used.end do call nrerror(’qromo:too many steps’)END FUNCTION qromo SUBROUTINE midinf(funk,aa,bb,s,n)USE nrtype;USE nrutil,ONLY:arth,assert IMPLICIT NONE REAL(SP),INTENT(IN)::aa,bb REAL(SP),INTENT(INOUT)::s INTEGER(I4B),INTENT(IN)::n INTERFACE FUNCTION funk(x)USE nrtype REAL(SP),DIMENSION(:),INTENT(IN)::x REAL(SP),DIMENSION(size(x))::funk END FUNCTION funk END INTERFACE This routine is an exact replacement for midpnt,i.e.,returns as s the n th stage of refinement of the integral of funk from aa to bb,except that the function is evaluated at evenly spaced points in1/x rather than in x.This allows the upper limit bb to be as large and positive as the computer allows,or the lower limit aa to be as large and negative,but not both.aa and bb must have the same sign.REAL(SP)::a,b,del INTEGER(I4B)::it REAL(SP),DIMENSION(2*3**(n-2))::x call assert(aa*bb>0.0,’midinf args’)b=1.0_sp/aa These two statements change the limits of integration ac-cordingly.a=1.0_sp/bb if(n==1)then From this point on,the routine is exactly identical to midpnt.s=(b-a)*sum(func((/0.5_sp*(a+b)/)))else it=3**(n-2)del=(b-a)/(3.0_sp*it)x(1:2*it-1:2)=arth(a+0.5_sp*del,3.0_sp*del,it)x(2:2*it:2)=x(1:2*it-1:2)+2.0_sp*del s=s/3.0_sp+del*sum(func(x))end if CONTAINSFUNCTION func(x)This internal function effects the change of variable.REAL(SP),DIMENSION(:),INTENT(IN)::xREAL(SP),DIMENSION(size(x))::funcfunc=funk(1.0_sp/x)/x**2END FUNCTION funcEND SUBROUTINE midinfChapter B4.Integration of Functions1057 Sample page from NUMERICAL RECIPES IN FORTRAN 90: THE Art of PARALLEL Scientific Computing (ISBN 0-521-57439-0)Copyright (C) 1986-1996 by Cambridge University Press.Programs Copyright (C) 1986-1996 by Numerical Recipes Software. Permission is granted for internet users to make one paper copy for their own personal use. Further reproduction, or any copying of machine-readable files (including this one) to any server computer, is strictly prohibited. To order Numerical Recipes books or CDROMs, visit website or call 1-800-872-7423 (North America only),or send email to directcustserv@ (outside North America).f90FUNCTION func(x)The change of variable could have been effected by a statement function in midinf itself.However,the statement function is a Fortran77feature that is deprecated in Fortran90because it does not allow the benefits of having an explicit interface,i.e.,a complete set of specification statements.Statement functions can always be coded as internal subprograms instead.SUBROUTINE midsql(funk,aa,bb,s,n)USE nrtype;USE nrutil,ONLY:arth IMPLICIT NONE REAL(SP),INTENT(IN)::aa,bb REAL(SP),INTENT(INOUT)::s INTEGER(I4B),INTENT(IN)::n INTERFACE FUNCTION funk(x)USE nrtype REAL(SP),DIMENSION(:),INTENT(IN)::x REAL(SP),DIMENSION(size(x))::funk END FUNCTION funk END INTERFACE This routine is an exact replacement for midpnt,i.e.,returns as s the n th stage of refinement of the integral of funk from aa to bb,except that it allows for an inverse square-root singularity in the integrand at the lower limit aa.REAL(SP)::a,b,del INTEGER(I4B)::it REAL(SP),DIMENSION(2*3**(n-2))::x b=sqrt(bb-aa)These two statements change the limits of integration ac-cordingly.a=0.0if(n==1)then From this point on,the routine is exactly identical to midpnt.s=(b-a)*sum(func((/0.5_sp*(a+b)/)))else it=3**(n-2)del=(b-a)/(3.0_sp*it)x(1:2*it-1:2)=arth(a+0.5_sp*del,3.0_sp*del,it)x(2:2*it:2)=x(1:2*it-1:2)+2.0_sp*del s=s/3.0_sp+del*sum(func(x))end if CONTAINS FUNCTION func(x)This internal function effects the change of variable.REAL(SP),DIMENSION(:),INTENT(IN)::x REAL(SP),DIMENSION(size(x))::func func=2.0_sp*x*funk(aa+x**2)END FUNCTION func END SUBROUTINE midsql SUBROUTINE midsqu(funk,aa,bb,s,n)USE nrtype;USE nrutil,ONLY:arth IMPLICIT NONE REAL(SP),INTENT(IN)::aa,bb REAL(SP),INTENT(INOUT)::s INTEGER(I4B),INTENT(IN)::n INTERFACE FUNCTION funk(x)USE nrtypeREAL(SP),DIMENSION(:),INTENT(IN)::xREAL(SP),DIMENSION(size(x))::funkEND FUNCTION funkEND INTERFACEThis routine is an exact replacement for midpnt,i.e.,returns as s the n th stage of refinement of the integral of funk from aa to bb,except that it allows for an inverse square-root singularity in the integrand at the upper limit bb.REAL(SP)::a,b,del1058Chapter B4.Integration of Functions Sample page from NUMERICAL RECIPES IN FORTRAN 90: THE Art of PARALLEL Scientific Computing (ISBN 0-521-57439-0)Copyright (C) 1986-1996 by Cambridge University Press.Programs Copyright (C) 1986-1996 by Numerical Recipes Software. Permission is granted for internet users to make one paper copy for their own personal use. Further reproduction, or any copying of machine-readable files (including this one) to any server computer, is strictly prohibited. To order Numerical Recipes books or CDROMs, visit website or call 1-800-872-7423 (North America only),or send email to directcustserv@ (outside North America).INTEGER(I4B)::it REAL(SP),DIMENSION(2*3**(n-2))::x b=sqrt(bb-aa)These two statements change the limits of integration ac-cordingly.a=0.0if(n==1)then From this point on,the routine is exactly identical to midpnt.s=(b-a)*sum(func((/0.5_sp*(a+b)/)))else it=3**(n-2)del=(b-a)/(3.0_sp*it)x(1:2*it-1:2)=arth(a+0.5_sp*del,3.0_sp*del,it)x(2:2*it:2)=x(1:2*it-1:2)+2.0_sp*del s=s/3.0_sp+del*sum(func(x))end if CONTAINS FUNCTION func(x)This internal function effects the change of variable.REAL(SP),DIMENSION(:),INTENT(IN)::x REAL(SP),DIMENSION(size(x))::func func=2.0_sp*x*funk(bb-x**2)END FUNCTION func END SUBROUTINE midsqu SUBROUTINE midexp(funk,aa,bb,s,n)USE nrtype;USE nrutil,ONLY:arth IMPLICIT NONE REAL(SP),INTENT(IN)::aa,bb REAL(SP),INTENT(INOUT)::s INTEGER(I4B),INTENT(IN)::n INTERFACE FUNCTION funk(x)USE nrtype REAL(SP),DIMENSION(:),INTENT(IN)::x REAL(SP),DIMENSION(size(x))::funk END FUNCTION funk END INTERFACE This routine is an exact replacement for midpnt,i.e.,returns as s the n th stage of refinement of the integral of funk from aa to bb,except that bb is assumed to be infinite(value passed not actually used).It is assumed that the function funk decreases exponentially rapidly at infinity.REAL(SP)::a,b,del INTEGER(I4B)::it REAL(SP),DIMENSION(2*3**(n-2))::x b=exp(-aa)These two statements change the limits of integration ac-cordingly.a=0.0if(n==1)then From this point on,the routine is exactly identical to midpnt.s=(b-a)*sum(func((/0.5_sp*(a+b)/)))else it=3**(n-2)del=(b-a)/(3.0_sp*it)x(1:2*it-1:2)=arth(a+0.5_sp*del,3.0_sp*del,it)x(2:2*it:2)=x(1:2*it-1:2)+2.0_sp*del s=s/3.0_sp+del*sum(func(x))end if CONTAINS FUNCTION func(x)This internal function effects the change of variable.REAL(SP),DIMENSION(:),INTENT(IN)::xREAL(SP),DIMENSION(size(x))::funcfunc=funk(-log(x))/xEND FUNCTION funcEND SUBROUTINE midexpChapter B4.Integration of Functions1059 Sample page from NUMERICAL RECIPES IN FORTRAN 90: THE Art of PARALLEL Scientific Computing (ISBN 0-521-57439-0)Copyright (C) 1986-1996 by Cambridge University Press.Programs Copyright (C) 1986-1996 by Numerical Recipes Software. Permission is granted for internet users to make one paper copy for their own personal use. Further reproduction, or any copying of machine-readable files (including this one) to any server computer, is strictly prohibited. To order Numerical Recipes books or CDROMs, visit website or call 1-800-872-7423 (North America only),or send email to directcustserv@ (outside North America).SUBROUTINE gauleg(x1,x2,x,w)USE nrtype;USE nrutil,ONLY:arth,assert_eq,nrerror IMPLICIT NONE REAL(SP),INTENT(IN)::x1,x2REAL(SP),DIMENSION(:),INTENT(OUT)::x,w REAL(DP),PARAMETER::EPS=3.0e-14_dp Given the lower and upper limits of integration x1and x2,this routine returns arrays x and w of length N containing the abscissas and weights of the Gauss-Legendre N-point quadrature formula.The parameter EPS is the relative precision.Note that internal computations are done in double precision.INTEGER(I4B)::its,j,m,n INTEGER(I4B),PARAMETER::MAXIT=10REAL(DP)::xl,xm REAL(DP),DIMENSION((size(x)+1)/2)::p1,p2,p3,pp,z,z1LOGICAL(LGT),DIMENSION((size(x)+1)/2)::unfinished n=assert_eq(size(x),size(w),’gauleg’)m=(n+1)/2The roots are symmetric in the interval,so we only have tofind half of them.xm=0.5_dp*(x2+x1)xl=0.5_dp*(x2-x1)z=cos(PI_D*(arth(1,1,m)-0.25_dp)/(n+0.5_dp))Initial approximations to the roots.unfinished=.true.do its=1,MAXIT Newton’s method carried out simultane-ously on the roots.where(unfinished)p1=1.0p2=0.0end where do j=1,n Loop up the recurrence relation to get the Legendre polynomials evaluated at z.where(unfinished)p3=p2p2=p1p1=((2.0_dp*j-1.0_dp)*z*p2-(j-1.0_dp)*p3)/j end where end do p1now contains the desired Legendre polynomials.We next compute pp,the derivatives,by a standard relation involving also p2,the polynomials of one lower order.where(unfinished)pp=n*(z*p1-p2)/(z*z-1.0_dp)z1=z z=z1-p1/pp Newton’s method.unfinished=(abs(z-z1)>EPS)end where if(.not.any(unfinished))exit end do if(its==MAXIT+1)call nrerror(’too many iterations in gauleg’)x(1:m)=xm-xl*z Scale the root to the desired interval,x(n:n-m+1:-1)=xm+xl*z and put in its symmetric counterpart.w(1:m)=2.0_dp*xl/((1.0_dp-z**2)*pp**2)Compute the weight w(n:n-m+1:-1)=w(1:m)and its symmetric counterpart.END SUBROUTINE gauleg f90Often we have an iterative procedure that has to be applied until all components of a vector have satisfied a convergence criterion.Some components of the vector might converge sooner than others,and it isinefficient on a small-scale parallel(SSP)machine to continue iterating on those components.The general structure we use for such an iteration is exemplified by the following lines from gauleg:LOGICAL(LGT),DIMENSION((size(x)+1)/2)::unfinished...unfinished=.true.do its=1,MAXIT1060Chapter B4.Integration of Functions Sample page from NUMERICAL RECIPES IN FORTRAN 90: THE Art of PARALLEL Scientific Computing (ISBN 0-521-57439-0)Copyright (C) 1986-1996 by Cambridge University Press.Programs Copyright (C) 1986-1996 by Numerical Recipes Software. Permission is granted for internet users to make one paper copy for their own personal use. Further reproduction, or any copying of machine-readable files (including this one) to any server computer, is strictly prohibited. To order Numerical Recipes books or CDROMs, visit website or call 1-800-872-7423 (North America only),or send email to directcustserv@ (outside North America).where(unfinished)...unfinished=(abs(z-z1)>EPS)end where if(.not.any(unfinished))exit end do if(its==MAXIT+1)call nrerror(’too many iterations in gauleg’)We use the logical mask unfinished to control which vector components are processed inside the where.The mask gets updated on each iteration by testing whether any further vector components have converged.When all have converged,we exit the iteration loop.Finally,we check the value of its to see whether the maximum allowed number of iterations was exceeded before all components converged.The logical expression controlling the where block(in this case unfinished)gets evaluated completely on entry into the where,and it is then perfectlyfine to modify it inside the block.The modification affects only the next execution of the where.On a strictly serial machine,there is of course some penalty associated with the above scheme:after a vector component converges,its corresponding component in unfinished is redundantly tested on each further iteration,until the slowest-converging component is done.If the number of iterations required does not vary too greatly from component to component,this is a minor,often negligible,penalty.However,one should be on the alert against algorithms whose worst-case convergence could differ from typical convergence by orders of magnitude.For these,one would need to implement a more complicated packing-unpacking scheme.(See discussion in Chapter B6,especially introduction,p.1083,and notes for factrl,p.1087.)SUBROUTINE gaulag(x,w,alf)USE nrtype;USE nrutil,ONLY:arth,assert_eq,nrerror USE nr,ONLY:gammln IMPLICIT NONE REAL(SP),INTENT(IN)::alf REAL(SP),DIMENSION(:),INTENT(OUT)::x,w REAL(DP),PARAMETER::EPS=3.0e-13_dp Given alf,the parameterαof the Laguerre polynomials,this routine returns arrays x and w of length N containing the abscissas and weights of the N-point Gauss-Laguerre quadrature formula.The abscissas are returned in ascending order.The parameter EPS is the relative precision.Note that internal computations are done in double precision.INTEGER(I4B)::its,j,n INTEGER(I4B),PARAMETER::MAXIT=10REAL(SP)::anu REAL(SP),PARAMETER::C1=9.084064e-01_sp,C2=5.214976e-02_sp,&C3=2.579930e-03_sp,C4=3.986126e-03_sp REAL(SP),DIMENSION(size(x))::rhs,r2,r3,theta REAL(DP),DIMENSION(size(x))::p1,p2,p3,pp,z,z1LOGICAL(LGT),DIMENSION(size(x))::unfinished n=assert_eq(size(x),size(w),’gaulag’)anu=4.0_sp*n+2.0_sp*alf+2.0_sp Initial approximations to the roots go into z.rhs=arth(4*n-1,-4,n)*PI/anur3=rhs**(1.0_sp/3.0_sp)r2=r3**2theta=r3*(C1+r2*(C2+r2*(C3+r2*C4)))z=anu*cos(theta)**2unfinished=.true.do its=1,MAXIT Newton’s method carried out simultaneously on where(unfinished)the roots.p1=1.0Chapter B4.Integration of Functions1061 Sample page from NUMERICAL RECIPES IN FORTRAN 90: THE Art of PARALLEL Scientific Computing (ISBN 0-521-57439-0)Copyright (C) 1986-1996 by Cambridge University Press.Programs Copyright (C) 1986-1996 by Numerical Recipes Software. Permission is granted for internet users to make one paper copy for their own personal use. Further reproduction, or any copying of machine-readable files (including this one) to any server computer, is strictly prohibited. To order Numerical Recipes books or CDROMs, visit website or call 1-800-872-7423 (North America only),or send email to directcustserv@ (outside North America).p2=0.0end where do j=1,n Loop up the recurrence relation to get the La-guerre polynomials evaluated at z.where(unfinished)p3=p2p2=p1p1=((2.0_dp*j-1.0_dp+alf-z)*p2-(j-1.0_dp+alf)*p3)/j end where end do p1now contains the desired Laguerre polynomials.We next compute pp,the derivatives,by a standard relation involving also p2,the polynomials of one lower order.where(unfinished)pp=(n*p1-(n+alf)*p2)/z z1=z z=z1-p1/pp Newton’s formula.unfinished=(abs(z-z1)>EPS*z)end where if(.not.any(unfinished))exit end do if(its==MAXIT+1)call nrerror(’too many iterations in gaulag’)x=z Store the root and the weight.w=-exp(gammln(alf+n)-gammln(real(n,sp)))/(pp*n*p2)END SUBROUTINE gaulag The key difficulty in parallelizing this routine starting from the Fortran77version is that the initial guesses for the roots of the Laguerre polynomials were given in terms of previously determined roots.This prevents one fromfinding all the roots simultaneously.The solution is to come up with a new approximation to the roots that is a simple explicit formula,like the formula we used for the Legendre roots in gauleg.We start with the approximation to Lαn(x)given in equation(10.15.8)of[1].We keep only thefirst term and ask when it is zero.This gives the following prescription for the k th root x k of Lαn(x):Solve forθthe equation2θ−sin2θ=4n−4k+34n+2α+2π(B4.1)Since1≤k≤n andα>−1,we can alwaysfind a value such that0<θ<π/2.Then the approximation to the root is x k=(4n+2α+2)cos2θ(B4.2)This typically gives3-digit accuracy,more than enough for the Newton iteration to be able to refine the root.Unfortunately equation(B4.1)is not an explicit formula forθ.(You may recognize it as being of the same form as Kepler’s equation in mechanics.)If we call the right-hand side of(B4.1)y,then we can get an explicit formula by working out the power series for y1/3nearθ=0(using a computeralgebra program).Next invert the series to giveθas a function of y1/3.Finally, economize the series(see§5.11).The result is the concise approximation θ=0.9084064y1/3+5.214976×10−2y+2.579930×10−3y5/3+3.986126×10−3y7/3(B4.3)Once again we need an explicit approximation for the polynomial roots, this time for H n(x).We can use the same approximation scheme as for Lαn(x),sinceH2m(x)∝L−1/2m (x2),H2m+1(x)∝xL1/2m(x2)(B4.4)Sample page from NUMERICAL RECIPES IN FORTRAN 90: THE Art of PARALLEL Scientific Computing (ISBN 0-521-57439-0)Copyright (C) 1986-1996 by Cambridge University Press.Programs Copyright (C) 1986-1996 by Numerical Recipes Software. Permission is granted for internet users to make one paper copy for their own personal use. Further reproduction, or any copying of machine-readable files (including this one) to any server computer, is strictly prohibited. To order Numerical Recipes books or CDROMs, visit website or call 1-800-872-7423 (North America only),or send email to directcustserv@ (outside North America).SUBROUTINE gauher(x,w)USE nrtype;USE nrutil,ONLY:arth,assert_eq,nrerror IMPLICIT NONE REAL(SP),DIMENSION(:),INTENT(OUT)::x,w REAL(DP),PARAMETER::EPS=3.0e-13_dp,PIM4=0.7511255444649425_dp This routine returns arrays x and w of length N containing the abscissas and weights of the N-point Gauss-Hermite quadrature formula.The abscissas are returned in descending order.Note that internal computations are done in double precision.Parameters:EPS is the relative precision,PIM4=1/π1/4.INTEGER(I4B)::its,j,m,n INTEGER(I4B),PARAMETER::MAXIT=10REAL(SP)::anu REAL(SP),PARAMETER::C1=9.084064e-01_sp,C2=5.214976e-02_sp,&C3=2.579930e-03_sp,C4=3.986126e-03_sp REAL(SP),DIMENSION((size(x)+1)/2)::rhs,r2,r3,theta REAL(DP),DIMENSION((size(x)+1)/2)::p1,p2,p3,pp,z,z1LOGICAL(LGT),DIMENSION((size(x)+1)/2)::unfinished n=assert_eq(size(x),size(w),’gauher’)m=(n+1)/2The roots are symmetric about the origin,so we have tofind only half of them.anu=2.0_sp*n+1.0_sp rhs=arth(3,4,m)*PI/anu r3=rhs**(1.0_sp/3.0_sp)r2=r3**2theta=r3*(C1+r2*(C2+r2*(C3+r2*C4)))z=sqrt(anu)*cos(theta)Initial approximations to the roots.unfinished=.true.do its=1,MAXIT Newton’s method carried out simultaneously on the roots.where(unfinished)p1=PIM4p2=0.0end where do j=1,n Loop up the recurrence relation to get the Hermite poly-nomials evaluated at z.where(unfinished)p3=p2p2=p1p1=z*sqrt(2.0_dp/j)*p2-sqrt(real(j-1,dp)/real(j,dp))*p3end where end do p1now contains the desired Hermite polynomials.We next compute pp,the derivatives,by the relation(4.5.21)using p2,the polynomials of one lower order.where(unfinished)pp=sqrt(2.0_dp*n)*p2z1=z z=z1-p1/pp Newton’s formula.unfinished=(abs(z-z1)>EPS)end where if(.not.any(unfinished))exit end do if(its==MAXIT+1)call nrerror(’too many iterations in gauher’)x(1:m)=z Store the root x(n:n-m+1:-1)=-z and its symmetric counterpart.w(1:m)=2.0_dp/pp**2Compute the weight w(n:n-m+1:-1)=w(1:m)and its symmetric counterpart.END SUBROUTINE gauher。

FORTRAN90实验

FORTRAN90实验

2.1 FORTRAN90的编程环境一、实验目的1. 掌握FORTRAN90的集成开发环境——Fortran PowerStation 4.0。

2.熟悉Fortran PowerStation 4.0的安装、启动和退出。

3.熟悉Fortran PowerStation4.0的各工具图标和菜单的作用。

4. 熟练掌握FORTRAN90程序上机实验过程。

二、实验要求1. 掌握进入Fortran PowerStation 4.0集成开发环境的方法。

2. 分别掌握用菜单、快捷键和工具栏图标进行编译和连接的方法。

3. 理解程序设计的概念,掌握FORTRAN90程序结构与书写规范。

4. 熟悉FORTRAN 90程序从输入到运行的全部操作。

5. 按照题目的要求,认真实验上机实验,并对结果进行分析。

三、实验内容1.进入Fortran PowerStation 4.0集成开发环境:开始→程序→Fortran PowerStation 4.0→Microsoft Developer Studio,单击后,进入如图2-1-1所示的FORTRAN90集成开发环境。

2. 熟悉Fortran PowerStation 4.0集成开发环境及菜单的使用: ⑴ 建立项目工作间:选择File →New →Project Workspace ,点击OK ,出现如图2-1-2所示的界面。

在Name 栏目中输入工程名SX ,点击Create ,出现如图2-1-3所示的界面。

图2-1-1 进入Fortran PowerStation 4.0图2-1-2 建立项目工作间的界面⑵ 编辑源程序:①选择菜单Insert →Files into Project ,出现如图2-1-4所示的界面。

②在File Name 栏目里键入源程序文件名EX.F90,点击OK 按钮,出现如图2-1-5所示的界面。

图2-1-3 建立项目名为SX 的工作间界面图2-1-4 插入文件的界面③单击“是”按钮,出现如图2-1-6所示的界面。

实验04 数据的有格式输入输出

实验04 数据的有格式输入输出

PROGRAM MAINIMPLICIT NONECHARACTER :: X1,X2,X3,X4READ *, X1,X2,X3,X4PRINT*,REPEA T('X1',1)PRINT*,REPEA T('X2',2)PRINT*,REPEA T('X3',2)PRINT*,REPEA T('X4',13)END实验四数据有格式输入输出数据是程序处理的主要对象。

一般情况下,在程序中要完成大量的数据输入输出任务,输入输出数据是否简洁、直观、醒目、规范,是评价程序质量的一项重要指标。

如何组织数据的输入输出是程序设计时要认真考虑的一项重要工作。

FORTRAN90提供了强大的数据输入输出功能,其中数据有格式输入输出功能是FORTRAN90最具特色的功能之一。

通过学习和掌握数据有格式输入输出功能,有帮于设计和编写高质量程序。

本实验是学习和掌握数据有格式输入输出功能的一次系统实验活动。

一.实验目的1.了解数据有格式输入输出的主要作用、基本方法和使用规则。

2.掌握数据有格式输入输出语句(READ、PRINT、WRITE)的基本功能和语法规则。

3.掌握格式说明语句(FORMAT)的基本功能和语法规则。

4.掌握I、F、E、A、L、X、/、\等若干常用格式编辑符的格式要求和基本功能。

5.掌握数据有格式输入输出的数据组织和格式说明方法。

6.进一步掌握顺序结构程序设计方法。

7.进一步熟悉软件开发环境。

二.实验内容11.问题描述有三个学生参加两门课程的补考,补考结束后,分别统计每个学生和每门课程的平均成绩,并输出统计结果。

编写程序实现之。

学生人数、课程门数和成绩数据通过键盘输入。

要求输入输出数据以规范、整洁、直观形式给出。

程序中应采用数据有格式输入输出。

学生人数和课程门数为2位整数,学号为长度等于4的字符串,成绩为小数1位域宽5位的单精度实数。

2.问题分析问题对数据输入输出格式提出了严格的要求,程序应按照数据输入输出格式要求实现。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验一
上机日期:2012年2月23日
1.实验目的:
(1)了解FORTRAN90与软件开发环境的关系.
(2)掌握FORTRAN90上机实操作过程.
(3)掌握FORTRAN90软件开发环境启动方法.
(4)理解有关工作区,项目,文件创建方法.
(6)熟悉软件开发环境图形用户界面.
(7)掌握程序输入,编译,运行方法.
(8)了解软件开发环境常用菜单,工具按钮,环境窗口基本功能.
2上机过程记录
(1)主要记录输入程序的原代码:
Program main
Real length,width,radius
Real ::unitprice=0.5,totalprice,area
Print*,’请输入图形长宽值:’
Read*,length,width
Print*”请输入绿地半径:”
Read*,radius
Area=length*width-3.1415926*radius**2
Totalprice=unitprice*area
Print*,’地块总价为:’totalprice’万元’
End
(2)调试过程: D:\shiyan01\xm1\chengxul.f90
D:\shiyan01\xm1\chengxul.f90(6) : Error: Syntax error, found CHARACTER_CONSTANT '请输入绿地半径:' when expecting one of: , <END-OF-STATEMENT> ;
Print*"请输入绿地半径:"
------^
D:\shiyan01\xm1\chengxul.f90(10) : Error: Invalid character_kind_parameter. No underscore Print*,'地块总价为:'totalprice'万元'
------------------------------------^
D:\shiyan01\xm1\chengxul.f90(10) : Error: Syntax error, found IDENTIFIER 'TOTALPRICE' when expecting one of: ( * :: , <END-OF-STATEMENT> ; : ) (/ [ + - . ] /) ** / > // .LT. ...
--------------------^
D:\shiyan01\xm1\chengxul.f90(10) : Error: This Hollerith or character constant is too long and cannot be used in the current numeric context. ['地块总价为:']
Print*,'地块总价为:'totalprice'万元'
-------^
Error executing df.exe.
xm1.exe - 4 error(s), 0 warning(s)
(3)调试成功的程序的原代码
Program main
Real length,width,radius
Real ::unitprice=0.5,totalprice,area
Print*,’请输入图形长宽值:’
Read*,length,width
Print*”请输入绿地半径:”
Read*,radius
Area=length*width-3.1415926*radius**2
Totalprice=unitprice*area
Print*,’地块总价为:’totalprice’万元’
End
3收获:
对FORTRAN90软件有了一个全面清晰的了解,初步熟悉了软件开发环境图形截面,熟悉掌握常用菜单,工具按钮和环境窗口的操作截面.
工作空间,项目和原程序不可使用中文名
输入标点后要转换英文输入状态.
实验二
1.实验目的:
(1)了解FORTRAN90字符集
(2)掌握FORTRAN90实体名称的语法描述规则和具体要求.
(3)了解FORTRAN90关键字意义,以及与名称区别.
(4)掌握FORTRAN90程序组织结构和语句排列次序的基本原则.
(5)掌握FORTRAN90自由书写格式及三个标志符主要作用.
(6)理解数据,数据表是,数据类型概念, 熟悉FORTRAN90数据类型.
2上机过程记录
(1)主要记录输入程序的原代码:
program example
integer(1)::I;J;K
integer S
print*,'请输入三个整数:'
read*,I,J,K
S=I+J+K
print*,'I1+I2+I3=',S
print*'三个整数所有可能的排列次序有:'
print*I,J,K
print*I,K,J
print*J,I,K
print*J,K,I
print*K,I,J
print*K,J,I
end program
(2)调试过程D:\shiyan01\xm1\chengxul.f90
D:\shiyan01\xm1\chengxul.f90(2) : Error: Syntax error, found ';' when expecting one of: ( : % . = =>
integer(1)::I;J;K
---------------^
D:\shiyan01\xm1\chengxul.f90(8) : Error: Syntax error, found CHARACTER_CONSTANT 'sange:' when expecting one of: , <END-OF-STATEMENT> ;
print*'sange:'
------^
D:\shiyan01\xm1\chengxul.f90(9) : Error: Syntax error, found IDENTIFIER 'I' when expecting one of: , <END-OF-STATEMENT> ;
print*I,J,K
------^
D:\shiyan01\xm1\chengxul.f90(10) : Error: Syntax error, found IDENTIFIER 'I' when expecting one of: , <END-OF-STATEMENT> ;
print*I,K,J
------^
D:\shiyan01\xm1\chengxul.f90(11) : Error: Syntax error, found IDENTIFIER 'J' when expecting one of: , <END-OF-STATEMENT> ;
print*J,I,K
------^
D:\shiyan01\xm1\chengxul.f90(12) : Error: Syntax error, found IDENTIFIER 'J' when expecting one of: , <END-OF-STATEMENT> ;
print*J,K,I
------^
D:\shiyan01\xm1\chengxul.f90(13) : Error: Syntax error, found IDENTIFIER 'K' when expecting one of: , <END-OF-STATEMENT> ;
print*K,I,J
------^
D:\shiyan01\xm1\chengxul.f90(14) : Error: Syntax error, found IDENTIFIER 'K' when expecting one of: , <END-OF-STATEMENT> ;
print*K,J,I
------^
D:\shiyan01\xm1\chengxul.f90(3) : Error: A specification statement cannot appear in the executable section.
integer S
^
Error executing df.exe.
xm1.exe - 9 error(s), 0 warning(s)
(3)调试成功的程序的原代码
program example
integer(1)::I;J;K
integer S
print*,'请输入三个整数:'
read*,I,J,K
S=I+J+K
print*,'I1+I2+I3=',S
print*'三个整数所有可能的排列次序有:' print*I,J,K
print*I,K,J
print*J,I,K
print*J,K,I
print*K,I,J
print*K,J,I
end program。

相关文档
最新文档