fortran90程序设计chapter4文档格式.docx
《fortran90程序设计chapter4文档格式.docx》由会员分享,可在线阅读,更多相关《fortran90程序设计chapter4文档格式.docx(67页珍藏版)》请在冰豆网上搜索。
与缺省有关,COMPLEX有8或16个字节。
初始缺省为8,缺省与实型缺省值有关(2倍)
COMPLEX(4)
DOUBLECOMPLEX
16
与COMPLEX(8)等同
COMPLEX(8)
字符型
CHARACTER
CHARACTER与CHARACTER
(1)等同。
1是KIND值,不是字符串长度
CHARACTER*len
len
len是字符串长度。
对IntelCPU有1≤len≤65535,对AlphaCPU有1≤len≤231-1
逻辑型
LOGICAL
2、4或8
与缺省有关,LOGICAL有2、4或8个字节。
初始缺省为4
LOGICAL
(1)
LOGICAL
(2)
LOGICAL(4)
LOGICAL(8)
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
→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值
二进制位数
取值范围
有符号整数:
-128~127,无符号整数:
0~255
-32768~32767,无符号整数:
0~65535
32
-2147483648~2147483647
无符号整数:
0~4294967295
8(Alpha系统)
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
→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。
指数形式实数由十进制整数或小数形式实数与指数部分组成。
指数形式实数语法描述如下:
数值部分>
指数部分>
[_<
十进制整数>
]<
→(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被忽略,它们对实数值的大小没有影响。
若指数标识为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:
表4-6实型KIND值及存储开销、精度和取值范围
实型KIND值
精度
7位有效数字
-3.40282347E+38~-1.17549435E-38
+1.17549435E-38~+3.40282347E+38
15位有效数字
-1.7976931348623158D+308
~-2.2250738585072013D-308
+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=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)
单精度复数
(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.1.4字符型常量
在计算机应用中经常需要处理一些非数值数据,字符及字符串文本是最常用的非数值数据。
FORTRAN90提供字符数据类型的表示和处理功能。
字符型常量是具有字符型数据类型的非数值数据,又称为字符或字符串。
长度为1的字符串简称为字符。
①字符串首尾引号称为字符串分割符,字符串分割符只能是西文单引号或西文双引号,且配对。
②字符符内空格不能忽略,如字符串'
DoublePecision'
与'
DoublePecision'
是不同的两个字符串。
③字符串内字母区分大小写,如'
doublepecision'
④字符串内字符可以是单引号或双引号,若是,则与分隔符发生冲突,这时有两种解决冲突的办法:
●交替使用法,即:
若字符串内出现单引号,则分隔符应为双引号;
若字符串内出现双引号,则分隔符应为单引号。
如下面两个字符串为合法字符串:
"
I'
mastudent."
'
Hesaid:
"
WearegoingtoSuzhou."
'
●重复使用法,即:
若字符串内出现单引号或双引号,则在其后在增加一个单引号或双引号,两个单引号或双引号视为一个单引号或双引号。
例如下面两个字符串为合法字符串:
mastudent.'
字符串是由若干FORTRAN90字符集中字符构成的字符序列,它用单引号“'
”或双引号“"
”括住表示,单引号或双引号要配对。
1.一般字符串
一般字符串语法描述如下:
一般字符串>
→('
∣"
){<
计算机系统允许使用字符>
}('
字符串中字符个数(不包括字符串分隔符)称为字符串长度。
长度为0的字符串称为空串。
字符串中一个西文字符分配一个字节(8位)存储空间,一个汉字分配两个字节(16位)存储空间,且按两个西文字符计算长度。
[例4.5]确定下列字符串的长度。
----字符串长度为14
X+Y*Z>
100'
----字符串长度为9
----字符串长度为0
----字符串长度为1
ABCD'
EF"
----字符串长度为8
2.H字符串
H字符串称为Hollerith字符串,早期标准FORTRAN字符串,在FORTRAN90中已被废除,但在DigitalVisualFORTRAN5.0中允许使用。
这里对其作简单介绍。
H字符串语法描述如下:
H字符串>
长度>
H{<
无符号整数>
长度必须大于等于1。
H编辑符后为字符串值,其字符个数必须等于长度。
例如合法的H字符串有:
5Hchina、1HA、14HI'
mastudent.
例如非法的H字符串有:
0H、8Hchina、1HA、-5HChina
3.C字符串
C字符串语法描述如下:
C字符串>
)C
①一般字符串后跟一个字母C,即为C字符串。
②C字符串与一般字符串有两个区别:
一是在字符串中是否允许出现非打印字符,