Fortran简明自学手册

因为CSDN不支持对Fortran代码的高亮显示,这儿贴出
学习手册PDF版百度网盘的下载链接:
https://pan.baidu.com/s/1A_6N0TQERg2nrnxkh3UnGQ

Fortran即Formula Translation(公式翻译)。是世界上诞生最早的高级语言之一,其易读,好写,很适合科学计算,一诞生便很快统治了数值计算界。因此也不难理解为何Fortran中保留了一些特殊的基础类型,如虚数。过去学习Fortran也是一种风尚。很多科学界的前辈,往往就是从这门语言开始了对编程的学习。

如其字面意,本手册是一本简明扼要学习Fortran基础知识的手册。

本手册所有Fortran代码均基于Fortran95版。

本手册适合两类人群:1.有其他程序语言基础,对Fortran感兴趣的人。2.有Fortran基础,想要巩固的人。

话不多说,下面开始。

文章目录

  • Fortran简明自学手册
    • 第一章,开始
      • 注释
      • Hello World
      • 帮助网址
    • 第二章,变量
      • 声明规则
      • 变量类型
      • 常数
      • 声明位置
      • 命名风格
      • 隐式声明
      • 批量赋值
    • 第三章,计算和运算函数
      • 运算符
      • 运算函数
      • 运算优先级
      • 字符串运算
      • 类型转换
    • 第四章,输入输出
      • 输入输出函数
      • 示例:从控制台输入输出
      • 格式符

第一章,开始

注释

Fortran使用!表示单行注释,其没有多行注释。

合理的书写注释是优秀的程序员的好习惯。

Hello World

学习编程从HelloWorld的心态做起。

    program HelloWorld!这是一个Fortran的HelloWorld的程序。print *, 'Hello World'end program HelloWorld

所有程序为了更好的流程控制和阅读,必有语句结束符,表述一个语句的结束;必有区块标识符,表示一个区块的位置。

语言 语句结束符 区块标识符
C语言体系 {}
Python 一行书写且只书写一个语句 缩进来标识区块
Fotran 一行只书写一个语句 KeyWord (内容) End Keyword

三者各自输出1,10到屏幕上的代码如下。

C语言版。

int main()
{int i;for(i = 1; i <= 10; i ++){printf("%d ", i);}return 0;
}

Python版。

Fotran版。

program Print1to10integer ido i=1,10print *,iend do
end program Print1to10

本代码中包括的两个区块,外层program…end program,内层do…end do。

请记住在Fortran中表示一个区块时。凡开始必有结束。将do…end do一起书写,再补全其中的内容是个好习惯。

帮助网址

前人栽树后人乘凉。你可能会需要这些帮助网址。

Fcode:编译器下载,一些Fortran源代码,专门讨论Fortran的网址。

易百教程|Fortran学习:详细的分条目的Fortran手册。

请善用搜索引擎。

第二章,变量

声明规则

变量声明的如下:

Kind(占用字节长) 变量名1,变量名2…

或者是

Kind*占用字节长 变量名1 ,变量名2…

例如

integer(4) i,j
!声明了一个长度为4个字节的整数i,j
real*8 income,outcome
character*13 name
!声明了一个可以存储十三个字节字符信息的字符串name

添加::表示允许后续变量在声明时同时初始化,当然也可不初始化。

形如:

Kind(占用字节长) :: 变量名1=初值,变量名2,变量…

logical::istrue=.false.
!声明了一个布尔型变量istrue,初始值为.false.
complex::a=(1,1.5),b=(3,3.5),ab
!声明了复数a,b和ab,a,b赋予了初始值。

变量类型

(主要,次要类型是我为了便于大家理解而总结的,并非官方承认的)

主要类型 符号 备注
整数 integer(不能缩写为int) integer不给字节长时默认长为4。可接受的长度为1,2,4,8。
实数 real real不给字节长时默认长为4。可接受的长度为4,8。 也可用,double precision替代real*8。
字符串 character 可接受长度为所有自然数。若长度为0则始终为空串。其必须使用” “或‘ ’将内容包起来。如”中国“。ASCII码占用一个字节,中文占用两到三个字节。
次要类型 符号 备注
逻辑(布尔类型) logical 可接受长度为1,2,4,8。不建议给定给长度。 接受的取值只有.true.和.false.。注意不要拼错单词,两边点号不可省略。
复数 complex 两个real实数的有序对。a+bi书写成(a,b)。可接受的长度为4,8。

常数

常数书写与其他程序无异。

需要注意:

  1. 表示进制

    ±r#数字(r表示进制,36≥r≥2)

    例如下面的代码是合法的:

    print*,2#11110000
    print*,7#345543
    
  2. 科学计数法

    ±n.mE±S (其中n.m表示任意实数或整数,S为整数,数据精度为real*4)

    例如下面的代码是合法的:

    
    

    也可以将E替换成D表示real*8的科学记数法。(其他语言没有D的表示方法!)

    注意1.d0就等于1.0。

声明位置

Fortran的变量声明都只能在程序最开始进行。

例如这样的代码是错误的:

program GetSforCircleprint*,"请输入圆的半径"integer rread*,r  !从外部读取一个数字到rreal ss=3.14*r*rprint*,s !输出s
end program GetSforCircle

应该将之改成如下形式:

program GetSforCircle!变量定义integer rreal s!程序主体print*,"请输入圆的半径"read*,r  !从外部读取一个数字到r    s=3.14*r*rprint*,s !输出s
end program GetSforCircle

所以我建议将Fortran的程序分为变量定义和程序主体两个部分,用注释分开。

命名风格

Fortran不区分大小写。如real和REAL是等效的。

你需要保证你的变量命名有意义。例如day,month,year就比a,b,c要好的多。

  1. 关键字和内部函数建议使用小写。如if,end,do

  2. 自定义长变量建议使用如下风格之一作为主要风格:

    PASCAL风格:首字母大写。如IsTrue,CityName,GetTheTime

    **驼峰风格:**单词之间以_区分。如X_Postion,City_Population

    同时也建议混搭使用匈牙利命名法来作为辅助:

    **匈牙利命名法:**前缀变量类型以便区分变量。如IntDistance,RealDistance

  3. 短变量和常用变量建议时候使用小写。如i,j,k作为循环变量。n,sum作为计数变量等。

隐式声明

隐式声明必须放在程序最开始位置。其可批量定义某些字母开头的变量的类型。

如:

implicit real(a-f),integer(x,y,z)
!a到f之间的变量隐式声明为real变量。x,y,z变量隐式声明为x,y,z变量。

则之后无需声明对应变量。a1或者all就都会被视为real类型变量。xmlKind,year,z_postion

Fortran预先定义了隐式声明的I-N规则。即在你不添加用户的隐式规则时,I到N开头的被当作整数变量。其他开头的被当作实数变量。

优先级如下:

显式声明>用户定义隐式规则>默认隐式I-N规则

复杂程序的编写不建议使用隐式定义。可将下列语句写在程序最开头,去除之。为了培养良好的编程习惯,建议不论什么情况下均使用此语句。

implicit none

批量赋值

用data关键字来给已经声明过的变量批量赋值。

data 变量1,变量2…/初始值1,初始值2…/

如下列代码:

integer a,b,c
data a,b,c/1,2,3/
integer x,y,z
data x,y,z/3*5/!m*n:重复m个n

第三章,计算和运算函数

运算符

如表:

符号 备注
±*/ 同其他程序语言。整数间用除法结果保留到整数。
** 乘方。
= 赋值。

运算函数

函数名 备注
mod(x,y) 求x除以y的余数
sin(),cos(),tan(),asin(),acos(),atan() 以弧度为单位求对应数值。只接受real变量作为参数。
abs(),exp(),log(),log10(),sqrt() 求绝对值,e为底的乘方,e为底的对数,10为底的对数,开方。只接受real变量作为参数。
max(x1,x2…),min(x1,x2…) 求一串数中的最大值和最小值。
int(),real(),char(),ichar() 类型转换函数。char()将整数转为ASCII码对应字符。ichar相反。
sizeof() 获得对应变量的字节长度。

上述函数,很多语言通用。保持一个基本的映像,不会使用或未列到的搜索即可。

运算优先级

与其他语言无异。多用括号。遇到疑惑处搜索即可。

字符串运算

即字符串处理。Fortran只在字符串内部区分大小写。

符号或函数 备注
len() 获得字符串的长度。
字符串1//字符串2 连接两个字符串
字符串切片charatername(n:m) 如string=”我爱中华“,则name(2:4)表示”爱中华“。第一个下标从1开始。其中1≤n≤m≤len()

请务必注意字符串赋值。多余部分将被直接丢弃。不足部分以空格补齐。如:

character*4 ch1,ch2*1,ch3 !可以用这种方法来表示长度规定中的特例。
ch1='hello'
ch2=ch1
ch3='my'

执行后,ch1=‘hell’,ch2=‘h’,ch3='my '(my后接两个空格)

这很令人恼火。其他高级语言吸取Fortran教训后都规避了这一点,使用了引用变量达到任意扩充string的目的。

类型转换

Fortran无隐式转换。例如因为sin()只可以接受real类型的变量。所以直接写sin(1)是错误的。而写sin(1.0)或者sin(1.d0)却是正确的。

显式转换使用运算函数即可实现。

字符类型和数字类型之间的转换见第四章。

第四章,输入输出

简单程序=输入输出+计算。

输入输出函数

类型 格式 备注
默认输出 print *,等待输出的信息 始终输出到默认设备—控制台。等待输入的信息彼此之间以逗号分隔。*处可填写输出格式。不填写则按照默认格式。
默认输入 read *,等待接受输入的信息 始终从控制台读取信息。与print相反。
输出 write(*,*) 等待输出的信息 第一个*指示输出到的位置。不填写则默认输出到控制台。第二个*号指定格式。其他与print同。
读入 read(*,*) 等待接受输入的信息 第一个*指示读取信息的位置。不填写则默认从控制台读取信息。第二个*号指定格式。其他与read同。

示例:从控制台输入输出

program CreatePerson implicit none!变量定义character*4 nameinteger yearreal height   !程序主体print*,"请为你的小人起一个名字"     !输出到默认设备——控制台,没有指定输出格式。read*,name    !执行此语时控制台等待输入。按下确定后继续。从控制台读取一个字符串到name。 print*,"请为你的",name,"确定一个年龄和身高"      !等待输出的信息以空格分开read*,year,height  print*,name,"小人",year,"岁了,他的身高是",height
end program CreatePerson

图-1

默认输出因为没有指定格式。故而输出结果不够美观。使用格符就可以避免这点。

格式符

以print*,输出表为例。*可以被格式语句替代。

格式语句形式如下:

“(第一个变量的格式,第二个变量的格式…)”

例如:

print,"(F3.2)",1.333333

输出结果为:1.00

各格式符说明如下:

r为重复系数,不填为1。w为字符宽度,小数点算一位。[]中的表示可选参数。

类型 样式 说明
整数 rIw
小数 rFw.d d为小数部分宽d
指数

我们为上述代码增加输出格式。

program CreatePerson implicit none!变量定义character*4 nameinteger yearreal height   !程序主体print*,"请为你的小人起一个名字"     read*,name       print*,"请为你的",name,"确定一个年龄和身高"     read*,year,height   print'(a4,a2,i3,a8,f5)',name,"小人",year,"岁了,他的身高是",height
end program CreatePerson

​ 图-2

Fortran简明自学手册相关推荐

  1. 《UG NX8.0中文版完全自学手册》一第1章 UG NX 8.0简介

    本节书摘来自异步社区<UG NX8.0中文版完全自学手册>一书中的第1章,作者 刘昌丽 , 周进,更多章节内容可以访问云栖社区"异步社区"公众号查看 第1章 UG NX ...

  2. Juniper 防火墙简明配置手册

    Juniper SRX防火墙简明配置手册  SRX系列防火墙是Juniper公司基于JUNOS操作系统的安全系列产品,JUNOS集成了路由.交换.安全性和一系列丰富的网络服务.目前Juniper公司的 ...

  3. catia过载属性使用方法_catia简明操作手册

    Catia 简明操作手册 1 . 登陆方法: 运行,输入以下 IP ,进入 catia 数据的服务器: 用户名及密码均为 designer 进入 YRS 中,将 Map-VPLM 文件拷贝到桌面上,并 ...

  4. JSP完全自学手册图文教程

    2019独角兽企业重金招聘Python工程师标准>>> JSP全名为Java Server Pages,中文名叫java服务器页面,其根本是一个简化的Servlet设计,它是由Sun ...

  5. 广告贴——希望大家有空能够参加11月27日的《葵花宝典——WPF自学手册》签名售书活动...

    活动主办方:电子工业出版社博文视点公司 活动时间及地点:2010年11月27日  下午13:30~15:00  中关村图书大厦五层多功能厅 这是一个广告贴.但是我会用心去写,否则发在首页,就愧对大家了 ...

  6. 《AutoCAD全套园林图纸绘制自学手册》一第1章 园林设计基本概念1.1 概述

    本节书摘来自异步社区<AutoCAD全套园林图纸绘制自学手册>一书中的第1章,第1.1节,作者 朱春阳 , 李晓艳 , 胡仁喜,更多章节内容可以访问云栖社区"异步社区" ...

  7. Docker完全自学手册

    阿里云大学免费课程:Docker完全自学手册 课程介绍: Docker 是 PaaS 提供商 dotCloud 开源的一个基于 LXC 的高级容器引擎,源代码托管在 Github 上, 基于go语言并 ...

  8. 电脑入门完全自学手册_电气自动化自学宝典——看过人人都是工程师

    原标题:电气自动化自学宝典--看过人人都是工程师 怎样快速成为一名电气自动化工程师呢? 对于一些对电气技术一无所知或略有一点基础的人来说,要想成为一名电气自动化工程师或达到相同的技术程度,有什么速成的 ...

  9. 802d简明调试手册_SINUMERIK-828D简明调试手册.pdf

    SINUMERIK 828D / 828D BASIC 简明调试手册 SINUMERIK Answers for industry. SIEMENS A B C 01.2012 A SINUMERIK ...

最新文章

  1. Outlook2010 Bug 一则
  2. 提升淘宝排名的27个因素
  3. 【SpringCloud】Eureka工作原理
  4. 【Mysql】MySQL event 计划任务
  5. [设计模式笔记]4.建造者模式
  6. ConcurrentHashMap的源码分析-put方法第四阶段
  7. c# abstract抽象类与继承类子类的构造函数_base
  8. 19套最新的免费图标字体集
  9. java计算两个字符串格式的时间间隔多少天多少小时多少分钟
  10. IntelliJ IDEA使用技巧(二)——添加jar包
  11. 基于Jsp的简单论坛(BBS)的设计与实现(附代码)
  12. 开源的仓库管理软件——Sonatype Nexus
  13. 华为android手机怎么解锁,华为手机如何解锁 华为手机解锁方法【图文详解】
  14. win10远程控制+Android,win10实现手机远程控制电脑步骤分享
  15. 光纤资料大全之光纤分类
  16. 喝一口肾没了:全球最贵10款矿泉水
  17. Java poi 在 Excel中生成统计图
  18. 发布一款新闻资讯软件(android版)
  19. 解决win10莫名其妙重启问题
  20. 汽车软件大战一触即发,诚迈科技如何重构整车“软架构”

热门文章

  1. 2012年度十大杰出IT博客之 蒋金楠
  2. WDM波分复用中什么是C波段、L波段?
  3. 7个适用于安卓手机的数据恢复工具
  4. python 修改图片尺寸_Python实现更改图片尺寸大小的方法(基于Pillow包)
  5. k3导入账套_k3新建帐套如何导入会计科目
  6. 清除DataGridView的全部内容,包括标题行
  7. ABI (Application Binary Interface)解析
  8. 终端 删除php文件内容,Mac_mac命令行终端可以卸载吗?mac命令行终端卸载软件教程,  mac os系统卸载软件方式有 - phpStudy...
  9. 数据结构实验——顺序表操作
  10. 笔记本开启热点后上不了网