fortran语言教程第3章
- 格式:doc
- 大小:452.00 KB
- 文档页数:28
前言FORTRAN90的新特性1、淘汰了所有转移语句,增加了新的控制结构,使程序结构化。
增加了结构块,模块及过程的调用灵活形式。
2、加强数组的算法功能。
提出超载概念与实现方法。
提高了文字处理功能。
3、更接近自然语言与公式演算。
允许在字符数据用选取不同种别。
特别:语句书写对列的要求放宽:一般一行写一条语句(也可也多个语句,用“;”分隔),没有标号区、续行区、正文区的区别。
一行最多为132列,可以在任何列处中断语句,中断处写一个“&”,随后在下一行任意列处继续。
一个语句最长不能超过2640个字符。
语句结尾不可有标号、符号。
注释以“!”开始,可以位于任何位置。
***以下只讨论与FORTRAN77不相同处。
第一章FORTRAN90的基本语句第一节类型说明语句1、变量名全长不得超过31个字符。
2、变量类型定义:INTEGER::X,YREAL::ACOMPLEX::B,C,D3、建议淘汰隐式说明,在程序说明部分一开始就写:IMPLICIT NONE向系统声明不使用隐式说明。
4、可以在变量说明时就置初值。
如:REAL::X=1.1,Y,Z=2.25、种别——决定变量的精度和所占内存单元数。
a.如:REAL(KIND=2)::X 说明变量X为REAL型,种别为2。
KIND是种别说明关键字。
如没有种别说明,则采用系统省缺值。
b.有关函数:KIND(X) 返回X的种别参数。
当X取常数0时,返回省缺种别参数。
如KI ND(0)、KIND(0.0)、KIND(.FALSE.)、KIND('A')分别返回整型、实型、逻辑型、字符型的省缺种别参数。
SELECTED_REAL_KIND(N,M) 返回种别参数,使之满足十进制有效位为N, 值范围在10**(-M)和10**M之间的实数。
SELECTED_INT_KIND(N,M) 与上类似,选择整型类别。
c.常数类别表示对数值型常数、逻辑型常数用后缀法,即在常数后加一下划线,再跟种别参数。
第3章 顺序结构设计 本章介绍数据输入/输出语句及其他基本语句,简单介绍顺序结构及程序设计的基本步骤,书写简单程序。
3.1 变量的赋值 变量代表计算机内存中的存储单元,它可以接收外部设备输入的数据,也可保留运算器的运算结果,还可以被送到外部设备输出。FORTRAN语言要求变量必须被预先赋值,然后才能被使用,并提供了下面几种为变量赋值的方式,因此,程序中的变量都应该在使用之前用下列方式之一获得数据。 3.1.1 赋值语句 1)赋值语句的格式和功能 语句的格式: 变量 = 表达式 语句的功能:将一个表达式的计算结果值赋给一个变量。 关于赋值语句的说明: (1)赋值语句是执行语句。 (2)赋值语句中的“=”号叫做“赋值号”,它的作用是将其右边的表达式的结果赋给其左边的变量,即将表达式的值放入变量对应的内存单元中,因此,赋值号的意义是带有方向性和动作性的。例如“A=5.5”的作用是将5.5 送到变量A对应的内存单元中。 (3)赋值语句兼有计算和赋值双重功能。即先计算出表达式的值,然后将该结果赋给一个变量。例如 “N=N+1”的作用是用N的当前值加上1后再送入N中,假设N的当前值是5,则执行N=N+1后,N的值为6。 (4)根据赋值语句的功能,由于赋值号的方向性特性,赋值号左边只能是变量,以便提供一个获得数据的空间。因此,“A=B”和“B=A”具有完全不同的意义,前者表示将B中的数据送入A中,后者表示将A中的数据送入B中。语句“X+Y=10”是错误的,因为在内存中找不到名字为X+Y的变量。 2)执行赋值语句时的类型转换问题 执行赋值操作时,被赋值的变量和表达式的类型可以相同,也可以不相同。FORTRAN语言作如下规定: (1)变量与表达式的类型相同,则将表达式的结果直接赋值。 M=4 (变量M和4都是整型) A=3.5*SIN(X) (变量A和表达式3.5*SIN(X)都是实型) (2)如果类型不同,则应先进行表达式的计算,然后将该表达式的值转换为被赋值变量的类型。 I=3.5*3.1 表达式3.5*3.1的计算结果为10.85,而变量I为整型,因此系统会先将10.85转换成整数10,再送入变量I中,最后I的值为10。 具体赋值过程中的类型关系见表3.1。 当赋值号两侧的类型不同时,往往会产生预想不到的结果,如上面的10.85,赋值后的结果却为10。所以,在编写程序时,应该尽可能使赋值号两边的类型保持一致。另外,类型转换还要花费机器时间。 表3.1 赋值语句的类型转换
变量类型 表达式类型 整 型 实 型 整 型 照赋,结果为整型 先取整,再赋值,结果为整型 实 型 先化实。结果为实型 照赋。结果为实型
3.1.2 DATA语句 1)DATA语句的格式和功能 语句的格式: DATA 变量表/初值表/,变量表/初值表/,„ 语句的功能:程序在编译时将“初值表”中的数据依次赋给“变量表”中的各变量单元。在程序执行时,DATA语句就不起作用了。 关于DATA语句的说明: (1)DATA语句是非执行语句,一定要出现在执行语句之前,同一个变量不能在DATA语句中被多次赋初值。 (2)变量表中可以出现所有提供存储空间的量,如变量名、数组名、数组元素名、隐含DO循环。初值表中只允许出现常量,不允许出现任何形式的表达式。变量表中的变量个数与对应初值表中常量的个数必须相同,类型按从左到右的顺序一一对应。变量之间、初值之间都用逗号分隔。 (3)对于多个相同的初值可以采用简化形式书写,例如:DATA X,Y,Z/-1.0,-1.0,-1.0/,可以写成DATA X,Y,Z/3*-1.0/ 形式。3*-1.0表示“三个-1.0”,在这里*号绝不代表乘号,因此不能写成算术表达式的形式3*(-1.0)。 2)DATA语句应用举例 program main DATA I/10/ PRINT *,'1. I=',I I=I+1 PRINT *,'2. I=',I END 程序执行后正确的输出结果应该是: 1.I=10 2.I=11
3.2 数据的输入和输出 FORTRAN语言中也提供了专门实现数据输入、输出的read和write(print) 语句,功能类似VB语言中的inputbox函数和窗体的print方法。 例如,用海伦公式求三角形面积。
))()((CPBPAPPS,其中2CBAP,A,B,C为三角形的三边长,写程序求三角
形面积。 根据问题要求可以画出如图3.1所示的算法流程图。 图3.1 用海伦公式求三角形面积的算法流程图 所谓输入是指从外部设备上将数据送进计算机内存中。向计算机输入数据又叫做“计算机从外部设备读入数据”,计算机向外部设备输出数据又叫做“向外部设备写数据”。在讨论输入输出时,需要确定几个因素: (1)在什么外部设备上输入或输出; (2)用什么格式输入输出; (3)输入输出那些数据。 一般情况下,每一个计算机系统都隐含指定一种输入设备和输出设备,只要程序不作其它声明,系统就认为用户所指的输入输出设备就是隐含指定的设备。在微型机中,隐含的输入设备一般是键盘,隐含的输出设备一般是显示器,并且规定隐含设备用 * 表示。 具体进行输入/输出时的格式可以有三种方式: (1)根据用户规定的格式输入/输出; (2)计算机约定的自由格式输入/输出(又称表控格式); (3)无格式输入/输出,即以二进制形式输入/输出,一般用于数据文件和计算机之间交换数据。 FORTRAN语言用READ语句描述输入数据操作,用WRITE、PRINT语句描述输出数据操作。对输入输出的三个因素及格式都可以通过语句的书写形式来确定。 3.2.1 简单的输入和输出语句 最简单的输入/输出语句即自由格式(又称表控格式)输入/输出语句,在输入/输出语句中用户不必指定数据的格式,计算机会按照约定的格式对数据进行输入/输出。 1)表控输出语句 (1)输出语句的格式: 表控输出语句的格式: PRINT *,输出项表 WRITE(*,*)输出项表 表控输出语句的功能:在系统隐含的输出设备上,按照系统约定的格式输出各个输出项的值。 表控输出语句的说明: ① 表控输出是“表控格式”输出的简称。 ② WRITE语句括号中的第一个“*”表示在系统隐含的输出设备(一般指显示器)上输出;第二个“*”
计算))()((CPBPAPPS 计算2/)(CBAP 输入 A,B,C
输出 S
开始
结束 表示按照表控格式输出。 ③ PRINT语句只能在系统隐含输出设备上输出,“*”表示按照表控格式输出。 ④ “输出项表”是用“,”分隔的将要输出的多个输出项,输出项形式可以是常量、变量、函数、表达式,他们最终输出的都将是一个数据。 ⑤ 用表控格式输出数据时,计算机自动地分别为每一种不同类型的数据规定所占的列数和表数形式(例如实数是用小数形式输出还是用指数形式输出,小数点位置在何处等),用户完全不用安排输出数据的格式。 例如在输出时,如果一个实数的整数部分的位数多于机器系统规定的有效位数,或实数的数值小于1,则在输出时会自动转换成规范化的指数形式输出。 但要注意的是,不同的计算机系统对表控格式输出的规定不同,例如对一个整型数,有的系统规定输出占13列,有的系统规定输出占10列,也有的系统不规定固定的列数而按照数据的实际长度输出,再用一个空格作分隔符。要想知道所使用系统到底是怎样规定表控格式的,读者可以自己上机试一下。 (2)输出语句示例 I=45 J=128 PRINT *,‘I,J=',I,J A=13.567 B=-186.75 PRINT *,‘A,B=',A,B C=162E25 D=-11.72E-13 PRINT *,‘C,D=',C,D E=123E6 F=0.132 PRINT *,‘E,F=',E,F PRINT *,‘ ’ PRINT *,‘I,J,A,B,C,D,E,F=',I,J,A,B,C,D,E,F END 读者可以运行该示例程序,体会一下输出语句的作用。 2)表控输入语句 (1)表控输入语句的格式和功能 表控输入语句的格式: READ *,变量表 READ(*,*)变量表 表控输入语句的功能:执行该语句时,计算机将等待用户从键盘上输入数据,然后再将这些数据依次赋给各个变量。 表控输入语句的说明: ① 对带括号的READ语句,括号中的第一个“*”表示在系统隐含输入设备(一般指键盘)上读数,括号中的第二个“*”号表示按照机器系统约定的“表控格式”读入数据;对不带括号的READ语句,“*”表示按“表控格式”读入数据。 ② “变量表”是用逗号分隔的将要获得数据的多个变量。 ③ 该语句是执行语句,表控输入又称自由格式输入,用户不必指定输入数据的格式,只需将数据按其合法形式依次输入即可,数据间用逗号或空格间隔。 例如有输入语句 READ *,I,J,A,B,要求从键盘上读入两个整型数赋给I和J,两个实型数赋给A和B,可以从键盘输入以下形式的数据: 10,20,80.5,62.35 (数据间用逗号分隔) 或者:10□□20□80.5□□□62.35(数据间用一个或多个空格间隔) 执行语句时,机器将从键盘读入4个数,分别赋给变量I,J,A,B。 (2)使用表控输入语句应注意的问题 ① 从键盘输入的数据个数必须≥变量表中的变量个数,即保证变量表中的每个变量都能获得数据;如果输入的数据不够,计算机将等待用户继续输入,直到全部变量获得数据为止。对上述例子来讲,下面的输入方式都可以: 方法一:10,20,80.5,62.35 (一个行内输入4个数据) 方法二:10,20 (第一行输入2个数) 80.5,62.35 (第二行输入2个数) 方法三:10 (第一行输入1个数) 20,80.5,62.35 (第二行输入3个数) 方法四:10,20,80.5 (第一行输入3个数) 62.35 (第二行输入1个数) 方法五:10 (分4行输入4个数) 20 80.5 62.35 从上述输入方式可以看出,数据分几行输入都可以,但一定要保持数据输入的顺序不变。 ② 输入数据的类型要与变量表中的变量类型一致,以保证变量获得数据的正确性。 ③ 如果输入的数据个数多于变量个数,则多余的数据无用。 ④ 每执行一个READ语句都是从一个新的输入行开始读数。例如将上述语句改成两句: READ *,I,J READ *,A,B 则输入数据时必须保证整型数和实型数不在同一行(因为获得A的数据时已经是执行一个新的READ语句了),下面的输入方式都可以。 方法一: 10,20 (第一个READ语句需要的数) 80.5,62.35 (第二个READ语句需要的数) 方法二: 10 20 (第一个READ语句需要的数) 80.5,62.35 (第二个READ语句需要的数) 方法三: 10,20 (第一个READ语句需要的数) 80.5 62.35 (第二个READ语句需要的数) 方法四: 10 20 (第一个READ语句需要的数) 80.5 62.35 (第二个READ语句需要的数) ④ 如果在输入数据行中出现“/”号,表示对READ语句的输入到此结束,未被赋值的变量将不予赋值。 例如有如下程序段: DATA I,J,K/10,20,30/ PRINT *,I,J,K READ *,I,J,K PRINT *,I,J,K