fortran90程序设计chapter4.docx

上传人:b****3 文档编号:4411012 上传时间:2022-12-01 格式:DOCX 页数:67 大小:178.18KB
下载 相关 举报
fortran90程序设计chapter4.docx_第1页
第1页 / 共67页
fortran90程序设计chapter4.docx_第2页
第2页 / 共67页
fortran90程序设计chapter4.docx_第3页
第3页 / 共67页
fortran90程序设计chapter4.docx_第4页
第4页 / 共67页
fortran90程序设计chapter4.docx_第5页
第5页 / 共67页
点击查看更多>>
下载资源
资源描述

fortran90程序设计chapter4.docx

《fortran90程序设计chapter4.docx》由会员分享,可在线阅读,更多相关《fortran90程序设计chapter4.docx(67页珍藏版)》请在冰豆网上搜索。

fortran90程序设计chapter4.docx

fortran90程序设计chapter4

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

FORTRAN90预定义五种内部数据类型:

整型(INTEGER)、实型(REAL)、复型(COMPLEX)、字符型(CHARACTER)和逻辑型(LOGICAL),每种类型都具有参数化特性(KIND参数),通过KIND参数可对内部数据类型进行细化,它们是程序中使用最广泛的数据类型。

用户可直接使用内部数据类型说明数据对象(常量、变量、数组等)。

内部数据类型分为两类:

数值型(整型、实型和复型)和非数值型(字符型和逻辑型)。

在程序中需要选择和使用符合精度和范围要求的数据类型。

FORTRAN90内部数据类型具有参数化特性,通过KIND值参数确定数据最佳的存储开销、精度和范围。

表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

1

INTEGER

(2)

2

2

INTEGER(4)

4

4

INTEGER(8)

8

8

仅Alpha系统有效

实型

REAL

4或8

4或8

与缺省有关,REAL有4或8个字节。

初始缺省为4,缺省值可通过编译选项改变

REAL(4)

4

4

DOUBLEPRECISION

8

8

与REAL(8)等同

REAL(8)

8

8

复型

COMPLEX

4或8

8或16

与缺省有关,COMPLEX有8或16个字节。

初始缺省为8,缺省与实型缺省值有关(2倍)

COMPLEX(4)

4

8

DOUBLECOMPLEX

8

16

与COMPLEX(8)等同

COMPLEX(8)

8

16

字符型

CHARACTER

1

1

CHARACTER与CHARACTER

(1)等同。

1是KIND值,不是字符串长度

CHARACTER*len

1

len

len是字符串长度。

对IntelCPU有1≤len≤65535,对AlphaCPU有1≤len≤231-1

逻辑型

LOGICAL

2、4或8

2、4或8

与缺省有关,LOGICAL有2、4或8个字节。

初始缺省为4

LOGICAL

(1)

1

1

LOGICAL

(2)

2

2

LOGICAL(4)

4

4

LOGICAL(8)

8

8

仅Alpha系统有效

4.1常量

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

FORTRAN90有五种内部数据类型常量:

整型常量、实型常量、复型常量、字符型常量和逻辑型常量。

前三种常量称为算术型常量,又称为常数,可进行算术运算,第四种常量称为字符串,可进行相应的字符串处理,第五种常量称为逻辑值,只能进行逻辑运算,FORTRAN90允许逻辑值在特殊情况下参与整型数据运算。

4.1.1整型常量

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

1.语法描述

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

说明:

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

②通过指定基数可表示2至36进位制整数,常用进制有:

2、8、10和16进制,通过指定有关基数和“#”号来指定进位制,缺省为十进制,只有“#”号为16进制。

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

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

④整数0有三种表示:

0、+0和-0。

⑤整数内部不允许出现非数值字符(如“,”、“;”、空格)。

符号后可以有若干空格。

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

⑦整型KIND值确定存储开销、范围和最大位数。

KIND值只对十进制有效,其它进制不使用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.整数基数

FORTRAN90允许在程序中表示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进制整数

3.整数范围

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

缺省KIND值则取默认值4,即4字节(32位)整数。

缺省KIND值可通过编译选项“/integer_size:

n”改变,其中n为KIND值。

表4-2整型KIND值及存储开销、最大位数和取值范围

整型KIND值

字节数

二进制位数

取值范围

1

1

8

有符号整数:

-128~127,无符号整数:

0~255

2

2

16

有符号整数:

-32768~32767,无符号整数:

0~65535

4

4

32

有符号整数:

-2147483648~2147483647

无符号整数:

0~4294967295

8(Alpha系统)

8

64

有符号整数:

-9223372036854775808~9223372036854775807

说明:

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

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

 

对于整数n_k,n为任意整数,k为整型KIND值。

整数n_k的实际结果为:

●若n≥0,则实际结果为:

n-28k0.5+n2-8k。

●若n≤0,则实际结果为:

n+28k0.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不是有效整型KIND值

5,234

不允许出现逗号“,”

3.1415

不允许出现小数点“.”,它是一个合法实数

23-456

不允许出现减号“-”

130_1

超出1字节127范围

32778_2

超出32767范围

8#79

8进制数字不允许出现9

8#5,12

不允许出现逗号“,”

8#245

不允许出现空格

8#245

不允许出现空格

8#4532_2

非10进制不允许出现整型KIND值

#3F7G

16进制不允许出现G

4.1.2实型常量

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

实数有两种表示形式:

小数形式和指数形式。

实数语法描述:

<实数>→<小数形式实数>∣<指数形式实数>

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、-1258.5_4、-.、+189.

解:

合法实数有:

+0.000、235.578、3.14159_4、-.01270、-.0000、+189.。

非法实数如表4-4所示。

表4-4非法实数及原因

非法实数

说明

-125

是一个合法整数,但不是一个合法实数

1,435,345.25

不允许出现逗号“,”

425._5

5不是有效实型KIND值

$125.5

不允许出现字符“$”

-1258.5_4

整数部分不允许出现空格

-.

小数点前后数字不能同时为空

2.指数形式实数

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

指数形式实数常用来表示特大或特小实数,如中国人口为13亿5千2百万,可表示为13.52108,电子质量可表示为0.9110-30千克等。

由于在计算机设备中角标无法表示,故采用字母E(英文指数单词Exponent的第一个字母)表示以10为底的指数,如13.52108在FORTRAN程序中表示为指数形式实数13.52E8或13.52E+8,0.9110-30表示为0.91E-30。

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

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

<指数形式实数>→<数值部分><指数部分>[_<实型KIND值>]

<数值部分>→<十进制整数>∣<小数形式实数>

<十进制整数>→[<符号>]<整数部分>

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

说明:

①指数形式实数可前置+、-号,正实数的+号可取消。

指数形式实数只能采用十进制表示。

②字符E前可以是十进制整数,也可是小数形式实数,字符E后必须是十进制整数,不能是实数。

E前后不能为空。

指数形式实数有四种类型:

n.mEk、n.Ek、.mEk、nEk,其中n、m和k为数字串。

③指数形式实数0有9种表示:

0.0Ek、0.Ek、.0Ek、+0.0Ek、+0.Ek、+.0Ek、-0.0Ek、-0.Ek、-.0k、0Ek、+0Ek、-0Ek。

④数字之间不能出现非数值字符(如“,”、“;”、空格)。

指数部分符号后不能有空格。

⑤前导0和后续0被忽略,它们对实数值的大小没有影响。

⑥实型KIND值确定实数的存储开销、取值范围和最大有效位数。

若指数标识为D或d,则表示该实数为双精度实数,等价于KIND值为8,但不能指定KIND值。

 

[例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、-12E55_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前不允许为空

-12E55_4

数字之间不允许出现空格

+18.9D10_8

D指数不允许指定实型KIND值

3.实数性质

实数有四个性质:

_

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

●实数写成指数形式实数可有多种等价写法,如1.2345E1和0.12345E2为同一实数。

●指数形式实数的指数部分决定小数点的位置,指数部分为正,表示小数点向右移动若干位,指数部分为负,表示小数点向左移动若干位。

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

指数部分决定实数大小。

4.实数标准化形式

从实数的性质可以看出,同一个实数有多种表示形式。

为了统一起见,常常采用通用的标准化形式表示,以提高程序的可读性。

计算机输出实数时采用标准化形式输出。

标准化形式通常有两种:

●数值部分绝对值小于1(即小数点前数字必须为0)且大于等于0.1(即小数点后第一个数字不能为0)。

不符合这个标准化条件,可增大或减少指数值(移动小数点位置)来达到标准化条件。

如实数125.34的标准化实数为0.12534E3。

●数值部分绝对值小于10且大于等于1(即小数点前第一个数字不能为0)。

不符合这个标准化条件,可增大或减少指数值(移动小数点位置)来达到标准化条件。

如实数125.34的标准化实数为1.2534E2。

DigialVisualFORTRAN5.0采用这种标准化形式。

实数在程序中可以不按标准化形式表示,但程序在编译和执行时,自动转化为标准化形式进行存储或输出。

实数均按标准化形式存储,不同编译系统采用标准化形式不同。

4.实数精度和取值范围

FORTRAN90通过KIND值确定实数存储开销(即字节数)、精度和取值范围,如表4-6所示。

缺省KIND值则取默认值4,即4字节(32位)实数。

缺省KIND值可通过编译选项“/real_size:

n”改变,其中n为KIND值。

表4-6实型KIND值及存储开销、精度和取值范围

实型KIND值

字节数

二进制位数

精度

取值范围

4

4

32

7位有效数字

-3.40282347E+38~-1.17549435E-38

0

+1.17549435E-38~+3.40282347E+38

8

8

64

15位有效数字

-1.7976931348623158D+308

~-2.2250738585072013D-308

0

+2.2250738585072013D-308

~+1.7976931348623158D+308

说明:

①对于单精度实数(KIND值=4),若其绝对值>1038,则出现上溢,系统将按数据出错处理,产生“上溢错”运行错误,若其绝对值<10-38,则出现下溢,系统按0处理,不产生运行错误。

②对于双精度实数(KIND值=8),若其绝对值>10308,则出现上溢,系统将按数据出错处理,产生“上溢错”运行错误,若其绝对值<10-308,则出现下溢,系统按0处理,不产生运行错误。

 

4.1.3复型常量

在科学计算领域中常用复数求解实际问题。

复数的代数表示式为:

a+bi,其中:

a称为实部,b称为虚部,a和b为整数或实数,i为√-1。

在FORTRAN90中不采用这种表示,而是采用圆括号将一对整数或实数括起来表示。

例如FORTRAN90用(12,25.45)表示复数12+25.45i。

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

1.语法描述

<复数>→(<实部>,<虚部>)

<实部>→<整数>∣<实数>

<虚部>→<整数>∣<实数>

 

表4-7复数精度转换

实部类型

虚部类型

转换后类型

复数类型

整数

整数

单精度实数(KIND=4)

单精度复数(KIND=4)

整数

单精度实数(KIND=4)

单精度实数(KIND=4)

单精度复数(KIND=4)

整数

双精度实数(KIND=8)

双精度实数(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=8)

双精度实数(KIND=8)

双精度复数(KIND=8)

2.复数范围

复数分单精度复数和双精度复数,复数范围由其实部和虚部的范围决定。

单精度复数存储开销为8字节,实部和虚部各为4字节,其范围为2个单精度实数范围。

双精度复数存储开销为16字节,实部和虚部各为8字节,其范围为2个双精度实数范围。

复数表示与存储结构的关系如图4-1所示。

说明:

①描述中的圆括号不是BNF中的元符号,而是属于表示复数的一个单词符号。

②计算机内用两个实数表示复数。

如果实部和虚部为整数,则将其转换为单精度或双精度实数。

③将复数的实部和虚部按最高精度转换成同一精度的实数,转换方式如表4-7所示。

 

图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,5.4553E-12_8)

解:

判定结果如表4-8所示。

表4-8复数类型及存储开销

复数

复数类型

复数字节数

(12,35)

单精度复数

8

(25,12.5)

单精度复数

8

(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)

双精度复数

16

4.1.4字符型常量

在计算机应用中经常需要处理一些非数值数据,字符及字符串文本是最常用的非数值数据。

FORTRAN90提供字符数据类型的表示和处理功能。

字符型常量是具有字符型数据类型的非数值数据,又称为字符或字符串。

长度为1的字符串简称为字符。

说明:

①字符串首尾引号称为字符串分割符,字符串分割符只能是西文单引号或西文双引号,且配对。

②字符符内空格不能忽略,如字符串'DoublePecision'与'DoublePecision'是不同的两个字符串。

③字符串内字母区分大小写,如'DoublePecision'与'doublepecision'是不同的两个字符串。

④字符串内字符可以是单引号或双引号,若是,则与分隔符发生冲突,这时有两种解决冲突的办法:

●交替使用法,即:

若字符串内出现单引号,则分隔符应为双引号;若字符串内出现双引号,则分隔符应为单引号。

如下面两个字符串为合法字符串:

"I'mastudent."

'Hesaid:

"WearegoingtoSuzhou."'

●重复使用法,即:

若字符串内出现单引号或双引号,则在其后在增加一个单引号或双引号,两个单引号或双引号视为一个单引号或双引号。

例如下面两个字符串为合法字符串:

'I''mastudent.'

"Hesaid:

""WearegoingtoSuzhou."""

字符串是由若干FORTRAN90字符集中字符构成的字符序列,它用单引号“'”或双引号“"”括住表示,单引号或双引号要配对。

1.一般字符串

一般字符串语法描述如下:

<一般字符串>→('∣"){<计算机系统允许使用字符>}('∣")

 

字符串中字符个数(不包括字符串分隔符)称为字符串长度。

长度为0的字符串称为空串。

字符串中一个西文字符分配一个字节(8位)存储空间,一个汉字分配两个字节(16位)存储空间,且按两个西文字符计算长度。

[例4.5]确定下列字符串的长度。

"I'mastudent."----字符串长度为14

'X+Y*Z>100'----字符串长度为9

''----字符串长度为0

''----字符串长度为1

"ABCD''EF"----字符串长度为8

2.H字符串

H字符串称为Hollerith字符串,早期标准FORTRAN字符串,在FORTRAN90中已被废除,但在DigitalVisualFORTRAN5.0中允许使用。

这里对其作简单介绍。

H字符串语法描述如下:

→<长度>H{<计算机系统允许使用字符>}

<长度>→<无符号整数>

说明:

长度必须大于等于1。

H编辑符后为字符串值,其字符个数必须等于长度。

例如合法的H字符串有:

5Hchina、1HA、14HI'mastudent.

例如非法的H字符串有:

0H、8Hchina、1HA、-5HChina

3.C字符串

C字符串语法描述如下:

→('∣"){<计算机系统允许使用字符>}('∣")C

说明:

①一般字符串后跟一个字母C,即为C字符串。

②C字符串与一般字符串有两个区别:

一是在字符串中是否允许出现非打印字符,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1