Fortran入门教程(二)——数据类型

2024-02-12 23:38

本文主要是介绍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_testimplicit noneinteger(kind=2)  :: shortintinteger(kind=4)  :: longintinteger(kind=8)  :: verylongintinteger(kind=16) :: veryverylongintinteger :: defvalwrite(*, *) "short: ", shortvalwrite(*, *) "long: ", longintwrite(*, *) "verylong: ", verylongintwrite(*, *) "veryverylongval: ", veryverylongintwrite(*, *) "defval", defvalend 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_demoimplicit nonereal :: a = 1, b = 2integer :: c = 1, d = 2write(*, *) a / bwrite(*, *) c / d
end program

输出:

0.5000000000

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_demoimplicit nonecomplex :: 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_testuse ios_fortran_env, only: int8, int16integer(kind=int8)  :: ainteger(kind=1nt16) :: b
end program

这篇关于Fortran入门教程(二)——数据类型的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/703922

相关文章

SWAP作物生长模型安装教程、数据制备、敏感性分析、气候变化影响、R模型敏感性分析与贝叶斯优化、Fortran源代码分析、气候数据降尺度与变化影响分析

查看原文>>>全流程SWAP农业模型数据制备、敏感性分析及气候变化影响实践技术应用 SWAP模型是由荷兰瓦赫宁根大学开发的先进农作物模型,它综合考虑了土壤-水分-大气以及植被间的相互作用;是一种描述作物生长过程的一种机理性作物生长模型。它不但运用Richard方程,使其能够精确的模拟土壤中水分的运动,而且耦合了WOFOST作物模型使作物的生长描述更为科学。 本文让更多的科研人员和农业工作者

C 语言的基本数据类型

C 语言的基本数据类型 注:本文面向 C 语言初学者,如果你是熟手,那就不用看了。 有人问我,char、short、int、long、float、double 等这些关键字到底是什么意思,如果说他们是数据类型的话,那么为啥有这么多数据类型呢? 如果写了一句: int a; 那么执行的时候在内存中会有什么变化呢? 橡皮泥大家都玩过吧,一般你买橡皮泥的时候,店家会赠送一些模板。 上

C语言程序设计(数据类型、运算符与表达式)

一、C的数据类型 C语言提供的数据类型: 二、常量和变量 2.1常量和符号常量 在程序运行过程中,其值不能被改变的量称为常量。 常量区分为不同的类型: 程序中用#define(预处理器指令)命令行定义变量将代表常量,用一个标识符代表一个常量,称为符合常量。 2.2变量 变量代表内存中具有特定属性的一个存储单元,用来存放数据,在程序运行期间,这些值是可以 改变的。 变

Weex入门教程之4,获取当前全局环境变量和配置信息(屏幕高度、宽度等)

$getConfig() 获取当前全局环境变量和配置信息。 Returns: config (object): 配置对象;bundleUrl (string): bundle 的 url;debug (boolean): 是否是调试模式;env (object): 环境对象; weexVersion (string): Weex sdk 版本;appName (string): 应用名字;

Weex入门教程之3,使用 Vue 开发 Weex 页面

环境安装 在这里简略地介绍下,详细看官方教程 Node.js 环境 Node.js官网 通常,安装了 Node.js 环境,npm 包管理工具也随之安装了。因此,直接使用 npm 来安装 weex-toolkit。 npm 是一个 JavaScript 包管理工具,它可以让开发者轻松共享和重用代码。Weex 很多依赖来自社区,同样,Weex 也将很多工具发布到社区方便开发者使用。

Weex入门教程之2,Android Studio安装Weex插件

插件位置及描述 https://plugins.jetbrains.com/idea/plugin/8460-weex 貌似对windows还不是很支持,先放着吧。 安装 插件功能 先预览下都有什么功能 安装完成Weex插件后,如果在main toolbar找不到这些功能图标,那么就需要手动添加到main toolbar 添加到main toolbar 红框内就是

Weex入门教程之1,了解Weex

【资料合集】Weex Conf回顾集锦:讲义PDF+活动视频! PDF分享:链接:http://pan.baidu.com/s/1hr8RniG 密码:fa3j 官方教程:https://weex-project.io/cn/v-0.10/guide/index.html 用意 主要是介绍Weex,并未涉及开发方面,好让我们开始开发之前充分地了解Weex到底是个什么。 以下描述主要摘取于

Redis地理数据类型GEO

通常要计算两个地理位置的距离不是很方便,这里可以直接通过Redis提供的GEO操作来完成地理位置相关的计算 1)添加地理位置 语法:geoadd key longitude latitude member [longitude latitude member] ...字段说明:key:存放地理位置的集合名称longitude:地理坐标的经度latitude:地理坐标的纬度member:表示这

Python简单入门教程helloworld

Python 学习资源 推荐书籍: Python核心编程(第二版) (强烈推荐,建议有一定基础的看,或者看完简明Python教程再看) Python 基础教程 第二版 (入门,没有核心编程好,但也不错) 编写高质量代码:改善Python程序的91个建议 (进阶,有一定基础再看) 书籍下载: Python 教程(部分内容来源于网络, 历时一年多总结整理的,给刚刚入门的

【超级干货】2天速成PyTorch深度学习入门教程,缓解研究生焦虑

3、cnn基础 卷积神经网络 输入层 —输入图片矩阵 输入层一般是 RGB 图像或单通道的灰度图像,图片像素值在[0,255],可以用矩阵表示图片 卷积层 —特征提取 人通过特征进行图像识别,根据左图直的笔画判断X,右图曲的笔画判断圆 卷积操作 激活层 —加强特征 池化层 —压缩数据 全连接层 —进行分类 输出层 —输出分类概率 4、基于LeNet