Fortran 学习笔记001

1.输入输出及声明

1.1 Fortran程序的主要结构

程序通常以program描述来开头,后接定义的程序名(可以省略,但建议使用并取有意义的名称,便于阅读),最后以end描述结尾,可以有三种方式:end、end program与end program main。

程序基本结构:

Program main

…….

Stop

End

1.2 输出命令(write、print)

1.write命令用法

格式:write(UNIT=6,FMT=*)a

UNIT:输出位置(*表示默认值,等同于6,代表屏幕)

FMT:输出格式(*表示不限定格式)

write(*,*)a  !简写方法

注意:

(1)每次执行一次write命令,会自动换到下一行。

(2)用双引号或单引号来封装要输出的字符串。

(3)如果要输出双引号,则连续使用两个双引号。

(4)可以同时输出多个数据,中间用逗号隔开。

2.print命令用法

格式:print*,a

Print命令的用法和write大致相同,但是print后面不使用括号,而且只有一个星号。这个星号的意义是不限定输出格式,print相比于write的不同之处在于少了赋值输出位置的能力,print只能针对屏幕输出使用。

1.3 输入命令(read)

格式:read(unit=5,fmt=*)a   !严谨的写法

Unit:输入设备(*表示默认值,等同于5,代表键盘)

Fmt:输入格式(*表示不赋值输出格式)

同一行程序代码一次读入多个数值

Read(*,*)a,b,c

输入时要注意对应的变量类型,若输入内容出现空格,输入的字符串会被截断,只能得到第一个字符串的内容,解决方法是用引号封装字符串,或者使用格式化输入输出。

1.4基本数据类型

1.整数类型(integer)

格式:integer a (或integer:: a)

可以同时声明多个变量,中间用逗号隔开。声明了一个整数变量,如果赋值有小数时会忽略不计。

整型又分长整型与短整型两种,下面是长整型的声明:

      Integer(kind=4) a

      Integer*4 b

      Integer(4)c

下面是短整型的声明:

Integer(kind=2)a

Integer*2 b

Integer(2)c

2.浮点数(real)

格式:real a

不加上任何形容词时,通常会声明占用4字节的单精度浮点数,下面是单精度浮点数的声明:

      Real(kind=4)a

      Real*4 b

      Real(4)c

下面是双精度浮点数的声明:

Real(kind=8)a

Real*8 b

Real(8)c

3.复数(complex)

格式:complex a

复数是由实部和虚部两部分组成,在fortran中保存复数的方法是用两个浮点数来保存,所以复数也可以分为单精度和双精度。单精度复数声明如下:

Complex(kind=4) a

Complex*4 b

Complex(4)c

双精度复数声明如下:

      Complex(kind=8) a

      Complex*8 b

      Complex(8) c

要设置一个复数数值的方法如下:

a=(x,y) !x为实部,y为虚部,表示a=x+iy

4.字符及字符串(character)

格式:character a

声明时要求使用好几个字符,就是在声明字符串,声明方法如下:

Character(len=10) a

Character(10) b

Character*10 c

Character*(10) d

字符串类型除了直接设置之外,还可以改变字符串的某一部分,字符串可以一次只改变其中的几个字符。字符串也可以连接,连接方法是通过操作符“//”完成。

Fortran中有关字符串运行的函数:

Char(num):返回ASII字符表中数值num所代表的字符

Ichar(char):返回字符char的在ASCII字符表中的编号

Len(string):返回字符串string的声明长度

Len_trim(string):返回字符串string去除尾端空格后的实际长度

Trim(string):返回字符串string去除尾端空格后的字符串

5.逻辑变量(logical)

格式:logical a

它只用来保存两种数值:“真”或“假”

a=.true.

b=.false.

1.5 格式化输入输出(format)

格式化输入输出的目的就是吧数据经过“有计划”的版面设计显示出来。某些情况下要读取数据时,要设置恰当的输入格式。

例:write(*,“(1X,I5)”)a

  1. Iw[.m]:以w个字符宽度来输出整数,至少输出m个数字。

例:

(1)write(*,”(I5)”)100

表示以5个字符的长度来输出一个整数,输出结果前面会补2个空格。

1

0

0

(2)write(*,”(I3)”)1000

输出格式设置不足时,会输出*。

*

*

*

(3)write(*,”(I5.3)”)10

以5个字符的长度来输出一个整数,至少输出3个数字,位数不足补0。

0

1

0

  1. Fw.d:以w个字符长来输出实数,小数部分占d个字符。

例:

(1)Write(*,”(F9.3)”)123.45

表示以9个字符长度来输出实数,小数部分占3个位数。

1

2

3

.

4

5

0

(2)write(*,”(F6.3)”)123.45

总长度减小数部分与小数点长度后,整数部分长度不足会输出*。

*

*

*

*

*

*

(3)write(*,”(F9.1)”)123.45

以9个字符长度来输出实数,小数部分占1个位数。

1

2

3

.

4

3.Ew.d:用科学计数法,以w个字符长来输出实数,小数部分占d个字符长,指数部分最少输出e个数字。

例:

(1)write(*,”(E15.7)”)123.45

使用15个字符长度,小数部分占7位。总长度不足15位,前面补空格;小数部分不足7位,后面补0;指数 部分包括正负号与两位数字。

0

.

1

2

3

4

5

0

0

E

+

0

3

(2)write(*,”(E9.2E3)”)12.34

含空格共输出9个字符,其中2位小数,指数部分有三位数字。

0

.

1

2

E

+

0

0

2

4.Aw:以w个字符长来输出字符串

例:

(1)write(*,”(A10)”)“Hello”

使用10个字符长度输出字符串

H

e

l

l

o

5.nX:输出位置像右移动n位(输出n个空格)

例:

(1)write(*,”(5X.I3)”)100

先填5个空格,再输出整数。

1

0

0

6.Lw:以w个字符长来输出T或F的真假值

例:

(1)write(*,”(L4)”).true.

使用4个字符长度输出逻辑变量

T

7.Gw.d:以w个字符长来输出所有类型的数据,d不一定会使用,但不能省略。

8./:换行输出

例:

Write(*,”(I3//I3)”)10,10

结果得到三行输出,每一个“/”会换一行然后在该行继续输出。

输出结果:

1

0

1

0

9.Tc:把输出的位置移动到本行的第c个字符

Write(*,”(T3,I3)”)100/write(*,”(10X,T3,I3)”)100

把输出位置移动到第3个字符/输出位置向右移动10个字符后,移动到第3个字符

输出结果:

1

0

0

10.可以重复地以同样的格式输出数据

例:
write(*,”(3(1X,F5.2))”)1.0,2.0,3.0

连续以3个1X,F5.2的格式来输出3个实数

1

.

0

0

2

.

0

0

3

.

0

0

11.可以放进要输出的字符串

例:Write(*,”(’3+4=’,I1)”)3+4、

1.6 implicit命令

变量并不一定要经过程序的声明才能使用,编译器会根据变量名称的第一个字母来自动决定这个变量的类型。第1个字母为I,J,K,L,M,N的变量会被视为整数类型,其他字母大多会被认为是实数。

可以使用IMPLICIT命令来设置“默认类型”

例:

设置以A,B,C开头的变量都视为整型数:

Implicit integer(A,B,C)

设置A到F及I,k开头的变量都视为整型数:

Implicit integer(A-F,I,K)

设置M到P开头的变量都视为实型数:

Implicit real(M-P)

Implicit none

关闭“默认类型”功能,所有变量必须进行声明,否则会出错。

Implicit命令必须放在program命令的下一行。

1.7常量的声明

程序中有些数据是永远固定、不会改变的常数。常数只能在声明时通过parameter来设置数值,而且只能设置一次。

例:

格式:

real,parameter::pi=3.1415926

或者

real pi

Parameter(pi=3.1415926)

1.8等价声明(equivalence)

把两个以上的变量,声明使用同一内存地址,就是“等价说明”。使用同一内存位置的变量,只要改变其中一个变量,只改变其中一个变量,就会同时改变其他变量的数值。

例:

Integer a,b

Equivalence(a,b) !a,b使用同一内存空间

优点:

节省内存:声明一些暂时使用的变量

精简代码:equivalence(array(1,1,5),a)

声明的位置应该放在程序代码的可执行命令之前,在程序代码开始出现数值计算和输入输出命令时,就不能再声明变量。

DATA也算声明的一部分

Program main

  Implicit none

声明变量

可执行命令(赋值、计算、输入输出等)

End

1.9自定义数据类型

自定义数据类型:Fortran能够自由组合一些基本功能数据类型,创造出一个更复杂类型组合的功能“type”。

例:

Type::person  !开始创造一个叫person的数据类型

Character(len=30)::name

Integer::age !记录年龄

Integer::length !记录身高

Integer::weight !记录体重

Character(len=80)::address !记录姓名

end type person !自定义数据类型结束

2.逻辑循环与逻辑运算

2.1 IF语句

流程控制:在程序执行中,视情况来选择是否要执行某一段程序代码。

IF语句:能够在程序执行当中自动选择转向,跳过某些程序模块来执行程序代码。

IF用法:

(1)一个IF模块(或语句)

例:

IF(逻辑判断式)THEN

……(逻辑成立时,才会执行这里面的程序代码;逻辑不成立时,会跳到END IF之后继续执行)

END IF

如果IF模块中只有一行程序代码时,可以把与这行代码写在同一行,并省略THEN 及END IF

IF(逻辑判断式)……..

(2)一个IF-ELSE模块

例:

IF(逻辑判断式)THEN

……(逻辑成立时,执行这一段程序代码)

ELSE

……(逻辑不成立时,则执行这一段程序代码)

END IF

(3)多个IF语句嵌套模块

例:

IF(……)THEN         !第1层IF开始

IF(……)THEN     !第2层IF开始

IF(……)THEN   !第3层IF开始

Else IF(……)THEN

ELSE

END IF         !第3层IF结束

END IF           !第2层IF结束

END IF              !第1层IF结束

(4)多重判断IF-ELSE IF模块

多重判断可以一次列出多个条件及多个程序模块,但是其中最多只有一个条件成立,即最多只有一个程序模块会执行。

例:

IF(条件1)then

……(条件1成立时,执行这个模块程序)

Else if(条件2)then

……(条件2成立时,执行这个模块程序)

Else if(条件3)then

……(条件3成立时,执行这个模块程序)

Else

……(每个条件都不成立时,才执行这个模块程序,此模块可省略)

End if

2.2逻辑运算符

(1)逻辑运算符:两个数字比大小

F90以上

F77

说明

==

.EQ.

判断是否“相等”

/=

.NE.

判断是否“不相等”

>

.GT.

判断是否“大于”

>=

.GE.

判断是否“大于或等于”

<

.LT.

判断是否“小于”

<=

.LE.

判断是否“小于或等于”

(2)集合运算符:由两个或多个小的逻辑表达式组合成

.AND.

交集,如果两边的表达式都成立,整个表达式就成立

.OR.

并集,两边的表达式只要有一个成立,整个表达式就成立

.NOT.

如果后面的表达式不成立,整个表达式就成立

.EQV.

两边表达式的逻辑运算结果不同时,整个表达式就成立

.NEQV.

两边表达式的逻辑运算结果不同时,整个表达式就成立

2.3 SELECT CASE 语句

Select case(变量)   !放入所要判断的变量

Case(值1)

……       !变量等于值1时,执行此程序段

Case(值2)

……       !变量等于值2时,执行此程序段

Case(值n)

……       !变量等于值n时,执行此程序段

Case default

……       !变量不等于任何值时,执行此程序段

End select

CASE DEFAULT模块并不一定要出现,在case里的冒号前后放入两个数值时,代表这两个数字范围中的所有数值;还可以用逗号放入多个变量。

例:

Case(1) !变量=1时,会执行这个case中的程序模块

Case(1:5)!1<=变量<=5时,会执行这个case中的程序模块

使用select case来取代某些使用IF-ELSE IF的多重语句,会让程序代码看起来比较简洁。

Select case 有一些限制:

只能使用整数,字符和逻辑变量,不能使用浮点数和复数。每个case中所使用的数值必须是固定的常量,不能使用变量。

2.4 其他流程控制

1.goto命令

Goto命令提供给程序员一个任意跳跃到程序任意一行代码的能力,被跳过的代码则不会被执行。虽然这在某种情况下很方便,但是会影响代码的可读性,所以不太建议在程序中使用。

2.pause命令

程序执行到Pause时,会暂停执行,直到用户按下Enter键才会继续执行。这可以应用在当屏幕上要连续输出大量数据时,在适当的位置暂停程序,以便用户更好的阅读输出的内容。

3.continue命令

Continue命令没有什么实际的用途,它的功能

4.stop命令

终止程序。

3.循环

3.1 DO

格式:

Do counter=1,lines,1

……

End do

Counter是“计数器”,counter=1表示初始值为1,counter在使用之前需要先进行声明。

Lines是计数器的终止数值,counter<lines时会执行循环语句。

最后面的数值1代表counter变量的增量,每执行一次循环,counter就加1。

Do循环中,计数器的初值,循环终止值,以及循环增量值可以用常量或者变量来指定。

3.2 DO WHILE 循环

在循环次数未知但是循环条件已知的情况下,可以使用DO while 循环。

格式:

Do while(逻辑运算)

……

End do

3.3 循环的流程控制

1.cycle 命令

Cycle命令可以跳出本次循环,进行下一次循环,相当于c++中的continue。

2.exit 命令

Exit命令可以跳出当前循环,如果是循环嵌套的情况,则跳出的是exit语句所在的循环,面外层循环不会被其影响,相当于c++中的break。

3.4 循环的应用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/56056.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Java实现(APP)智能停车场管理系统

移动应用开发系统设计说明书&#xff08;智能停车场管理系统&#xff09; 服务集成流程详细设计 实现功能 序号功能点1新增用户2注册用户3修改场地信息4列出场地信息5新增认证车辆6列出认证车辆7删除认证车辆8车辆进入信息录入9停车记录列表展示10出停车场信息录入 参数说明…

Pear Admin Flask Master开启步骤

由于我学的是数控技术&#xff0c;对编程是从小白自学的&#xff0c;在运行pearflask时一直没搞懂初始化数据库这一步是在哪里执行的&#xff0c;网上查了很多资料都没写&#xff0c;找了一天半的资料后终于查到了。 使用系统&#xff1a;Windows 10 Python版本&#xff1a;Py…

架构师之路-学渣到学霸历程-09

文件打包压缩命令 继续敲命令联系手感得了&#xff0c;坚持敲命令&#xff0c;使用命令行&#xff0c;让我更cool&#xff1b; 这些基础的命令要掌握&#xff0c;其实主要的就是要练手感了&#xff1b;敲吧&#xff0c;努力&#xff1b;~&#xff01; 1.gzip命令&#xff1a;…

YOLOv8实战PCB电路板缺陷检测【数据集+YOLOv8模型+源码+PyQt5界面】

本文采用YOLOv8作为核心算法框架&#xff0c;结合PyQt5构建用户界面&#xff0c;使用Python3进行开发。YOLOv8以其高效的实时检测能力&#xff0c;在多个目标检测任务中展现出卓越性能。本研究针对PCB电路板缺陷数据集进行训练和优化&#xff0c;该数据集包含丰富的PCB电路板缺…

【司南大模型评测工具 API评测商业大模型】

1、司南大模型评测工具&#xff08;如果是pip安装&#xff0c;也要git clone 代码文件夹&#xff09; conda create --name opencompass python3.10 pytorch torchvision pytorch-cuda -c nvidia -c pytorch -y conda activate opencompass git clone https://github.com/open…

Hessian 序列化

Hessian 序列化 Hessian 序列化是一种轻量级的二进制 RPC 序列化方式。 一、定义与特点 定义&#xff1a; Hessian 是一种用于在不同编程语言之间进行高效对象序列化和远程方法调用的二进制协议。它主要用于在分布式系统中进行数据传输和远程过程调用&#xff08;RPC&#xff…

Oracle数据库的乐观锁和悲观锁

Oracle数据库的悲观锁和乐观锁是两种数据锁定机制。 悲观锁&#xff08;Pessimistic Locking&#xff09;在数据开始读取的时候就把数据锁定住&#xff0c;其它想插入的数据要等待直到锁的释放。这种锁定数据的方式带来的是性能的降低&#xff0c;因为在多用户并发访问的时候&…

Go语言实现长连接并发框架 - 任务管理器

文章目录 前言接口结构体接口实现项目地址最后 前言 你好&#xff0c;我是醉墨居士&#xff0c;我们上篇博客实现了路由分组的功能&#xff0c;接下来这篇博客我们将要实现任务管理模块 接口 trait/task_mgr.go type TaskMgr interface {RouterGroupStart()StartWorker(tas…

【计网】从零开始学习http协议 ---深入理解cookie和session

我的天空里没有太阳&#xff0c; 总是黑夜&#xff0c; 但并不暗&#xff0c; 因为有东西代替了太阳。 --- 东野圭吾 --- 从零开始学习http协议 1 理解cookie1.1 什么是cookie1.2 验证cookie1.3 cookie的属性 2 理解session2.1 什么是session2.2 验证session 1 理解cooki…

刷题 链表

面试经典150题 - 链表 141. 环形链表 class Solution { public:bool hasCycle(ListNode *head) {ListNode* slow head, *fast head;while (fast ! nullptr && fast->next ! nullptr) {slow slow->next;fast fast->next->next;if (slow fast) {return…

【Linux复习】指令

文章目录 1.>2. cat3.系统命令bash和shell和kernel权限只被认证一次粘滞位引入前提知识场景解释为什么普通用户&#xff08;无w权限&#xff09;可以删除文件&#xff1f;为什么普通用户通过sudo设置文件权限为000后仍能删除文件&#xff1f; 结论 粘滞位是干什么的&#xf…

苍穹外卖P19--异常处理

以上传数据库数据重复为例&#xff0c;进行异常处理。 接口文档报错&#xff1a; 重新启动&#xff1a;

使用 Wireshark 抓取类似的 HTTP 请求包

要使用 Wireshark 抓取类似的 HTTP 请求包&#xff0c;可以按照以下步骤进行操作&#xff1a; 安装并启动 Wireshark 如果你还没有安装 Wireshark&#xff0c;可以从Wireshark 官方网站下载并安装它。 安装完成后&#xff0c;启动 Wireshark。选择网络接口 在 Wireshark 主界面…

Linux中perf的使用

perf 是 Linux 系统中的一个强大的性能分析工具&#xff0c;广泛用于内核和用户态程序的性能分析。它可以帮助开发者和系统管理员深入了解程序的 CPU 使用情况、函数调用频率、缓存命中率、硬件事件等&#xff0c;进而优化程序的性能。 下面我将详细介绍如何在 Linux 系统中使…

单例模式和读者写者问题

文章目录 10. 线程安全的单例模式10.1 什么是设计模式10.2 什么是单例模式10.3 单例模式的特点10.4 饿汉方式和懒汉方式10.5 单例模式的线程池 11. STL和智能指针的线程安全 问题11.1 STL中的容器是否是线程安全的?11.2 智能指针是否是线程安全的? 12. 其他常见的各种锁13. 读…

009——二叉树

目录 二叉树的五种基本形态&#xff1a; 1.二叉树可以是空树 2.只有一个根节点的树 3.斜树&#xff1a;只有左子树或右子树的树 4.左右孩子都有的树 二叉树的性质&#xff1a; 1.假设根节点是第一层&#xff0c;在二叉树的第i层上最多有2^(n-1)个结点 2.深度为k的二叉树…

WebGoat JAVA反序列化漏洞源码分析

目录 InsecureDeserializationTask.java 代码分析 反序列化漏洞知识补充 VulnerableTaskHolder类分析 poc 编写 WebGoat 靶场地址&#xff1a;GitHub - WebGoat/WebGoat: WebGoat is a deliberately insecure application 这里就不介绍怎么搭建了&#xff0c;可以参考其他…

Bash 脚本中解析 INI 文件

在 Bash 脚本中解析 INI 文件可能稍显复杂&#xff0c;因为 Bash 本身并未内置专门用于处理此类配置文件的工具。然而&#xff0c;我们可以通过一些文本处理命令&#xff08;例如 grep、sed、awk&#xff09;或借助外部工具&#xff08;如 python 脚本或 inih 库&#xff09;来…

基于SSM的旅游网站【附源码】

基于SSM的旅游网站&#xff08;源码L文说明文档&#xff09; 目录 4 系统设计 4.1 系统概要设计 4.2 系统功能结构设计 4.3 数据库设计 4.3.1 数据库E-R图设计 4.3.2 数据库表结构设计 5 系统实现 5.1 管理员功能介绍 5.1.1 用户管理 5.1.2 …

每天五分钟深度学习pytorch:基于pytorch搭建多项式线性回归模型

本文重点 我们前面学习了基于pytoch搭建一元线性回归模型,本文我们学习使用pytorch搭建多项式的回归模型,在学习这个之前我们需要了解一下什么是多项式回归模型? 多项式回归模型和多变量(多特征)的回归模型是不一样的,多变量就是一个样本有多个特征属性,而多项式就是一…