fortran90程序设计chapter4

更新时间:2023-12-02 16:35:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第四章 内部数据类型与表控输入输出

FORTRAN 90预定义五种内部数据类型:整型(INTEGER)、实型(REAL)、复型(COMPLEX)、字符型(CHARACTER)和逻辑型(LOGICAL),每种类型都具有参数化特性(KIND参数),通过KIND参数可对内部数据类型进行细化,它们是程序中使用最广泛的数据类型。用户可直接使用内部数据类型说明数据对象(常量、变量、数组等)。

内部数据类型分为两类:数值型(整型、实型和复型)和非数值型(字符型和逻辑型)。 在程序中需要选择和使用符合精度和范围要求的数据类型。FORTRAN 90内部数据类型具有参数化特性,通过KIND值参数确定数据最佳的存储开销、精度和范围。表4-1给出内部数据类型的不同KIND值参数及存储开销。

表4-1 内部数据类型KIND值参数及存储开销

类型 BYTE INTEGER 整型 INTEGER(1) INTEGER(2) INTEGER(4) INTEGER(8) REAL 实型 REAL(4) REAL(8) COMPLEX 复型 COMPLEX(4) DOUBLE COMPLEX COMPLEX(8) CHARACTER 字符型 CHARACTER*len LOGICAL 逻辑型 LOGICAL(1) LOGICAL(2) LOGICAL(4) LOGICAL(8) 子类型 KIND值 1 字节数 1 说明 与INTEGER(1)等同 与缺省有关,INTEGER有1、2、4或8个字节。初始缺省为4,缺省值可通过编译选项改变 仅Alpha系统有效 与缺省有关, REAL有4或8个字节。初始缺省为4,缺省值可通过编译选项改变 与REAL(8)等同 与缺省有关,COMPLEX有8或16个字节。初始缺省为8,缺省与实型缺省值有关(2倍) 与COMPLEX(8)等同 CHARACTER与CHARACTER(1)等同。 1是KIND值,不是字符串长度 len是字符串长度。对Intel CPU有1≤len≤ 65535,对Alpha CPU有1≤len≤231-1 与缺省有关,LOGICAL有2、4或8个字节。初始缺省为4 仅Alpha系统有效 2、 4或 8 2、 4或 8 1 2 4 8 4 或8 4 8 4或8 4 8 8 1 1 1 2 4 8 4 或 8 4 8 8 8或16 8 16 16 1 len DOUBLE PRECISION 8 2、4或8 2、4或8 1 2 4 8 1 2 4 8 第四章 内部数据类型与表控输入输出

4.1 常量

常量是直接写在程序中且在程序运行期间保持不变的数据,它在程序中直接生成并直接用于计算和处理,如125、12.5、(12.5,25.5)、“China”、.TRUE.等。

FORTRAN 90有五种内部数据类型常量:整型常量、实型常量、复型常量、字符型常量和逻辑型常量。前三种常量称为算术型常量,又称为常数,可进行算术运算,第四种常量称为字符串,可进行相应的字符串处理,第五种常量称为逻辑值,只能进行逻辑运算,FORTRAN 90允许逻辑值在特殊情况下参与整型数据运算。

4.1.1 整型常量

整型常量是具有整型数据类型的常量,又称整型常数,简称整数。

1.语法描述

<整数>→[<符号>][[ <基数>]#]<数字>{<数字>}[ _ <整型KIND值>] <符号>→+∣-

<基数>→2∣3∣4∣5∣6∣7∣8∣9∣10∣11∣12∣13∣14∣15∣16∣17∣18∣19∣20

∣21∣22∣23∣24∣25∣26∣27∣28∣29∣30∣31∣32∣33∣34∣35∣36

<数字>→1∣2∣3∣4∣5∣6∣7∣8∣9∣A∣B∣C∣D∣E∣F∣G∣H∣I∣J∣K∣L∣M∣N∣O∣P∣Q∣R∣S∣T∣U∣V∣W∣X∣Y∣Z

<整型KIND值>→1∣2∣4∣8

说明:

-号,具有+、-号的整数为有符号整数,否则为无符号整数,无符号整数视为正整数。 ①整数可前置+、

②通过指定基数可表示2至36进位制整数,常用进制有:2、8、10和16进制,通过指定有关基数和

“#”号来指定进位制,缺省为十进制,只有“#”号为16进制。

B、?、Z分别表示10、11、?、 ③构成整数的数字至少一个,数字中的字母不区分大小写,且字母A、

35。数字最大值与基数有关,最大数字为基数-1,如基数为17,则最大数字为16,即G。

④整数0有三种表示:0、+0和-0。

、“;”、空格)。符号后可以有若干空格。 ⑤整数内部不允许出现非数值字符(如“,”

⑥整数前导0(第一个非0数值前的0)对整数值的大小没有影响。

范围和最大位数。KIND值只对十进制有效,其它进制不使用KIND值。

⑦整型KIND值确定存储开销、

2.整数基数 FORTRAN 90允许在程序中表示2至36进位制整数。对于R进制,组成整数的数字最大为R-1,用对应字母表示,如十进制整数3994575可在程序中按下面形式描述(输出结果相同):

PRINT*,2#1111001111001111001111 !2进制整数 PRINT*,7#45644664 !7进制整数 PRINT*,+8#17171717 !8进制整数 PRINT*,#3CF3CF !16进制整数 PRINT*,+17#2DE110 !17进制整数 PRINT*,3994575 !10进制整数 PRINT*,36#2DM8F !36进制整数

-70-

4.1 常量

3.整数范围 FORTRAN 90通过KIND值确定整数的存储开销、最大位数和取值范围,如表4-2所示。缺省KIND值则取默认值4,即4字节(32位)整数。缺省KIND值可通过编译选项“/integer_size: n”改变,其中n为KIND值。

整型KIND值 1 2 表4-2 整型KIND值及存储开销、最大位数和取值范围 字节数 二进制位数 取值范围 1 2 8 16 32 64 有符号整数:-128~127,无符号整数:0~255 有符号整数:-32768~32767,无符号整数:0~65535 有符号整数:-2147483648~2147483647 有符号整数: -9223372036854775808~4294967295~9223372036854775807 4 4 8(Alpha系统) 8

-32765。在程序中要特别注意整数取值范围。

说明:超出取值范围的整数,不产生语法和运行错误,而产生错误的整数,如整数32771_2的实际结果是

对于整数n_k,n为任意整数,k为整型KIND值。整数n_k的实际结果为: ? 若n≥0,则实际结果为:n-28k??0.5+n?2-8k?。

? 若n≤0,则实际结果为:n+28k??0.5-(n+1)?2-8k?。

符号“?”和“?”表示对符号之间的表达式值进行取整运算。如整数1123_1的实际结果为99,整数-454_1的实际结果为58。

[例4.1]判定下列整数,指出哪些是合法整数?哪些是非法整数?说明原因。

+0、358_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,234 3.1415 23-456 130_1 32778_2 8#79 8#5,12 8# 245 8 #245 8#4532_2 #3F7G

说明 5不是有效整型KIND值 不允许出现逗号“,” 不允许出现小数点“.”,它是一个合法实数 不允许出现减号“-” 超出1字节127范围 超出32767范围 8进制数字不允许出现9 不允许出现逗号“,” 不允许出现空格 不允许出现空格 非10进制不允许出现整型KIND值 16进制不允许出现G 4.1.2 实型常量

实型常量是具有实型数据类型的数值,又称实型常数,简称实数。 实数有两种表示形式:小数形式和指数形式。

实数语法描述: <实数>→<小数形式实数>∣<指数形式实数>

-71-

第四章 内部数据类型与表控输入输出

1.小数形式实数

小数形式实数是人们习惯使用的实数,如:-12.5、25.78、3.1415、0.0等。 小数形式实数语法描述如下:

<小数形式实数>→[<符号>](<整数部分>.[<小数部分>]∣[<整数部分>].<小数部分>)[ _ <实型KIND值>]

<整数部分>→<十进制数字>{<十进制数字>} <小数部分>→<十进制数字>{<十进制数字>} <十进制数字>→0∣1∣2∣3∣4∣5∣6∣7∣8∣9 <实型KIND值>→4∣8 说明:

①小数形式实数可前置+、-号,正实数的+号可取消。小数形式实数只采用十进制表示。

②小数点前后可以没有数字,但不能前后都没有数字,如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(最后一个非0数值后的0)被忽略。 ⑥实型KIND值确定实数的存储开销、取值范围和最大有效位数。若KIND值为4,则称该实数为单 精度实数。若KIND值为8,则称该实数为双精度实数。 [例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-4所示。

表4-4 非法实数及原因

非法实数 -125 1,435,345.25 425._5 $125.5 -12 58.5_4 -.

说明 是一个合法整数,但不是一个合法实数 不允许出现逗号“,” 5不是有效实型KIND值 不允许出现字符“$” 整数部分不允许出现空格 小数点前后数字不能同时为空 2.指数形式实数

指数形式实数是科学计算中常用的实数,也称科学记数法实数。指数形式实数常用来表

8

示特大或特小实数,如中国人口为13亿5千2百万,可表示为13.52?10,电子质量可表示为0.91?10

-30

千克等。由于在计算机设备中角标无法表示,故采用字母E(英文指数单词Exponent

的第一个字母)表示以10为底的指数,如13.52?108在FORTRAN程序中表示为指数形式实数

13.52E8或13.52E+8,0.91?10-30表示为0.91E-30。

指数形式实数由十进制整数或小数形式实数与指数部分组成。

-72-

4.1 常量

指数形式实数语法描述如下:

<指数形式实数>→<数值部分><指数部分> [ _ <实型KIND值>] <数值部分>→<十进制整数>∣<小数形式实数>

<十进制整数>→[<符号>]<整数部分> <指数部分>→(E∣e∣D∣d) <十进制整数>

说明:

①指数形式实数可前置+、-号,正实数的+号可取消。指数形式实数只能采用十进制表示。 ②字符E前可以是十进制整数,也可是小数形式实数,字符E后必须是十进制整数,不能是实数。E 前后不能为空。指数形式实数有四种类型:?n.mE?k、?n.E?k、?.m E?k、?nE?k,其中n、m和k为数字 串。

③指数形式实数0有9种表示:0.0E?k、0.E?k、.0 E?k、+0.0 E?k、+0. E?k、+.0E?k、-0.0E?k、 -0.E?k、-.0 ?k、0E?k、+0E?k、-0E?k。

④数字之间不能出现非数值字符(如“,”、“;”、空格)。指数部分符号后不能有空格。 ⑤前导0和后续0被忽略,它们对实数值的大小没有影响。

⑥实型KIND值确定实数的存储开销、取值范围和最大有效位数。若指数标识为D或d,则表示该实 [例4.3]判定下列实数,指出哪些是合法实数?哪些是非法实数?说明原因。

+0.E-0、 -125E-5_8、 23.578E2.5、 1,435,345.25E+2、 3.14159E-1_3、 .125E5、 - .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 125.5E$8 E+5 -12E5 5_4 + 18.9D10_8

说明 指数部分不允许出现小数 不允许出现逗号“,” 3不是有效实型KIND值 不允许出现字符“$” E前不允许为空 数字之间不允许出现空格 D指数不允许指定实型KIND值 3.实数性质

实数有四个性质:_

? 实数可写成小数形式实数,也可写成指数形式实数。

? 实数写成指数形式实数可有多种等价写法,如1.2345E1和0.12345E2为同一实数。 ? 指数形式实数的指数部分决定小数点的位置,指数部分为正,表示小数点向右移动若干位,指数部分为负,表示小数点向左移动若干位。

? 指数形式实数数值部分决定有效数字位数(即精度),超出有效数字位数,将产生误差。指数部分决定实数大小。

-73-

本文来源:https://www.bwwdw.com/article/lbtt.html

Top