Fortran入门教程(二)——数据类型_fortran character_Sumbrella_的博客-程序员宅基地

技术标签: fortran  Fortran  

数据类型

数据类型是指在计算机中能够记录文本、数值等的数据单位。算法处理的对象是数据,而数据是以某种特定的形式(如整数、实数、字符等形式)存在的。不同的数据之间往往还存在某些联系,例如由若干个整数组成一个整数数组。

1. 变量声明

  1. 隐式声明(不再使用)
    隐式声明是传统 Fortran 语言预先定义且无须通过类型声明语句对变量类型进行定义,习惯称为I-N规则。Fortran 规定,凡以字母I、J、K、L、M、N(无论大写还是 小写)6个字母开头的变量名,如无另外说明则为整型变量。以其他字母开头的变量被默认为实型变量,如I、J、IMAX、NUMBER、LINE、JOB、Kl等为整型变量,而 A、Bl、COUNT、AMOUNT、TOTAL、BOOK等为实型变量。

注意:隐式声明具有一定的副作用,在 Fortran 95 之后已不多用,因为隐式说 明与类型说明语句一同使用时,变量类型不清晰,可以通过在程序变量说明之前加 入:IMPLICIT NONE语句来取消I-N规则.

  1. 显式声明
    显式声明是在可执行语句前通过类型声明语句对变量类型进行定义。
    Fortran 中有6个说明语句:
    • INTEGER语句(整型说明语句)
    • REAL语句(实型说明语句)
    • DOUBLE PRECISION语句(双精度说明语句)
    • COMPLEX语句(复型说明语句)
    • LOGICAL语句(逻辑型说明语句)
    • CHARACTER语句(字符型说明语句)

1.1 变量命名的规则

和其他的高级语言一样, 对于使用者申请的变量空间,需要一个标识符来标定变量的名称,以便后续调用, 在 fortran 中 声明变量有如下规则

  1. 变量名只能由字母、下划线和数字组成,且第一个字符必须是字母。比如sum、 student1、student2、student_num等都是合法的标识符。这一点与其他语言中 可以用下划线开头不同。类似_store这样的变量名在FORTRAN中是不合法的标识符
  2. 变量命中不能含有空格字符,如my school这样是不可以的。
  3. 编译系统将大小写字母认为是两个相同的字符,长度限定为31个字符。

命名变量时尽量贴近变量的使用原意,比如学生成绩用 student_scorestudentScore命名,而不是 ass

2. Fortran中的数据类型

2.1 整型 (Integer)

整型常量也称为整型常数或整数。按照所需存储空间的大小,又分为长整型和短整 型两种。长整型占用4字节(byte)的存储空间,其保存的数据大小为-2147483648 ~ +2147483647。短整型则占用2字节的存储空间,保存的数据大小为-32768 ~ +32767
在赋值时也可以手动给定所占用的字节数,如

integer(kind=2) :: a
integer*4       :: b (老式)
integer(8)      :: c

其中,符号∷在声明中可有可无。若有,则可赋初值,否则不可赋初值,赋初值则出错。

下面的程序示例展示了不同的整数类型声明及获取最大值

!> program 2-1
program integer_test

    implicit none

    integer(kind=2)  :: shortint
    integer(kind=4)  :: longint
    integer(kind=8)  :: verylongint
    integer(kind=16) :: veryverylongint

    integer :: defval

    write(*, *) "short: ", shortval
    write(*, *) "long: ", longint
    write(*, *) "verylong: ", verylongint
    write(*, *) "veryverylongval: ", veryverylongint
    write(*, *) "defval", defval

end program integer_test

2.2 实型 (REAL)

实型常量也称为实数,也就是日常使用的小数。按照所需存储空间的大小,实数分为单精度和双精度两种。在实数的表达方式上,可以分为小数形式和指数形式两种。

  1. 实数的精度
    单精度实数在计算机中占用4字节的存储空间,有效位数是6~7位,可记录的最大数 据是±3.4×1038,最小数是±1.18×10-38。双精度实数在计算机中占用8字节的存 储空间,有效位数是15~16位,可记录的最大数据是±1.79×10308,最小数是 ±2.23×10-308。
    当一个数值用单精度无法进行存储时,可以使用双精度进行存储。
  2. 实数的表达形式
    实型常量有两种表达形式:小数形式和指数形式。
    小数的表达形式主要分为3种:
    1. x.yx..y。数字前面可以加上“+”号“−”号, 默认为正号。小数点“.”前或后可以不出现数字,但不允许小数点前后都不出现数字,且小数点不可以少。如+3.5、7.、.3等都是合法的小数形式。
    2. 用指数形式表示的实数由两部分组成,即数字部分和指数部分。E将数字部分和指数 部分分隔,E的右边是指数部分,E的左边是数字部分,表示方式是用E表示以10为底 的指数。如5.35E9表示5.35×1092.66E-3表示2.66×10-3
!> program 2-2
program real_demo
    implicit none
    real :: a = 1, b = 2
    integer :: c = 1, d = 2

    write(*, *) a / b
    write(*, *) c / d
end program

输出:

0.500000000
         0

2.3 复型 (COMPLEX)

在FORTRAN中,一个复数用一对圆括号括起来的两个实数 表示,其中第一个实数表示复数的实部,第二个实数表示复数的虚部,实部与虚部 之间用逗号分隔。如:(2.0,4.0)表示复数2.0+4.0i(5.3,−7.2)表示复数 5.3−7.2i

!> program 2-3
program complex_demo
    implicit none
    complex :: a = (2., 4.)
    complex :: b = (3., 5.)
    write(*, *) a * b
end program
            (-14.0000000,22.0000000)

2.4 字符型 (CHARACTER)

用一对单引号(撇号)或双引号括起来的若干个非空字符串为字
符型常量,又称为字符或字符串,长度为1的字符串简称为字符, 如:‘x’、‘Y’、‘x+y’、‘@$%’等都是字符型常量。
字符型赋值可以用双引或是单引号将字符串包裹。
字符型变量在声明时,由于一串字符是有长度的,计算机需要知道用户需要声明多长的字符串,因此在声明时候需要告知计算机字符串长度, 默认为1,如:

character char = "a"
character(len=3) string = "abc"

write(*, *) a       !> a
write(*, *) string  !> abc

如果赋值时超出字符串给定的长度,编译器会将超出长度的部分截取,如:

character(len=2) string = "abc"
write(*, *) string  !> ab

也可以使用 * 作为长度,来表示默认长度,此时字符变量必须被赋初值,编译器将会字符变量长度赋值为初值字符串的长度,如:

character(len=*), parameter :: string = "abc"
write(*, *) string       !> abc
write(*, *) len(string)  !> 3

此时,字符串变量只能是常量(parameter)或是函数/例程参数。
另外如果在字符串中出现单引号或者是双引号时,按如下方式输入。

用双引号"“封装的字符串可以任意使用单引号’,双引号需采用两个(”")。比如程序中:
"i'm good", "say ""hello"" to me"
分别表示字符串:
i'm good, say "hello" to me
用单引号’‘封装的字符串的可以任意使用双引号", 单引号需要使用两个(’’)。比如程序中:
'i''m good', 'say "hello" to me'
分别表示字符串:
i'm good, say "hello" to me

2.5 逻辑型 (LOGICAL)

逻辑类型的值仅仅表示真假, 用 .true..false. 来赋值。

logical bool_variable = .true.
write(*, *) bool_variable  !> T

3. 常量

常量是在程序运行过程中不变的量, Fortran 有多种声明常量的办法,可以在变量类型后面增加 parameter, 来说明该变量是一个常量

real, parameter :: pi = 3.1415926

也可以直接使用 parameter 来声明常量

parameter(pi = 3.1415926)

4. 等价声明

等价声明(equivalence)可以使两个变量公用同一个内存空间,方便对其中某一个进行操作,简化代码量。

equivalence(a, b)

5. ios_fortran_env

在不同的机器上申请相同kind值的变量可能实际上获取的内存空间不同,如果申请得到的内存太少,不足以满足原始精度需求,有可能会给程序造成影响。
fortran自带的ios_fortran_env库会自动获取当前机器上特定变量类型所需的kind值,如

program ios_test
    use ios_fortran_env, only: int8, int16
    integer(kind=int8)  :: a
    integer(kind=1nt16) :: b
end program
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Sumbrella_/article/details/121860790

智能推荐

优化算法之遗传算法(Genetic Algorithm, GA)_优化模型适应度值是负的_小韭菜~的博客-程序员宅基地

目录概述相关术语遗传算法的实现过程遗传算法的一般步骤代码描述解码相关问题适应度函数选择函数小问题:交叉、变异传送门代码相关概述遗传算法(Genetic Algorithm, GA) 起源于对生物系统所进行的计算机模拟研究。它是模仿自然界生物进化机制发展起来的 随机全局搜索和优化方法,借鉴了达尔文的进化论和孟德尔的遗传学说。其本质是一种高效、并行、全局搜索的方法,能在搜索过程中自动获取和积累有关搜索空间的知识,并自适应地控制搜索过程以求得最佳解。相关术语基因型(genotype):性状染色体的内部_优化模型适应度值是负的

static关键字(静态修饰符)_子木_Lee的博客-程序员宅基地

static的特点1、static是一个修饰符,用于修饰成员2、static修饰的成员被所有的对象所共享3、static优先于对象存在,因为static的成员随着类的加载就已经存在了4、static修饰的成员多了一种调用方式,即可以直接被类名调用。类名.静态变量5、static修饰的数据是共享数据,对象中的存储的是特有数据6、如下示例代码class Person{..._静态修饰符

Dynamsoft Web Twain SDK集成_weixin_34283445的博客-程序员宅基地

2019独角兽企业重金招聘Python工程师标准>>> ..._dynamsoftservicesetup 下载

平滑过渡的战争迷雾(二) 实现:真正的迷雾来了_初衷121的博客-程序员宅基地

转载自:http://blog.csdn.net/u011371356/article/details/9712321这两天不少朋友留言提出了一些问题,但是由于雾央家里网络出了点问题,所以这两天都上不了网,没有及时回答大家,关注了雾央微博的朋友就知道这件事,抱歉了。 另外,欢迎转载文章,雾央会把它当成对自己的认可~(@^_^@)~,但是请不要删除第一段话或者注明一下原

谈谈你对Spring IoC理解【面试】_面试题对spring ioc的理解_-夏夜凉月-的博客-程序员宅基地

前言面试中经常被问到,谈谈你对Spring IoC的理解,初学者可能很难解释清楚,相信看完本篇,将有助于同学们加深理解spring,并且再也不怕面试被问到这个问题了。1、什么是IoCIoC即Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想。简单理解:传统开发中,我们在对象内部通过new关键字,创建依赖的对象,我们主动控制依赖的对象;而IoC有专门一..._面试题对spring ioc的理解

ue4sky时间_Simul trueSKY – 实时渲染真实的天空_侯巧玲 15309656737的博客-程序员宅基地

原标题:Simul trueSKY – 实时渲染真实的天空 trueSKY是一款软件开发工具包,可以在各种平台上实时渲染真实的天空,云彩和大气效果。TrueSKY是多年研发的结果。它基于光散射和吸收的物理原理,并对速度进行了高度优化。我们相信这是表现真实的实时天空和云彩最好的系统。 SDK是在主“Simul”目录下的一组库。这些可以静态或动态链接,具体取决于平台。 在静态库中,二进制文件在“Sim..._ue4 银河系

随便推点

2020考研,老学长帮你规划_斩刀铭魂的博客-程序员宅基地

高能干货预警,文章目前已经近三万字,这可能是最负责的一篇文章了。文章很长,建议拿好笔记慢慢看。本文会解决你在考研各科在不同时期不同阶段遇到的所有问题,方法具体到草稿纸怎么使用,课本具体怎么使用,相信我,读完你一定会有巨大收获。我总结了我一年以来遇到的所有问题,使用的所有方法。既然最终目的是在考研这场「考试」中获得高分,那么所有的时间和精力,都应该围绕着「考试」进行,才是效率最高的方式。但是...

Git Cherry-pick/Git Merge/Git Rebase_rebase child_凯特王子的博客-程序员宅基地

Git笔记(三)——[cherry-pick, merge, rebase]8月 10日 2014书接上回,直入主题!这篇继续实践剩下的几个命令。现在的SourceTree状态如下:cherry-pick - 妈妈,我也要cherry-pick其实在工作中还挺常用的,一种常见的场景就是,比如我在A分支做了几次commit以后,发现其实我并不应该在A分支上工作,应该在B分支上_rebase child

U-BOOT环境变量的获取和保存的实现分析_uboot mw写的值怎么保存_BoArmy的博客-程序员宅基地

本文主要以U-boot(1.1.6)为例进行说明。1.相关文件common/env_common.c供u-boot调用的通用函数接口,它们隐藏了env的不同实现方式,比如dataflash, epprom, flash等common/env_dataflash.cenv 存储在dataflash中的实现common/env_epprom.cenv 存储在eppr_uboot mw写的值怎么保存

java64位去哪下载_我的是64位的,找到老师提供的下载jdk地址 不知道该下载哪一个...-程序员宅基地

是win7的,Java SE Development Kit 8u71You must accept theOracle Binary Code License Agreement for Java SEto download this software.Thank you for accepting the Oracle Binary Code License Agreement for J...

ASP.NET Web Developer Checklist_cattei的博客-程序员宅基地

The following is a simple checklist you can use when building web applications. Much of this still applies to other technologies and can easily be extended. I try not to get too spe

时域和频域的关系及matlab演示_地震波时域转频域_makebuaa的博客-程序员宅基地

时域和频域的关系及matlab演示 把图像变换到频率域,实际上是把它作为一种信号,那么从信号处理的角度看,时域和频域是有什么样的关系呢?简单来讲:时域是信号在时间轴随时间变化的总体概括。频域是把时域波形的表达式做傅立叶等变化得到复频域的表达式,所画出的波形就是频谱图。是描述频率变化和幅度变化的关系。示波器用来看时域内容,频普仪用来看频域内容。 时域(时间域-time d_地震波时域转频域

推荐文章

热门文章

相关标签