3. Fortran语言字符集、结构和内部数据类型
3.1 Fortran字符集
- 字符集表示在这个语言中可以使用的所有字符的集合,包括标识符和一些特殊的字符比如英文状态下的[:]、[()]、[!]等等。
- 标识符是用来标识程序中有关实体的(变量、命名常量、函数、过程、程序单元、公用块、哑元等)。
- Fortran中的标识符有四种字符组成,分别是英文字母、数字、下划线"_"、和美元符号"$",并且标识符的第一个字符必须是英文字母,像"_worng"这种的就不可以,标识符不可以超过31个字符。
- 常用的标识符有注释标识符"!"、语句分隔标识符";“和续行标识符”&"(续行标识符的用法是在要续行的结尾加上,或者续行的结尾和第二行的开头都加上)
- 在Fortran中,是不区分大小写的,其实是Fortran只认大写,如果有小写输入,程序会先转成大写。
- 关键字是用于描述语句语法成分或命名哑元名称的特定字符串,Fortran中分为语句关键字和变元关键字。
- 在书写标识符时,强烈建议使用JAVA语言规范,程序名首字母大写(Main);关键字小写(program);变量名、对象名、方法名全部小写,如果多个单词构成,第一个单词后的单词以大写字母开头如getName;常量名称全部大写如PI。
3.2 Fortran的语言结构
- Fortran程序的大类可以分为可执行语句和不可执行语句。不可执行语句主要是指注释。
- 一个完整的程序包括 program开头 、声明部分、执行部分、终止部分、有时需要进行说明,可添加注释,有时为了简化主程序、可以添加子例行程序和子函数或者定义接口和模块。
3.3 Fortran的语言格式
- Fortran分为固定格式和自由格式。
- 固定格式是Fortran90 以前用的语言格式,比如FORTRAN77,这种格式很死板,不做说明,文件后缀为.for。
- 自由格式是Fortran90以后的语言格式,比较符合大众,可以在每一行的任意位置开始书写,之间的空格无任何意义。文件后缀为.f90。
- 固定格式和自由格式之间有很多不同的,比如在固定格式中,注释用’c’,而在自由格式中注释用’!’。
3.4 Fortran的内部数据类型
- Fortran中的数据类型按变化可分为常量类型和变量类型,按存放类型可分为整型、实型(浮点型)、复型、字符型、逻辑型。
- Fortran中的常量和Java中的类似,程序都是会为常量单独开辟一片内存单元,在程序整个的运行过程中都不可以改变。
- 变量是在程序运行过程中可以随时改变的量。
- 内部数据类型KIND值参数以及存储开销
整型 | 子类型 | KIND类型 | 字节数 | 说明 |
---|---|---|---|---|
byte&integer(1) | 1 | 1 | ||
integer(2) | 2 | 2 | ||
integer(4) | 4 | 4 | 缺省情况下 integer = integer(4) | |
integer(8) | 8 | 8 |
- 整型变量或者常量我们一般情况下选择integer,即*4那个,因为那个范围在-2147483648~~2147483647 对咱们大多数程序,完全够用。
- 声明操作:integer(2)=integer(kind =2)=integer*2 完全等价。
- integer(4)比较特殊,就是多了一个省略表达,所以Kind=4的有四种表达。
- integer a,b,c
- integer :: a,b,c
- 上面两种声明变量完全一样,只是第二种加了双冒号的可以声明的同时给变量赋值,第一种不可以。
实型 | 子类型 | KIND类型 | 字节数 | 说明 |
---|---|---|---|---|
real(4) | 4 | 4 | 在缺省情况下real = real(4) ,等同float | |
read(8)& double precision | 8 | 8 | 等同 double |
- 实型和整型的声明类同,不过实型只有4和8
- 实型的常量比如3.1415926默认单精度,即你虽然输入这么多小数,但是依然没有用,编译器会自动截取前七位有效数字,如果想做双精度处理,需要加上3.1415926d0或者3.1415926D0。
复型 | 子类型 | KIND类型 | 字节数 | 说明 |
---|---|---|---|---|
complex(4) | 4 | 8 | 缺省情况下 complex = complex(4) | |
complex(8)&double complex | 8 | 16 |
- 复型和整型的声明类同,不过实型只有4和8,但是复型是按照两个实型来计算内存空间的,所以字节数翻倍。
- 复型的变量表达为value = (12,13) ,表示12.0+13.0i。
字符型 | 子类型 | KIND类型 | 字节数 | 说明 |
---|---|---|---|---|
character*len | 1 | len | len是字符串长度 |
- 字符串的声明 character*30=character(30)=character(len=30),30表示后面声明的字符串要分配的长度,一般声明的长度在10以上,防止字符串过长被截取。举个例子,character*5 a ,就是定义了一个字符串长度为5的变量名称为a的变量,假如 a =adjfnsjnf,可能会报错或者被截取,变成adjfn。
- 有时可能会用到character*(*)这种情况,这是在子程序或者子函数里面才可以定义的,表示字符串长度沿用在主程序里的长度。
逻辑型 | 子类型 | KIND类型 | 字节数 | 说明 |
---|---|---|---|---|
logical(1) | 1 | 1 | ||
logical(2) | 2 | 2 | ||
logical(4) | 4 | 4 | ||
logical(8) | 8 | 8 |
- 逻辑型变量就两种形式,.true.和.false.