内容简介
Fortran是计算世界zui早出现的高级程序设计语言之一,随着面向对象编程时代的到来,Fortran语言不仅保持了发展的步伐,而且继续在科学计算方面领先。《Fortran95/2003程序设计(第3版)》在第2~7章介绍了Fortan语言基础知识,为初学者提供入门学习资料;在第8~15章介绍了Fortran语言高级特性,为深入用好Fortran语言提供支持;在第16章讲述了Fortran语言面向对象编程方法,支持代码的复用实现;在第17章简述Fortran95版本宣布废弃的特性,支持人们对新变化的认识。在附录B详细列出内置函数功能说明,使《Fortran95/2003程序设计(第3版)》犹如Fortran语言编程指南。书中语言浅显易懂,例题详细展示知识的用法,测验帮助读者检验学习效果,涉及各学科实际工程计算作业有利于培养解决科学计算方面问题的能力。《Fortran95/2003程序设计(第3版)》是一切乐于用Fortran语言进行计算的读者的。
作者简介
作者:(美国)StephenJ.Chapman译者:刘瑾庞若梅赵越合著者:章小莉
内页插图
目录
前言
第1章 计算机和Fortran语言简介
1.1 计算机
1.2 计算机中数据的表示
1.3 计算机语言
1.4 Fonran语言发展历史
1.5 Fortran的演进
1.6 小结
第2章 Fortran基础知识
2.1 介绍
2.2 Fonran字符集
2.3 Fortran语句结构
2.4 Fonran程序结构
2.5 常数与变量
2.6 赋值语句和算术运算
2.7 内置函数
2.8 表控输入和输出语句
2.9 变量初始化
2.10 IMPLICITNONE语句
2.11 程序举例
2.12 调试Fonran程序
2.13 小结
第3章 程序设计与分支结构
3.1 自顶向下设计技术入门
3.2 伪代码和流程图的使用
3.3 逻辑常数、变量和运算符
3.4 控制结构:分支
3.5 有关调试Fortran程序的问题
3.6 小结
第4章 循环和字符操作
4.1 控制结构:循环
4.2 字符赋值和字符操作
4.3 Fonran循环的调试
4.4 小结
第5章 基本的I/O概念
5.1 格式和格式化wRITE语句
5.2 输出设备
5.3 格式描述符
5.4 格式化READ语句
5.5 文件及文件处理初步
5.6 小结
第6章 数组
6.1 声明数组
6.2 在Fonran语句中使用数组元素
6.3 在Fonran语句中使用整个数组和部分数组
6.4 输入和输出
6.5 程序举例
6.6 什么时候该用数组?
6.7 小结
第7章 过程
7.1 子程序
7.2 用模块共享数据
7.3 模块过程
7.4 Fonran函数
7.5 过程作为参数传递给其他过程
7.6 小结
第8章 数组的高级特性
8.1 二维数组
8.2 多维数组
8.3 对数组使用Fonran内置函数
8.4 加掩码的数组赋值:wHERE结构
8.5 FORALL结构
8.6 可分配数组
8.7 小结
第9章 过程的附加特性
9.1 给子程序和函数传递多维数组
9.2 SAVE属性和语句
9.3 过程中的可分配数组
9.4 过程中的自动数组
9.5 在Fortran2003过程中的可分配数组
9.6 纯过程和逐元过程
9.7 内部过程
9.8 小结
第10章 字符变量的更多特性
10.1 字符比较操作
10.2 内置字符函数
10.3 把字符变量传入子程序或函数
10.4 可变长字符函数
10.5 内部文件
10.6 例题
10.7 小结
第11章 附加的内置数据类型
11.1 REAL数据类型的可选择类别
11.2 INTEGER数据类型的可选长度
11.3 CHARACTER数据类型的可选类别
11.4 COMPLEX数据类型
11.5 小结
第12章 派生数据类型
12.1 派生数据类型简介
12.2 派生数据类型的使用
12.3 派生数据类型的输入与输出
12.4 在模块中声明派生数据类型
12.5 从函数返回派生类型
12.6 派生数据类型的动态内存分配
12.7 参数化派生类型
12.8 类型扩展(Fonran2003新特性)
12.9 类型绑定过程
12.1 0ASSOCIATE结构
12.1 1小结
第13章 过程和模块的高级特性
13.1 作用范围和作用域
13.2 递归过程
13.3 关键字参数和可选参数
13.4 过程接口和接口块
13.5 通用过程
13.6 用用户自定义操作符和赋值符扩展Fortran
13.7 绑定赋值符和操作符
13.8 限制对模块内容的访问
13.9 USE语句的高级选项
13.10 内置模块
13.11 访问命令行参数和环境变量
13.12 VOLATILE属性和语句
13.13 小结
第14章 高级I/O概念
14.1 更多格式描述符
14.2 表控输入的默认值
14.3 FortranI/O语句描述符详述
14.4 有名I/O列表
14.5 未格式化文件
14.6 直接访问文件
14.7 流访问模式
14.8 派生数据类型的非默认I/O
14.9 异步I/O
14.10 访问特定处理机相关的I/O系统信息
14.11 小结
第15章 指针和动态数据结构
15.1 指针和目标变量
15.2 在赋值语句中使用指针
15.3 使用数组指针
15.4 使用指针的动态内存分配
15.5 指针当作派生数据类型的元素
15.6 指针数组
15.7 在过程中使用指针
15.8 过程指针
15.9 二叉树结构
15.10 小结
15.10.1 习题
第16章 Fortran面向对象程序设计
16.1 面向对象程序设计介绍
16.2 Fortran类的结构
16.3 CLASS保留字
16.4 在Fortran中实现类和对象
16.5 第一个例子:timer类
16.6 方法的分类
16.7 对类成员的访问控制
16.8 析构函数
16.9 继承性和多态性
16.10 避免在子类中重载方法
16.11 抽象类
16.12 小结
第17章 冗余、废弃以及已被删除的Fortran特性
17.1 Fortran90前的字符限制
17.2 已被废除的源码格式(不再使用)
17.3 冗余数据类型
17.4 过时、废弃以及不适应需求的说明语句
17.5 共享内存空间:COMMON和EQUIVALENCE
17.6 不必要的子程序特性
17.7 其他执行控制特征
17.8 被废除的分支和循环结构
17.9 I/O语句的冗余特性(不再使用)
17.10 小结
附录A ASCII和EBCDIC编码系统
附录B Fortran95/2003内置过程
附录C Fortran95/2003程序中语句工作状态一览表
附录D 术语表
附录E 各章测验的答案
精彩书摘
第1章 计算机和Fortran语言简介
计算机可以说是20世纪最重要的发明,它以多种方式深刻地影响着我们的生活。当我们去食品店购物,收银台的扫描设备通过计算机识别我们购买的食物。客户在银行的账户是用计算机来管理,这使得我们无论白天还是晚上什么时候都可以办理业务,因为有很多的计算机一直在服务着。计算机也控制着我们的电话和电力系统、微波炉和其他设备的运行,甚至它还控制着汽车的引擎。今天,如果突然使他们的计算机失灵,那么发达国家几乎一夜之间就会崩溃。考虑到计算机对人们生活的重要性,很难想象它是在大约65年前才发明出来的东西。
这是个怎样的设备呢?为什么对我们的生活有如此大的冲击能力?计算机(computer)是一种特殊的机器,它可以存储信息,并能对信息以令人难于置信的极高速度进行算术计算。存储在计算机中的程序(program)能告诉计算机需要按怎样的顺序执行计算任务,从而保证对信息的计算顺利完成。大多数计算机都非常灵活,例如,如果在它的上面执行相应的程序,我用来编写本书的计算机也可以进行银行账户管理。
前言/序言
本书第一版是我编写维护国防和地球物理领域的大型Fortran程序的产物。我在工作期间,成功编写了大型程序,这取决于策略和技术,很显然,那时候对于一个年轻的工程师来说,维护Fortran程序与学校学习Fortran程序的编写是完全不同的。一旦程序投入服务,维护和修改大型程序绝对需要高昂的令人难于置信的费用。因为编程的人容易理解程序,而修改程序的人相对于原程序员来说就很难明白它们的内容了。我编写本书的目标是,既传授Fortran语言的基础知识,又较好地传授编写和维护程序的技术。另外,还希望本书对今后打算从事编程工作的学生有一定的参考价值。
在学生学习程序设计过程的早期,要教会他们花更多的精力来保证程序的可维护性是非常难的。因为课堂上的编程任务都很简单,一个人足可在短期内完成编程任务,且这些程序也不需要多年的维护。也因为项目简单,一个学生只要参加了课程学习,完成所有编程任务,通过考试,即使始终不学实际工作中参加大型编程项目时需要的经验,常常就能胜任从“编写”到产生代码这一整个过程的任务。
本书一开始传授编写的Fortran程序就适用于大型项目开发,这样可以强调在编代码前认真进行设计的重要性。其中设计过程使用的技术是自顶向下设计技术,即把大型程序分解为可以单独实现的若干个逻辑部分。书中还强调完成单个逻辑部分编写过程的重要性和在将各个独立部分集成为最终产品的过程开始之前测试单元的重要性。
《Fortran95/2003程序设计(第3版)》:系统掌握现代Fortran编程艺术 在蓬勃发展的科学计算和高性能计算领域,Fortran语言以其高效的数值运算能力和悠久的历史,始终占据着举足轻重的地位。从早期的高性能科学应用,到如今在并行计算、大数据分析等前沿领域的广泛应用,Fortran的生命力历久弥新。而《Fortran95/2003程序设计(第3版)》正是一部精心打磨的著作,旨在为读者提供一个系统、深入的学习平台,全面掌握Fortran95和Fortran2003标准下的程序设计精髓。本书并非简单地罗列语法特性,而是从工程实践出发,以清晰的逻辑、翔实的案例,引领读者一步步走向Fortran编程的精通之路。 本书的核心价值与内容特色 本书最大的亮点在于其对Fortran95和Fortran2003标准的深度解读与融合。Fortran95作为一次重要的现代化演进,引入了指针、模块、动态内存分配、数组赋值等诸多现代编程语言的特性,极大地提升了Fortran的灵活性和表达能力。而Fortran2003则在此基础上,进一步完善了面向对象编程、国际化支持、对C语言的互操作性等,使其在复杂的软件开发环境中也能游刃有余。本书巧妙地将这两个版本的特性穿插讲解,让读者在学习新特性的同时,也能深刻理解其演进的脉络和背后的设计思想。 一、 奠定坚实基础:从基本概念到核心语法 本书的开篇便从Fortran的基本概念入手,逐步深入到变量、数据类型、运算符、表达式等核心内容。作者清晰地阐述了Fortran特有的数据类型,如整数、实数、复数、逻辑量和字符,并详细介绍了各种类型的精度和范围,这对于进行精确的科学计算至关重要。 变量与数据类型: 详尽讲解了Fortran中变量的声明、初始化以及各种数据类型的属性。读者将理解Fortran如何管理内存,以及如何选择最适合计算需求的类型。 运算符与表达式: 涵盖了算术运算符、关系运算符、逻辑运算符以及赋值运算符,并深入探讨了表达式的求值顺序和优先级,这是编写正确计算逻辑的基础。 控制结构: 循序渐进地介绍了Fortran的控制流语句,包括顺序结构、选择结构(IF、CASE)、循环结构(DO、DO WHILE、DO CONCURRENT)以及分支结构(GOTO、EXIT、CYCLE)。特别地,作者会强调现代Fortran中鼓励使用的结构化编程方式,例如`DO CONCURRENT`在并行计算中的应用潜力。 二、 模块化编程与高级特性:提升代码的可读性与可维护性 Fortran95引入的模块(Module)是本书的重点讲解内容之一。模块化编程是现代软件工程的核心思想,它允许开发者将相关的过程、变量和数据类型组织在一起,实现代码的封装和复用,极大地提高了代码的可读性、可维护性和可扩展性。 模块(Module): 详细阐述了模块的定义、接口、包含(CONTAINS)语句的使用,以及如何通过`USE`语句在程序中访问模块内的实体。读者将学会如何构建大型、复杂的Fortran应用程序。 过程(Procedures): 深入讲解了子程序(SUBROUTINE)和函数(FUNCTION)的定义、调用、参数传递(值传递与引用传递)以及递归调用。本书会强调函数在计算中的纯粹性原则。 数组处理: Fortran在数组处理方面一直表现出色。本书将系统介绍数组的定义、索引、切片,以及Fortran95/2003引入的强大的数组赋值和数组操作(Array Operations),例如数组的元素级运算(elemental operations)。`RESHAPE`、`PACK`、`UNPACK`等实用函数也会被详细讲解,让读者领略Fortran在处理大规模数据时的便捷性。 指针(Pointers): 指针是Fortran95引入的一项革命性特性,它赋予了程序动态管理内存的能力。本书会详细讲解指针的声明、赋值、解引用,以及指针与目标变量(TARGET)的概念。理解指针对于编写高效的动态数据结构(如链表、树)至关重要。 动态内存分配: 结合指针,本书会深入讲解动态内存分配(ALLOCATABLE)的概念。读者将学会如何根据程序运行时的需求动态地分配和释放内存,这对于处理未知大小的数据集或实现自适应算法非常有帮助。 三、 Fortran2003的革新:迈向更强大的编程范式 Fortran2003在Fortran95的基础上,进一步引入了一系列先进的编程特性,使其能够更好地适应现代软件开发的需求。 面向对象编程(Object-Oriented Programming - OOP): 这是Fortran2003最显著的进步之一。本书将清晰地解释面向对象编程的基本概念,如类(TYPE)、继承(EXTENDS)、多态性(POLYMORPHISM)和封装。读者将学习如何利用Fortran的类型(TYPE)定义对象,如何通过继承扩展现有类型,以及如何通过过程重载(PROCEDURE OVERLOAD)实现多态行为。这使得Fortran能够胜任更复杂的软件工程项目。 C语言互操作性(Interoperability with C): 随着C语言在系统编程和库开发中的广泛应用,Fortran与C的互操作性变得尤为重要。本书将详细介绍如何使用`ISO_C_BINDING`模块,实现Fortran与C之间数据类型、过程的无缝转换和调用。这为Fortran程序与其他语言编写的组件集成提供了强大的支持。 国际化支持: Fortran2003增强了对国际化字符集的支持,例如宽字符(WIDE CHAR)和对不同字符编码的兼容性。本书会简要介绍这些特性,帮助读者编写能够处理多语言文本的程序。 其他增强特性: 还会涉及Fortran2003的其他重要增强,如`ALLOCATABLE`数组作为过程返回值、`FLUSH`操作、对`DO CONCURRENT`的进一步完善等。 四、 实践导向:丰富的实例与算法讲解 理论知识的学习离不开实践的检验。本书的另一大特色是其丰富的、贴近实际应用的编程示例。从基础的数学运算到复杂的科学计算问题,每个概念的讲解都辅以精心设计的代码片段,供读者学习和模仿。 数值算法: 覆盖了线性代数(矩阵运算、求解线性方程组)、微分方程求解(欧拉法、龙格-库塔法)、数值积分、优化算法等经典数值计算方法。 数据处理与文件 I/O: 详细介绍了Fortran在文件读写方面的强大功能,包括顺序文件、直接存取文件和记录式文件。`READ`、`WRITE`、`OPEN`、`CLOSE`等语句的使用会进行深入讲解,并会介绍二进制文件读写和格式化读写。 并行计算初步: 鉴于Fortran在高性能计算领域的地位,本书也会对并行计算进行初步的介绍,可能会提及OpenMP等共享内存并行编程模型,以及`DO CONCURRENT`在自动并行化方面的作用。 五、 学习与进阶指导 本书不仅仅是一本语法手册,更是一本指导读者如何成为一名优秀的Fortran程序员的指南。 调试技巧: 提供了有效的调试技巧和方法,帮助读者快速定位和解决程序中的错误。 代码优化: 讲解了提升Fortran程序运行效率的常用技巧,包括循环优化、内存访问优化等。 学习路径建议: 为不同层次的读者提供了学习进阶的建议,帮助他们根据自身需求深入学习。 目标读者 本书适合以下读者群体: 计算机科学、物理学、化学、工程学等领域的学生和研究人员: 需要掌握Fortran进行科学计算和数据分析。 有其他编程语言基础,希望学习Fortran的程序员: 能够快速掌握Fortran的语法特性和编程范式。 希望深入了解Fortran95/2003新特性的Fortran开发者: 提升代码的现代化水平和开发效率。 从事高性能计算、数值模拟、科学可视化等工作的专业人士。 结语 《Fortran95/2003程序设计(第3版)》以其全面、深入、实用的内容,为您打开了通往现代Fortran编程艺术的大门。无论您是初学者还是有一定经验的开发者,本书都将成为您学习和掌握Fortran95/2003的得力助手。通过系统学习本书,您将能够编写出高效、可维护、面向未来的Fortran程序,在您的学术研究和工程实践中取得更大的成就。