新書推薦:
《
我和抑郁症的3000天
》
售價:HK$
66.1
《
与骸骨交谈:我希望每一个真相都被发现
》
售價:HK$
76.2
《
人体使用手册3:自愈力的逻辑(全面解读身体面对疾病时的反应逻辑,学习更多有效的系列家庭按摩)
》
售價:HK$
61.6
《
素描简史:从文艺复兴到现代艺术
》
售價:HK$
436.8
《
智慧宫丛书028·神工智能 诸神与古代世界的神奇造物
》
售價:HK$
87.4
《
街头健身训练指南
》
售價:HK$
266.6
《
留学早规划
》
售價:HK$
76.2
《
文化的演化:民众动机正在重塑世界
》
售價:HK$
88.5
|
編輯推薦: |
本书介绍了Fortran语言基础知识,以及结构化程序设计思想,该设计思想使得大型Fortran程序的维护更易于实现。本书面向的读者是科学工程类学生,意在对他们进行相应领域的实践训练。本书是一本理想的Fortran语言资料。本书在讲述Fortran知识过程中,按适用于大型项目开发的模式来展开。书中强调了在代码编写之前贯穿始终的自顶向下详细设计过程的重要性,该设计技术将开发过程划分成相互独立实现的几个逻辑部分。 书中还强调了过程的使用,每个过程实现一个独立功能部分;强调了单元测试的重要性,单元测试发生在各个过程集成在一起构成整个产品之前。另外,也强调了在发布产品之前,用多种不同输入数据集对集成的产品进行充分测试的重要性,讲述了工程师在产业工程和类库中实际用到的Fortran语言相关知识。
|
內容簡介: |
本书介绍了Fortran语言基础知识,以及结构化程序设计思想,该设计思想使得大型Fortran程序的维护更易于实现。本书在讲述Fortran知识过程中,按适用于大型项目开发的模式来展开。本书的主要内容有:计算机和Fortran语言简介,Fortran基础知识,程序设计与分支结构,循环和字符操作,基本的IO概念,数组,过程,数组的高级特性,过程的附加特性,字符变量的更多特性,附加的内置数据类型,派生数据类型,过程和模块的高级特性,高级IO概念,指针和动态数据结构,Fortran面向对象程序设计,优化数组和并行计算,冗余、废弃以及已被删除的Fortran特性。本书是一本理想的Fortran语言资料。
|
關於作者: |
作 者 介 绍
SHEPHEN J. CHAPMAN,1975年在路易斯安那州立大学获电子工程专业学士学位,1979年在中佛罗里达大学获电子工程专业硕士学位,后在水稻田大学进行了进一步的研究升造。Chapman先生现在负责澳大利亚墨尔本的澳大利亚BAE系统的系统模型化和可操作分析工作,他是一名海军舰队反导弹攻击模型的开发团队领导人。该模型的代码已经编写了十年以上,含有超过40万条的MATLAB代码,他具有极其丰富的将MATLAB应用于实际问题的经验。Chapman先生是电力与电子工程协会(以及几个子协会)的资深会员,也是计算机械协会和(澳大利亚)工程研究会的成员。
|
目錄:
|
目录
译者的话
前言
第1章 计算机和Fortran语言简介1
1.1 计算机2
1.2 计算机中数据的表示3
1.3 计算机语言9
1.4 Fortran语言发展史9
1.5 Fortran的演进11
1.6 小结14
第2章 Fortran基础知识17
2.1 介绍17
2.2 Fortran字符集17
2.3 Fortran语句结构18
2.4 Fortran程序结构19
2.5 常数与变量21
2.6 赋值语句和算术运算27
2.7 内置函数35
2.8 表控输入和输出语句37
2.9 变量初始化41
2.10 IMPLICIT NONE语句42
2.11 程序举例43
2.12 调试Fortran程序49
2.13 小结50
第3章 程序设计与分支结构61
3.1 自顶向下设计技术入门61
3.2 伪代码和流程图的使用65
3.3 逻辑常数、变量和运算符65
3.4 控制结构:分支71
3.5 有关调试Fortran程序的问题89
3.6 小结90
第4章 循环和字符操作96
4.1 控制结构:循环96
4.2 字符赋值和字符操作118
4.3 Fortran循环的调试129
4.4 小结130
第5章 基本的IO概念139
5.1 格式和格式化WRITE语句139
5.2 输出设备140
5.3 格式描述符142
5.4 格式化READ语句159
5.5 文件及文件处理介绍164
5.6 小结180
第6章 数组191
6.1 声明数组192
6.2 在Fortran语句中使用数组元素193
6.3 在Fortran语句中使用整个数组和部分数组203
6.4 输入和输出206
6.5 程序举例211
6.6 什么时候该用数组?224
6.7 小结225
第7章 过程231
7.1 子例程232
7.2 用模块共享数据249
7.3 模块过程255
7.4 Fortran函数257
7.5 过程作为参数传递给其他过程263
7.6 小结267
第8章 数组的高级特性281
8.1 二维数组281
8.2 多维数组290
8.3 对数组使用Fortran内置函数293
8.4 加掩码的数组赋值:WHERE结构295
8.5 FORALL结构297
8.6 可分配数组299
8.7 小结306
第9章 过程的附加特性316
9.1 给子例程和函数传递多维数组316
9.2 SAVE属性和语句325
9.3 过程中的可分配数组329
9.4 过程中的自动数组329
9.5 在过程中作为形参的可分配数组335
9.6 纯过程和逐元过程338
9.7 内部过程340
9.8 子模块341
9.9 小结347
第10章 字符变量的更多特性356
10.1 字符比较操作357
10.2 内置字符函数360
10.3 把字符变量传入子例程或函数363
10.4 可变长字符函数367
10.5 内部文件369
10.6 例题369
10.7 小结374
第11章 附加的内置数据类型379
11.1 REAL数据类型的可选择类别379
11.2 INTEGER数据类型的可选长度398
11.3 CHARACTER数据类型的可选类别399
11.4 COMPLEX数据类型400
11.5 小结407
第12章 派生数据类型411
12.1 派生数据类型简介411
12.2 派生数据类型的使用412
12.3 派生数据类型的输入与输出413
12.4 在模块中声明派生数据类型414
12.5 从函数返回派生类型421
12.6 派生数据类型的动态内存分配425
12.7 参数化派生数据类型425
12.8 类型扩展426
12.9 类型绑定过程427
12.10 ASSOCIATE结构431
12.11 小结432
第13章 过程和模块的高级特性438
13.1 作用范围和作用域438
13.2 块443
13.3 递归过程444
13.4 关键字参数和可选参数446
13.5 过程接口和接口块450
13.6 通用过程454
13.7 用用户自定义操作符和赋值符扩展Fortran464
13.8 绑定赋值符和操作符474
13.9 限制对模块内容的访问474
13.10 USE语句的高级选项477
13.11 内置模块480
13.12 访问命令行参数和环境变量480
13.13 VOLATILE属性和语句482
13.14 小结483
第14章 高级IO概念495
14.1 更多格式描述符495
14.2 表式输入的默认值503
14.3 Fortran IO语句详述504
14.4 IO名称列表522
14.5 未格式化文件524
14.6 直接访问文件526
14.7 流访问模式529
14.8 派生数据类型的非默认IO530
14.9 异步IO536
14.10 访问特定处理器相关的IO系统信息538
14.11 小结539
第15章 指针和动态数据结构546
15.1 指针和目标变量547
15.2 在赋值语句中使用指针551
15.3 使用数组指针553
15.4 使用指针的动态内存分配554
15.5 指针当作派生数据类型的元素557
15.6 指针数组567
15.7 在过程中使用指针569
15.8 过程指针573
15.9 二叉树结构576
15.10 小结591
第16章 Fortran面向对象程序设计597
16.1 面向对象程序设计介绍598
16.2 Fortran类的结构602
16.3 CLASS保留字602
16.4 在Fortran中实现类和对象604
16.5 第一个例子:timer类606
16.6 方法的分类611
16.7 对类成员的访问控制617
16.8 析构函数618
16.9 继承性和多态性621
16.10 禁止在子类中重载方法633
16.11 抽象类633
16.12 小结649
第17章 优化数组和并行计算654
17.1 Fortran中优化数组的并行处理655
17.2 创建简单并行程序655
17.3 优化数组657
17.4 映像间的同步658
17.5 例题:排序大数据集合664
17.6 动态优化数组和派生数据类型669
17.7 优化数组传给过程670
17.8 临界区671
17.9 并行程序中的极大危险671
17.10 小结675
第18章 冗余、废弃以及已被删除的Fortran特性680
18.1 Fortran 90前的字符限制680
18.2 已被废除的源码格式681
18.3 冗余数据类型682
18.4 过时、废弃、和或不必要的说明语句682
18.5 共享内存空间:COMMON和EQUIVALENCE685
18.6 不必要的子程序特性690
18.7 其他执行控制特性696
18.8 被废除的分支和循环结构698
18.9 IO语句的冗余特性702
18.10 小结702
附录A ASCII字符集708
附录B FortranC交互操作709
附录C Fortran内置过程717
附录D Fortran程序中的语句序列758
附录E 术语表760
附录F 各章测验的答案782
作者介绍801
|
內容試閱:
|
译 者 的 话 Fortran起源于1954年,是最早出现的高级程序设计语言之一,它主要适合用来解决科学计算方面的问题。今天即使是已经进入到面向对象编程时代,Fortran语言仍然被专注于数据计算的科学家和工程师广泛使用。本书为第四版,相较于第三版以Fortran 952003为蓝本,这次主要讲解Fortran 2008,并在第17章增加了并行处理和优化数组两个Fortran 2008中的全新内容。但是原书的结构与风格依然未变:章节学习目标明确,自上而下的程序设计方法贯穿始终,理论阐述翔实,例题讲解清晰,代码测试完整,验证学习效果的测验问题和练习内容丰富。所有这些特性都是作者为方便读者自学、掌握Fortran语言程序设计而精心设计的,这也成为用Fortran语言编程的人们乐于购买本书的亮点。
本书不仅是Fortran语言初学者的入门必选,也是熟练掌握Fortran语言人员的首选参考书。本书第1~7章,从计算机基本结构出发,讲述了计算机中数据的表示。Fortran语言的发展历史,以及编程良好习惯如何培养,详尽介绍了Fortran语言基本知识。第8~15章介绍了Fortran语言高级特性,为初学者掌握和用好Fortran语言提供了强有力的支持。第16章介绍了Fortran语言面向对象编程方法,第17章介绍了Fortran 2008中的并行处理和优化数组,第18章逐一简述已经宣布废弃的那些Fortran旧特性,为遗留的旧版Fortran程序继续使用提供支持,这些新知识和旧特性是熟练使用Fortran编程人员最关心的内容。
本书自始至终强调树立实际工程编程思想,致力于培养读者编写良好的可读性、维护性和完整性的程序的能力。书中有大量的工程实例,在每章后面的习题中配有很多练习,其中不少练习涉及各个学科的实际工程计算。例如,相对论、电子工程、万有引力、逃逸速度、双曲余弦、振动周期、无线电接收机等的编程。这极利于读者明白所学知识在实际工程中的运用,掌握所学知识,增加学习兴趣。
本书主要译者有刘博雅(第1~4章)、林慕清(第5~7章)、李浩亮(第8~10章)、王志强(第13~15章)、张克君(第16章)、李援南(第17章)、章小莉(第18章、附录及其他内容),还得到了张悦、钱榕、李伟、杨志成、霍刚、周志全、曹长宏、章晓盛等人的大力支持。最后章小莉对全部译稿进行了审阅。在此对大家的精诚合作表示深深的感谢!
我们希望这本新修订的第四版图书能为用计算机处理数据计算、完成科学研究的读者们带去更多的帮助。限于时间和水平,书中难免存在不足之处,敬请读者批评指正。
译 者
前 言 本书第一版是我编写和维护国防和地球物理领域的大型Fortran程序的产物。在工作期间,很显然,成功编写大型程序取决于策略和技术,那时候对一个年轻的工程师来说,维护Fortran程序与在学校学习Fortran程序的编写完全不同。一旦程序投入服务,维护和修改大型程序绝对需要高得令人难以置信的费用。因为编程的人容易理解程序,而修改程序的人相较于原程序员来说就很难明白它们的内容。我编写本书的目标是,既传授Fortran语言的基础知识,也很好地讲解编写和维护程序的技术。另外,还希望本书对今后打算从事编程工作的学生有参考价值。
在学生学习程序设计过程的早期,要教会他们花更多的精力来保证程序的可维护性是非常难的。因为课堂上的编程任务都很简单,一个人足以在短时间内完成编写任务,且这些程序也不需要多年的维护。正因为项目简单,一个学生只要参加了课程学习,就能完成所有编程任务,通过考试,即使不学实际工作中参加大型编程项目时需要的习惯,常常也能胜任从编写到产生代码整个过程的任务。
本书一开始介绍编写的Fortran程序就适用于大型项目开发,这样可以强调在编代码前认真进行设计的重要性。其中设计过程使用的技术是自顶向下设计,即把大型程序分解为可以单独实现的若干个逻辑部分。书中还强调完成单个逻辑部分编写过程的重要性和在开始将各个独立部分集成为最终产品的过程开始之前单元测试的重要性。
另外,本书讲述的Fortran程序,工程师和科学家在实际工作与研究中都会遇到。所有编程环境中一个问题是很常见的:必须维护大量遗留代码。在特殊场合的遗留代码起初是用Fortran Ⅳ(或甚至更早版本!)编写的,今天这些程序的结构已不再被使用。例如,这些代码可以通过使用IF语句来完成,或计算转到或赋值转到GO TO语句。第18章将介绍Fortran语言中那些不再被使用,但是在遗留代码中还是会遇到的旧特性。同时也强调在新程序中应该永不再用这些特性,并教会学生在遇到这些特性时如何处理它们。
第四版的变化
本书第四版直接基于Fortran 952003(适用科学家和工程师) 的第三版而编写,保留了上一版的编写结构,但全书都穿插Fortran 2008的新知识(以及Fortran 2015标准建议的相关内容),可喜的是,Fortran起源于1954年,至今还生机勃勃。
从逻辑上来说,Fortran 2008大部分新增技术是对Fortran 2003的扩展,各章的相应地方都介绍了这些新技术。但是,并行处理和优化数组为全新内容,第17章专门对它们有介绍。
绝大多数Fortran语言课程授课时间限定为三个月或一个学期,学生从中掌握Fortran语言的基础知识和编程基本概念。这些课程的内容为本书第1~7章,如果有时间的话,可选学第8章、第9章。给学生打下良好基础,以便他们在实践中更好地使用Fortran语言。
有能力的学生、工作中的科学家和工程师会需要第11~15章的COMPLEX(复数)、派生数据类型和指针知识。工作中的科学家和工程师几乎肯定需要第18章中陈旧、丰富和已删除的Fortran特性,这些知识很少在课堂中传授。但是本书包含了这些知识,目的在于实际中用Fortran语言解决真实问题时,本书依然有参考价值。
本书特点
本书设计了很多特性来强调如何用恰当的方法编写可靠性高的Fortran程序。这些特性对于首次学习Fortran的学生和实际工程中的人们都很有用。它们是:
1.现代技术
本书在例题中始终用的是最新特性。许多Fortran 2008现代特性中不仅一直保留着Fortran语言旧版本的特性,还有了可取代它们的新特性。在这种情况下,例题中用的是现代新技术。旧技术的使用大部分被移到第18章中讲述,在那里强调了它们是旧版本的不受欢迎的。保留的旧版本Fortran特性有:使用模块替代COMMON(通用)块来实现数据共享,DO END DO循环替代DOCONTINUE循环,内部过程替代语句函数、CASE结构替代计算转向GOTO语句。
2.强制类型
全书一直使用IMPLICIT NONE语句来强制每个程序中的每个变量类型要显式声明,以便编译时捕捉到常见的打字错误。与程序中每个变量显式声明一起,书中强调创建数据字典的重要性。该字典描述程序中每个变量的作用。
3.自顶向下设计方法
本书第3章介绍了自顶向下设计方法,并且随后的其他章节一直在用该方法。这一方法鼓励学生在开始编代码前,仔细思考,对程序进行好的设计。强调明确定义问题的重要性,以便在开始任何其他工作之前准备好需要的输入和输出数据。一旦问题被恰当定义,紧接着就教授学生逐步细化问题,即将问题分解得更小,把单个子任务设计为子例程或函数,最后告诉学生每个阶段中测试的重要性,包括关于构建程序的单元测试和最终产品的集成测试。书中给出了几个程序示例说明如何进行测试,这些程序可以在一些数据集上正确运行,而在另一数据集上运行时却可能失败。
通过学习本书可以知道标准的程序设计过程是:
(1)清晰地说明要解决的问题。
(2)定义程序需要的输入和将产生的输出。
(3)描述打算用于程序的算法。这一步涉及自顶向下、逐步分解、伪代码或流程图。
(4)把算法转换成Fortran程序。
(5)测试程序。这一步包括对于特定子例程的单元测试,也包括用许多不同数据完成最终程序的集成测试。
4.过程
本书强调用子例程和函数来实现在逻辑上大任务分解出来的子任务,并利用过程隐藏数据,还强调要重视在将子任务集成为最后的程序之前的单元测试。另外,书中还介绍了使用过程时常见的错误,以及怎样避免这些错误(参数类型不匹配、数组长度不匹配等)。书中强调对过程要用好显式接口,因为它使得在对Fortran编译时,编译器能尽可能多地捕捉常见的编程错误。
5.简版和标准版Fortran
本书强调编写简洁Fortran代码的重要性,因为这样才可以很容易地实现代码在不同类型计算机之间的移植。书中还教授学生在自己的程序中一定要用标准版的Fortran语句,以便代码达到最大限度的简洁。另外,书中还教授多用像SELECTED_REAL_KIND函数这样的特性,以避免在不同机器上运行程序时,发生数据精度和类别不同的问题。
本书也教授学生不要在少数特殊的过程中用与机器型号有关的代码(如调用与机器系统有关的类库文件),以免在移植程序时不得不重写这些代码。
6.良好的编程习惯
当介绍良好编程习惯时,便于对学生强调它们,这些知识点被突出表示,以示强调这是好的编程做法。另外,每章介绍的良好的编程习惯在每章最后都进行了小结。下面举例说明书中如何标示良好的编程习惯知识点。
良好的编程习惯
书写代码时,请保证用多个空格来缩进IF语句的语句体,从而使代码的可读性好。
7.编程警示
书中对编程时需要注意的事项进行了突出表示,以提示要避免它们的发生。下面举例说明书中如何标示编程警示知识点。
编程警示
要关注整型数运算,因为整型数除法常常会得出难以预料的结果。
8.指针和动态数据结构
第15章详细讨论了Fortran指针,包括指针使用不正确可能带来的问题。如内存不足,指针指向的空间将得不到分配。书中给出了很多动态数据结构示例,包括链表和二叉树。
第16章讨论了Fortran的对象和面向对象编程,包括涉及程序多态性的动态指针的使用。
9.注意事项
本书中有很多的注意事项,这些注意事项列出的是学生可能感兴趣的其他信息。某些注意事项实质上展示了Fortran的发展史。例如,第1章有一条注意事项描述了IBM Model 704,这是第一台运行Fortran的机器。另有一条注意事项是对书本知识的补充。再如,第9章的一条注意事项回顾和概述了Fortran中数组的多处不同。
10.知识点完整参考资料
最后,书中给出了现代Fortran语言的完整参考资料,以便读者在实际应用中能快速查找需要的相关知识点。这里把特别关注点列入在特性表中,很容易查阅,其中包括晦涩和难于理解的特性,如通过地址引用传递过程名,在表控输入语句中的默认值等。
本书教学特点
为了便于学生理解书中所讲内容,本书有如下设计特点:
每章开头列出了本章学习目标。共有27个测验分布于全书之中,相应答案在附录F。这些测验能帮助读者自我检验学习效果。另外,有大约360个练习出现在各章节之后,全部练习答案在图书网站可以找到,当然练习答案在教师参考手册上也有包含。各章中良好的编程习惯均加粗强调,常见的错误在编程警示中给出了提醒,各章末尾也对良好的编程习惯和Fortran语句和结构进行了小结,最后附录C给出了Fortran内置过程的详细说明,附录E列出了全部的术语。
本书有教师参考手册,其中含有各章练习答案,教师也可在该图书网站的教师参考手册中找到答案,书中全部例题源代码和相关的补充材料也可以从图书网站上下载获得。
关于Fortran编译器的注意事项
在写作本书的时候,我用过两种Fortran编译器:Intel Visual Fortran Version 16.0和GNU G95 Fortran编译器。两个编译器对Fortran 2008的完整功能基本实现,仅有非常少的几项功能不支持,同时这两种编译器对Fortran 2015未来的实现特性的建议给予了关注。
在此,我对潜在的用户强烈推荐该两编译器,因为Intel Fortran的优点是很好地集成了调试环境,但其缺点是价格偏高。G95编译器则可以免费使用,但其调试功能相对难用。
用户最后的注意事项
无论我多么努力地审校本书,书中还是会存在一些印刷和打印错误,如果读者发现这些错误,请通过出版社告诉我,我将在重印和改版时努力修正它们。对于你的帮助与支持我深表感谢。
在本书网站上我将提供完整的勘误表和错误改正说明,网址是www.mhhe.com chapman4e,如果需要获取修订信息和最新更新请查看该网站。
致谢
在此我对Raghu Srinivasan和McGraw-Hill教育团队为本次图书修订所做的工作深表感谢。另外,我要感谢我的妻子Rosa和女儿Devorah,她们在本次图书修订过程中给予了我大力支持(在前一版的图书修订中,我也对其他7个孩子给予了感谢,但是这次他们均已长大成人)。
Stephen J. Chapman
Melbourne, Victoria, Australia
|
|