fortran90程序设计chapter4.doc

上传人:11****ws 文档编号:3020573 上传时间:2019-05-17 格式:DOC 页数:45 大小:529.50KB
下载 相关 举报
fortran90程序设计chapter4.doc_第1页
第1页 / 共45页
fortran90程序设计chapter4.doc_第2页
第2页 / 共45页
fortran90程序设计chapter4.doc_第3页
第3页 / 共45页
fortran90程序设计chapter4.doc_第4页
第4页 / 共45页
fortran90程序设计chapter4.doc_第5页
第5页 / 共45页
点击查看更多>>
资源描述

1、 第四章 内部数据类型与表控输入输出 FORTRAN 90预定义五种内部数据类型:整型(INTEGER)、实型(REAL)、复型(COMPLEX)、字符型(CHARACTER)和逻辑型(LOGICAL),每种类型都具有参数化特性(KIND 参数),通过 KIND参数可对内部数据类型进行细化,它们是程序中使用最广泛的数据类型。用户可直接使用内部数据类型说明数据对象(常量、变量、数组等)。内部数据类型分为两类:数值型(整型、实型和复型)和非数值型(字符型和逻辑型)。在程序中需要选择和使用符合精度和范围要求的数据类型。FORTRAN 90内部数据类型具有参数化特性,通过 KIND值参数确定数据最佳的

2、存储开销、精度和范围。表 4-1给出内部数据类型的不同 KIND值参数及存储开销。表 4-1 内部数据类型 KIND值参数及存储开销类型 子类型 KIND值 字节数 说明BYTE 1 1 与 INTEGER(1)等同INTEGER 2、 4或 8 2、 4或 8 与缺省有关,INTEGER 有 1、2、4 或 8个字节。初始缺省为 4,缺省值可通过编译选项改变INTEGER(1) 1 1INTEGER(2) 2 2INTEGER(4) 4 4整型INTEGER(8) 8 8 仅 Alpha系统有效REAL 4 或 8 4 或 8 与缺省有关, REAL有 4或 8个字节。初始缺省为 4,缺省值

3、可通过编译选项改变REAL(4) 4 4DOUBLE PRECISION 8 8 与 REAL(8)等同实型REAL(8) 8 8COMPLEX 4或 8 8或 16 与缺省有关,COMPLEX 有 8或 16个字节。初始缺省为 8,缺省与实型缺省值有关(2 倍)COMPLEX(4) 4 8DOUBLE COMPLEX 8 16 与 COMPLEX(8)等同复型COMPLEX(8) 8 16CHARACTER 1 1 CHARACTER与 CHARACTER(1)等同。1是 KIND值,不是字符串长度字符型CHARACTER*len 1 lenlen是字符串长度。对 Intel CPU有1le

4、n 65535,对 Alpha CPU有1len2 31-1LOGICAL 2、4 或 8 2、4 或 8 与缺省有关,LOGICAL 有 2、4 或 8个字节。初始缺省为 4LOGICAL(1) 1 1LOGICAL(2) 2 2LOGICAL(4) 4 4逻辑型LOGICAL(8) 8 8 仅 Alpha系统有效第四章 内部数据类型与表控输入输出-70-4.1 常量常量是直接写在程序中且在程序运行期间保持不变的数据,它在程序中直接生成并直接用于计算和处理,如 125、12.5、(12.5,25.5)、 “China”、.TRUE.等。FORTRAN 90有五种内部数据类型常量:整型常量、实

5、型常量、复型常量、字符型常量和逻辑型常量。前三种常量称为算术型常量,又称为常数,可进行算术运算,第四种常量称为字符串,可进行相应的字符串处理,第五种常量称为逻辑值,只能进行逻辑运算,FORTRAN 90允许逻辑值在特殊情况下参与整型数据运算。4.1.1 整型常量整型常量是具有整型数据类型的常量,又称整型常数,简称整数。1语法描述 # _ +-23456789101112131415161718192021222324252627282930313233343536123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ12482整数基数FORTRAN 90允许在程序中表示 2至

6、36进位制整数。对于 R进制,组成整数的数字最大为R-1,用对应字母表示,如十进制整数 3994575可在程序中按下面形式描述(输出结果相同):PRINT*,2#1111001111001111001111 !2 进制整数PRINT*,7#45644664 !7 进制整数PRINT*,+8#17171717 !8 进制整数PRINT*,#3CF3CF !16 进制整数PRINT*,+17#2DE110 !17 进制整数说明:整数可前置+、-号,具有+、-号的整数为有符号整数,否则为无符号整数,无符号整数视为正整数。通过指定基数可表示 2至 36进位制整数,常用进制有:2、8、10 和 16进制

7、,通过指定有关基数和“#”号来指定进位制,缺省为十进制,只有“#”号为 16进制。构成整数的数字至少一个,数字中的字母不区分大小写,且字母 A、 B、Z 分别表示10、11、35。数字最大值与基数有关,最大数字为基数-1,如基数为 17,则最大数字为 16,即 G。整数 0有三种表示:0、+0 和-0。整数内部不允许出现非数值字符(如“,” 、 “;” 、空格)。符号后可以有若干空格。整数前导 0(第一个非 0数值前的 0)对整数值的大小没有影响。整型 KIND值确定存储开销、范围和最大位数。KIND 值只对十进制有效,其它进制不使用 KIND值。41 常量71PRINT*,3994575 !

8、10 进制整数PRINT*,36#2DM8F !36 进制整数3整数范围FORTRAN 90通过 KIND值确定整数的存储开销、最大位数和取值范围,如表 4-2所示。缺省 KIND值则取默认值 4,即 4字节(32 位)整数。缺省 KIND值可通过编译选项“/integer_size: n”改变,其中 n为 KIND值。表 4-2 整型 KIND值及存储开销、最大位数和取值范围整型 KIND值 字节数 二进制位数 取值范围1 1 8 有符号整数:-128127,无符号整数:02552 2 16 有符号整数:-3276832767,无符号整数:0655354 4 32 有符号整数:-214748

9、36482147483647无符号整数:042949672958(Alpha系统) 8 64 有符号整数: -92233720368547758089223372036854775807对于整数 n_k,n为任意整数,k 为整型 KIND值。整数 n_k的实际结果为:若 n0,则实际结果为:n-2 8k0.5+n2-8k。若 n0,则实际结果为:n+2 8k0.5-(n+1)2-8k。符号“”和“”表示对符号之间的表达式值进行取整运算。如整数 1123_1的实际结果为 99,整数-454_1 的实际结果为 58。例 4.1判定下列整数,指出哪些是合法整数?哪些是非法整数?说明原因。+0、358

10、_5、 -128、 +32769、 -524678、 5,234、 3.1415、 23-456、 130_1、32778_2、+ 125、8#537、 8#79、 8#5,12、 8# 245、 8 #245、 8#4532_2、 #4D5E、 16#458A、 #3F7G、解:合法整数有:+0、-128、+32769、-524678、+ 125、8#537、#4D5E、16#458A。非法整数如表 4-3所示。表 4-3 非法整数及原因非法整数 说明358_5 5不是有效整型 KIND值5,234 不允许出现逗号“,”3.1415 不允许出现小数点“.”,它是一个合法实数23-456 不允

11、许出现减号“-”130_1 超出 1字节 127范围32778_2 超出 32767范围8#79 8进制数字不允许出现 98#5,12 不允许出现逗号“,”8# 245 不允许出现空格8 #245 不允许出现空格8#4532_2 非 10进制不允许出现整型 KIND值#3F7G 16进制不允许出现 G4.1.2 实型常量实型常量是具有实型数据类型的数值,又称实型常数,简称实数。说明:超出取值范围的整数,不产生语法和运行错误,而产生错误的整数,如整数 32771_2的实际结果是-32765。在程序中要特别注意整数取值范围。第四章 内部数据类型与表控输入输出-72-实数有两种表示形式:小数形式和指

12、数形式。实数语法描述: 1小数形式实数小数形式实数是人们习惯使用的实数,如:-12.5、25.78、3.1415、0.0 等。小数形式实数语法描述如下:(.) _ 012345678948例 4.2判定下列实数,指出哪些是合法实数?哪些是非法实数?说明原因。+0.000、 -125、 235.578、 1,435,345.25、 3.14159_4、 425._5、 -.01270、 $125.5、 -.0000、 -12 58.5_4、 -.、 + 189.解:合法实数有:+0.000、 235.578、 3.14159_4、 -.01270、 -.0000、 + 189.。非法实数如表 4

13、-4所示。表 4-4 非法实数及原因非法实数 说明-125 是一个合法整数,但不是一个合法实数1,435,345.25 不允许出现逗号“,”425._5 5不是有效实型 KIND值$125.5 不允许出现字符“$”-12 58.5_4 整数部分不允许出现空格-. 小数点前后数字不能同时为空2指数形式实数指数形式实数是科学计算中常用的实数,也称科学记数法实数。指数形式实数常用来表示特大或特小实数,如中国人口为 13亿 5千 2百万,可表示为 13.52108,电子质量可表示为0.9110-30千克等。由于在计算机设备中角标无法表示,故采用字母 E(英文指数单词Exponent的第一个字母)表示以

14、 10为底的指数,如 13.52108在 FORTRAN程序中表示说明:小数形式实数可前置+、-号,正实数的+号可取消。小数形式实数只采用十进制表示。小数点前后可以没有数字,但不能前后都没有数字,如 15.和.15 均为合法实数,只有一个小数点“.”不是一个合法实数。小数形式实数有三种类型:n.m、 n.、.m,其中 n和 m为数字串。小数形式实数 0有 9种表示:0.0、0.、.0、+0.0、+0.、+.0、-0.0、-0.和-.0。整数和小数部分内不允许出现非数值字符(如“,” 、 “;”、空格)。符号和整数部分间可以有空格。整数部分前导 0(第一个非 0数值前的 0)和小数部分后续 0(

15、最后一个非 0数值后的 0)被忽略。实型 KIND值确定实数的存储开销、取值范围和最大有效位数。若 KIND值为 4,则称该实数为单精度实数。若 KIND值为 8,则称该实数为双精度实数。41 常量73为指数形式实数 13.52E8或 13.52E+8,0.9110-30表示为 0.91E-30。指数形式实数由十进制整数或小数形式实数与指数部分组成。指数形式实数语法描述如下: _ (EeDd) 例 4.3判定下列实数,指出哪些是合法实数?哪些是非法实数?说明原因。+0.E-0、 -125E-5_8、 23.578E2.5、 1,435,345.25E+2、 3.14159E-1_3、 .125

16、E5、 - .012E+3、 125.5E$8、 E+5、 -12E5 5_4、 18.5D58、 + 18.9D10_8解:合法实数有:+0.E-0、 -125E-5_8、 .125E5、 - .012E+3、18.5D58。非法实数如表 4-5所示。表 4-5 非法实数及原因非法实数 说明23.578E2.5 指数部分不允许出现小数1,435,345.25E+2 不允许出现逗号“,”3.14159E-1_3 3不是有效实型 KIND值125.5E$8 不允许出现字符“$”E+5 E前不允许为空-12E5 5_4 数字之间不允许出现空格+ 18.9D10_8 D指数不允许指定实型 KIND值

17、3实数性质实数有四个性质:_实数可写成小数形式实数,也可写成指数形式实数。实数写成指数形式实数可有多种等价写法,如 1.2345E1和 0.12345E2为同一实数。指数形式实数的指数部分决定小数点的位置,指数部分为正,表示小数点向右移动若干位,指数部分为负,表示小数点向左移动若干位。指数形式实数数值部分决定有效数字位数(即精度),超出有效数字位数,将产生误差。说明:指数形式实数可前置+、-号,正实数的+号可取消。指数形式实数只能采用十进制表示。字符E 前可以是十进制整数,也可是小数形式实数,字符 E后必须是十进制整数,不能是实数。E前后不能为空。指数形式实数有四种类型:n.mE k、n.Ek

18、、 .m Ek、 nEk,其中 n、m 和 k为数字串。指数形式实数 0有 9种表示:0.0Ek、0.E k、.0 Ek、+0.0 Ek、+0. Ek、+.0Ek、-0.0Ek、-0.Ek、-.0 k、0E k、+0E k、-0Ek。数字之间不能出现非数值字符(如“,” 、 “;” 、空格)。指数部分符号后不能有空格。前导 0和后续 0被忽略,它们对实数值的大小没有影响。实型 KIND值确定实数的存储开销、取值范围和最大有效位数。若指数标识为 D或 d,则表示该实数为双精度实数,等价于 KIND值为 8,但不能指定 KIND值。第四章 内部数据类型与表控输入输出-74-指数部分决定实数大小。4

19、实数标准化形式从实数的性质可以看出,同一个实数有多种表示形式。为了统一起见,常常采用通用的标准化形式表示,以提高程序的可读性。计算机输出实数时采用标准化形式输出。标准化形式通常有两种:数值部分绝对值小于 1(即小数点前数字必须为 0)且大于等于 0.1(即小数点后第一个数字不能为 0)。不符合这个标准化条件,可增大或减少指数值(移动小数点位置)来达到标准化条件。如实数 125.34的标准化实数为 0.12534E3。数值部分绝对值小于 10且大于等于 1(即小数点前第一个数字不能为 0)。不符合这个标准化条件,可增大或减少指数值(移动小数点位置)来达到标准化条件。如实数 125.34的标准化实

20、数为 1.2534E2。Digial Visual FORTRAN 5.0 采用这种标准化形式。实数在程序中可以不按标准化形式表示,但程序在编译和执行时,自动转化为标准化形式进行存储或输出。实数均按标准化形式存储,不同编译系统采用标准化形式不同。4实数精度和取值范围FORTRAN 90通过 KIND值确定实数存储开销(即字节数)、精度和取值范围,如表 4-6所示。缺省 KIND值则取默认值 4,即 4字节(32 位)实数。缺省 KIND值可通过编译选项“/real_size: n”改变,其中 n为 KIND值。表 4-6 实型 KIND值及存储开销、精度和取值范围实型 KIND值 字节数 二进

21、制位数 精度 取值范围4 4 32 7位有效数字-3.40282347E+38 -1.17549435E-380+1.17549435E-38 +3.40282347E+388 8 64 15位有效数字-1.7976931348623158D+308 -2.2250738585072013D-3080+2.2250738585072013D-308 +1.7976931348623158D+3084.1.3 复型常量在科学计算领域中常用复数求解实际问题。复数的代数表示式为:a+bi,其中:a 称为实部,b 称为虚部,a 和 b为整数或实数,i 为-1。在 FORTRAN 90中不采用这种表示,

22、而是采用圆括号将一对整数或实数括起来表示。例如 FORTRAN 90用(12,25.45)表示复数12+25.45i。说明:对于单精度实数(KIND 值=4),若其绝对值10 38,则出现上溢,系统将按数据出错处理,产生“上溢错”运行错误,若其绝对值10 308,则出现上溢,系统将按数据出错处理,产生“上溢错”运行错误,若其绝对值(,)表 4-7 复数精度转换实部类型 虚部类型 转换后类型 复数类型整数 整数 单精度实数(KIND=4) 单精度复数(KIND=4)整数 单精度实数(KIND=4) 单精度实数(KIND=4) 单精度复数(KIND=4)整数 双精度实数(KIND=8) 双精度实数

23、(KIND=8) 双精度复数(KIND=8)单精度实数(KIND=4) 整数 单精度实数(KIND=4) 单精度复数(KIND=4)单精度实数(KIND=4) 单精度实数(KIND=4) 单精度实数(KIND=4) 单精度复数(KIND=4)单精度实数(KIND=4) 双精度实数(KIND=8) 双精度实数(KIND=8) 双精度复数(KIND=8)双精度实数(KIND=8) 整数 双精度实数(KIND=8) 双精度复数(KIND=8)双精度实数(KIND=8) 单精度实数(KIND=4) 双精度实数(KIND=8) 双精度复数(KIND=8)双精度实数(KIND=8) 双精度实数(KIND=

24、8) 双精度实数(KIND=8) 双精度复数(KIND=8)2. 复数范围复数分单精度复数和双精度复数,复数范围由其实部和虚部的范围决定。单精度复数存储开销为 8字节,实部和虚部各为 4字节,其范围为 2个单精度实数范围。双精度复数存储开销为 16字节,实部和虚部各为 8字节,其范围为 2个双精度实数范围。复数表示与存储结构的关系如图 4-1所示。图 4-1 复数表示与存储结构的关系例 4.4判定下列复数的类型和字节数。(12,35)、(25,12.5)、(8#745,125_8)、(325.45_8,854)、(35.78,23.345D2)、(387.885,1.435)、(7745.35

25、,5.4553E-12_8)解:判定结果如表 4-8所示。表 4-8 复数类型及存储开销复数 复数类型 复数字节数(12,35) 单精度复数 8(25,12.5) 单精度复数 8单精度复数(a,b)字节 1 字节 2 字节 3 字节 4 字节 5 字节 6 字节 7 字节 8双精度复数(a,b)字节 1 字节 8 字节 9 字节 16说明:描述中的圆括号不是 BNF中的元符号,而是属于表示复数的一个单词符号。计算机内用两个实数表示复数。如果实部和虚部为整数,则将其转换为单精度或双精度实数。将复数的实部和虚部按最高精度转换成同一精度的实数,转换方式如表 4-7所示。第四章 内部数据类型与表控输入

26、输出-76-(8#745,125_8) 单精度复数 8(325.45_8,854) 双精度复数 16(35.78,23.345D2) 双精度复数 16(387.885,1.435) 单精度复数 8(7745.35,5.4553E-12_8) 双精度复数 164.1.4 字符型常量在计算机应用中经常需要处理一些非数值数据,字符及字符串文本是最常用的非数值数据。FORTRAN 90 提供字符数据类型的表示和处理功能。字符型常量是具有字符型数据类型的非数值数据,又称为字符或字符串。长度为 1的字符串简称为字符。字符串是由若干 FORTRAN 90字符集中字符构成的字符序列,它用单引号“”或双引号“”

27、括住表示 ,单引号或双引号要配对。1. 一般字符串一般字符串语法描述如下:(“)(“ )字符串中字符个数(不包括字符串分隔符)称为字符串长度。长度为 0的字符串称为空串。字符串中一个西文字符分配一个字节(8 位)存储空间,一个汉字分配两个字节(16 位)存储空间,且按两个西文字符计算长度。例 4.5确定下列字符串的长度。“Im a student.“ -字符串长度为 14X+Y*Z100 -字符串长度为 9 -字符串长度为 0 -字符串长度为 1“ABCD EF“ -字符串长度为 82. H字符串H字符串称为 Hollerith字符串,早期标准 FORTRAN字符串,在 FORTRAN 90中

28、已被说明:字符串首尾引号称为字符串分割符,字符串分割符只能是西文单引号或西文双引号,且配对。字符符内空格不能忽略,如字符串Double Pecision与DoublePecision是不同的两个字符串。字符串内字母区分大小写,如Double Pecision与double pecision是不同的两个字符串。字符串内字符可以是单引号或双引号,若是,则与分隔符发生冲突,这时有两种解决冲突的办法:交替使用法,即:若字符串内出现单引号,则分隔符应为双引号;若字符串内出现双引号,则分隔符应为单引号。如下面两个字符串为合法字符串:“Im a student.“He said:“We are going

29、to Suzhou.“ 重复使用法,即:若字符串内出现单引号或双引号,则在其后在增加一个单引号或双引号,两个单引号或双引号视为一个单引号或双引号。例如下面两个字符串为合法字符串:I m a student. “He said:“ “We are going to Suzhou.“ “ “41 常量77废除,但在 Digital Visual FORTRAN 5.0中允许使用。这里对其作简单介绍。H字符串语法描述如下:H例如合法的 H字符串有:5Hchina、1HA、14HIm a student.例如非法的 H字符串有:0H、8Hchina、1H A、-5HChina3. C字符串C字符串语法

30、描述如下:(“)(“)CC字符串扩大了一般字符串功能,即允许在字符串中出现非打印字符(控制符),如回车符、换行符、退格符等。C 字符串中使用特殊字符“”后跟非打印字符的 ASCII码或标志符来表示非打印字符。表 4-9给出 C字符串中非打印字符的表示形式。表 4-9 非打印字符表示形式表示形式 非打印字符 表示形式 非打印字符a Bell t 水平 Tabb 退格 v 垂直 Tabf 进格 n 换行 xhh 16进制编码为 hh的任意 ASCII码字符r 回车 ooo 8进制编码为 ooo的任意 ASCII码字符例 4.6指出下列语句的输出结果。PRINT *,ABCbDEFC !输出结果为:

31、ABDEFPRINT *,ABCfDEFC !输出结果为:ABC DEFPRINT *,ABCrDEFC !输出结果为:DEFPRINT *,ABCDEFC !输出结果为:ABCDEFPRINT *,ABC110DEFC !输出结果为:ABCHDEFC字符串末尾将自动添加 NULL字符(即 ASCII码为 0的字符),C 字符串长度比内容相同的一般字符串长度大 1。例如一般字符串Word的长度为 4,而 C字符串WordC 的长度为 5。4.1.5 逻辑型常量在应用中经常要对一些命题进行判定,以操作方向。逻辑型常量是一种非数值数据。逻辑型常量是具有逻辑型数据类型的非数值数据,又称为逻辑值或布尔

32、值。逻辑值非常简单,只有两个:真和假,FORTRAN 90 中分别用.true.和.false.表示。逻辑值语法描述如下:说明:长度必须大于等于 1。H 编辑符后为字符串值,其字符个数必须等于长度。说明:一般字符串后跟一个字母 C,即为 C字符串。C 字符串与一般字符串有两个区别:一是在字符串中是否允许出现非打印字符,二是在字符串末尾是否添加 NULL字符(即 ASCII码为 0的字符)。第四章 内部数据类型与表控输入输出-78-(.true.false.) _ 1248图 4-2 变量存储表示4.2 变量在应用中常常遇到一些不断变化的数据。FORTRAN 90通过变量手段来表示、存储和处理这

33、些变化的数据。变量是在程序运行过程中可随时改变的数据。在任何时刻,一个变量只能有且必须有一个确定的值。FORTRAN 90在存储器中为每个变量分配若干个连续的存储单元来存放变量的值,变量名代表一组连续存储单元的首地址,通过变量名来访问变量所代表的一组连续存储单元。如 KIND值为 4的整型变量 num的存储表示,如图 4-2所示。变量在使用前需赋予正确的值,否则将产生错误。如下面语句使 total变量取不同的值。total=125.5 !total 变量取 125.5说明:逻辑值两边小数点“.”必须有。逻辑值中字母不区分大小写,如.True.和.true.是同一个逻辑值。逻辑型 KIND值确定逻辑值的存储开销,即占用存储空间多少单元(1 字节、2 字节、4 字节或 8字节)。逻辑型 KIND值与整型 KIND值相同,缺省为 4。对于逻辑值.true.,在其存储单元字节内每位为“1”, 可视为整数值-1,对于逻辑值.false.,在其存储单元字节内每位为“0”,可视为整数值 0,它们均能参与整数运算。如 5+.TRUE.结果为 4。内存单元1152内存地址012100101102103104n-1numKIND=4整型变量(a)执行 num=1152内存单元内存地址012100101102103104n-13345numKIND=4整型变量(b)执行 num=3345

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育教学资料库 > 精品笔记

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。