1、内容提要FORTRAN语言是国内外在科学计算领域广泛使用的计算机编程语言,灵活使用FORTRAN语言进行程序设计对科学计算领域的编程人员来说是一项非常重要的基本技能,尤其是对气象领域的科研工作者。本书以FORTRAN90/95语言规范为蓝本,循序渐进、深入浅出、系统全面地讲解了从语法到问题编程求解的各个环节。主要包括:程序设计理论基础、FORTRAN语言程序设计基础篇、提高篇、应用篇等内容。本书是作者总结多年FORTRAN教学和编程的实践经验编写而成的,全书以浅显易懂的语言进行讲解,配有大量的图解、例题和程序实例等,力争让非计算机专业人员也能快速地理解和掌握编程的过程与精髓,具备能使用FORT
2、RAN语言进行熟练编程的基本技能。作为一本计算机语言类的教材,其主要的特点和创新之处在于:考虑到FORTRAN语言的应用领域气象专业特点,例子的选取上尽量与气象相关,并增加与气象业务处理相关的数据分析、并行计算、数值预报模式等内容;因此最大限度地丰富了教材内容,提高学生的学习兴趣,让学生切实领会本课程的重要性,从而使学生能系统、全面、快速地掌握FORTRAN语言程序设计方法。本书语言表达严谨、流畅、实例丰富,非常适合作为气象类等非计算机类专业本科生的学习教材,也可作为使用FORTRAN语言编程的科技工作者的参考书。序信息化是当今社会发展的大趋势,用信息化推动工业化是21世纪初我国的必然选择。随
3、着计算机技术的飞速发展,计算机已广泛应用于国民经济和人们社会生活的各个方面,它在社会发展中处的地位日益提高,并已成为国民经济与科学技术发展水平的一个重要衡量标志。众所周知,气象科学和技术的跨越式大发展得益于观测、通信和计算机技术的发展,如数值天气预报的水平的不断提高,目前的五天预报的水平与20年前两天预报的水平相当。信息技术应用在气象现代化建设的进程中正扮演着越来越重要的角色。FORTRAN语言是世界上最早出现的高级程序设计语言,它的诞生对程序设计语言的研究和发展产生了极其深刻而广泛的影响。FORTRAN语言已被广泛应用于数值分析、工程计算和科研等领域。在气象领域,FORTRAN语言的应用尤其
4、普遍,主要表现在:1)目前在业务上使用的主流数值预报模式均采用FORTRAN语言编写,如WRF、MM5等;2)已积累大量宝贵、经得起业务考验的FORTRAN语言程序资源,如各类分析工具与算法等。随着计算技术和大气数值模拟的发展,对我国的气象人才提出新的要求,更重视专业水平和编程设计能力培养,适合气象业务部门急需的复合设计人才。在新的时代背景下,如何培养气象类学生的FORTRAN语言程序设计能力和在气象上的应用正面临巨大的挑战。当然,FORTRAN语言本身具有顽强的生命力。在50多年的发展过程中,FORTRAN语言始终以积极的姿态吸收和借鉴先进的程序设计思想,其功能不断增强,版本不断更新,影响不
5、断扩大。更为重要的是,编者以适合我国气象专业人才培养目标为立足点,在深入调研的基础上,组织编写了重点培养大气科学计算能力的FORTRAN语言程序设计教程。突出表现在为气象类学生量身定做,如选取了与气象相关的问题作为程序例程。本教程循序渐进、由浅到深、以简单明了的方式把FORTRAN语言介绍给读者。全书内容丰富、体系结构严谨、概念清晰、易学易懂。特色与创新主要体现在:1)教材内容精心组织。针对非计算机专业学生学习程序设计的主要困难,增加了程序设计方法学方面的基础知识;2)教材内容以FORTRAN90/95语言规范为蓝本,并加大气象应用方面需要的FORTRAN语言内容,包括:二维数组、文件操作、面
6、向对象技术、并行计算和IMSL函数库等;3)结合我国气象学科培养人才的目标,增加FORTRAN在气象业务部门中应用方面的内容。总之,我坚信本教材的出版旨在规范FORTRAN语言教学,提高教学质量,深化教学改革,以期培养出更多满足气象发展需要的高素质复合型人才。前 言从所周知,尽管计算机技术及其应用的迅猛发展,但科学计算仍然是计算机最重要的应用之一。而FORTRAN语言是世界上最早出现的高级程序设计语言,诞生之初就是用于科学计算,包括数值分析、工程计算和科学研究等。在FORTRAN语言50多年的发展过程中,各个行业的工程师、科学家们编写出了经得起实践检验的大量高效的源程序。多年来的应用已表明:在
7、JAVA,C+大行其道的年代,FORTRAN语言仍以其规范,严谨、跨平台和高效等特点,在数值、科学和工程计算领域发挥着重要的作用,FORTRAN语言的强大的数值计算能力是世界公认的。其实FORTRAN语言的发展推动了其它程序设计语言的研究和发展;更重要的是,随着计算机科学技术的飞速发展,FORTRAN语言也不断得到完善和充实,从传统的FORTRAN 66,到结构化FORTRAN 77,再到具有现代气息的FORTRAN 90,FORTRAN 95以及最新的版本FORTRAN 2003。因此,FORTRAN语言始终以积极的姿态吸收和借鉴先进的程序设计思想,其功能不断增强,版本不断升级,影响不断扩大
8、;正受到越来越多的程序开发人员的欢迎。由于我国特定的地理位置、特殊的地形地貌和气候特征,导致我国是世界上气象灾害较重的国家之一。从1980年至2008年,全球88.5的灾害是气象灾害及其衍生灾害;自然灾害里面大概有72.5%的人员伤亡是跟气象灾害有关;气象灾害及其衍生灾害造成75的经济损失。因此,科学准确的数值天气预报就显得至关重要,有利于防灾减灾。所谓数值天气预报,就是在给定初始条件和边界条件的情况下,通过大型计算机作数值计算,求解描写天气演变过程的流体力学和热力学的方程组,预测未来一定时段的大气运动状态和天气现象的方法。其实,1948年的世界上第一台电子计算机ENIAC就是用于数值天气预报
9、计算的;气象始终是高性能计算最重要的应用领域。数值天气预报的核心是预报模式,是一个大型的程序;且主流的预报模式WRF、MM5等都是用FORTRAN语言编写的。编者在FORTRAN语言教学过程,发现没有一本适合我国气象专业进行大气科学计算编程方面的FORTRAN语言程序设计教程。主要的缺陷表现在:1)现有的FORTRAN语言方面的教材几乎是针对工科中的科学计算进行编写的且不够深入,而对气象学科方面的应用没有涉及,无法为气象类学生量身定做,进而导致无法提高学生的积极性。2)随着气象专业对科学计算要求的提高,越来越需要去设计高效和并行的算法,而FORTRAN95语言已支持并行计算和面向对象技术。而现
10、已出版的教材几乎没有涉及,而恰恰这两方面的发展是气象专业急需的。在编写教材时,编者对现有教材的不足之处进行总结,并吸收相关高级语言程序设计教材的优点,结合长期教学过程中积累的丰富教学经验,更为重要的是结合大气科学专业本科人才的培养目标,精心设计课程内容和内容组织方式,通过此教材的编写和教学,最终达到熟练掌握FORTRAN语言程序设计方法和技巧,培养学生的编程能力,达到气象业务部门对软件设计和开发的要求。体现在如下几个方面:1)教材内容精心组织,能让非计算机专业的学生更能系统、全面、快速地掌握FORTRAN语言程序设计方法,为今后的应用开发建立坚实的语言基础。2)在能力培养方面,更突出与气象专业
11、方面的结合,在教材实例的选取上要以气象的应用为背景。重点提高气象类学生的FORTRAN语言程序设计能力和在气象上的业务应用,有利于提高学生的学习积极性和主动性。3)增加了FORTRAN语言提高篇和应用篇。在提高篇部分增加面向对象技术、并行计算和IMSL函数库等;应用篇部分以气象应用为背景,增加了气象数据分析和处理、简单数值预报等内容。至此,本教材编写体现了目的主要目的:一方面学好FORTRAN语言能读懂和吸收现有业务系统的算法精髓;更重要的是,能结合各地的业务系统,进行必要的二次开发和设计;切实起到非计算机专业学生编程能力提升的作用。当然,本书可用作其他高等院校FORTRAN语言程序设计教材和
12、工程技术人才的参考书。本教材的编写是在南京信息工程大学计算机与软件学院薛胜军教授的主持下进行的。薛胜军、耿焕同老师负责对全书进行统稿和主审,耿焕同老师负责编写了第一、二、三、十五章和第十七章中的第三节;吴婷婷老师负责编写了第四、五、六、七章;孙菁老师负责编写了第八章和附录;宣文霞老师负责编写了第九、十一和十二章;王新芝老师负责编写了第十章和第十七章中的第一、二节;郑玉老师负责编写了第十三、十四和十五章。在成书过程,曾得到南京信息工程大学大气科学学院闵锦忠教授、南京大学计算机系陶先平老师的指导,也得到了其他许多老师无私的帮助,在此一并表示衷心感谢!限于编者水平有限,加上时间比较仓促,书中难免有错
13、误和不足之处,恳请专家和读者批评指正。编者2009年8月FORTRAN语言程序设计目 录第一篇 程序设计基础1第一章 程序设计方法学21.1程序设计方法学简介21.2结构化程序设计方法31.2.1概述31.2.2程序设计步骤41.2.3方法举例51.3面向对象程序设计方法51.3.1概述51.3.2程序设计步骤81.3.3方法举例8习题一10第二章 算法程序的关键112.1算法的含义及其特征112.1.1算法的含义112.1.2算法的特征112.2算法的表示112.2.1程序的三种基本结构122.2.2流程图及其表示122.2.3 N-S图及其表示132.3简单算法举例14习题二17第三章 程
14、序设计过程与FORTRAN语言开发环境183.1高级语言与编译器183.2程序设计过程183.3 FORTRAN语言开发环境203.3.1 PC机上FORTRAN程序开发环境203.3.2大型计算机上的FORTRAN程序开发环境273.4常见的程序调试方法与步骤29习题三34第二篇 FORTRAN语言程序设计基础篇35第四章 科学计算语言FORTRAN概述364.1 始于计算、终于计算364.2 FORTRAN语言发展364.3 FORTRAN 90/95语言源程序书写格式384.3.1 固定格式384.3.2 自由格式404.4 FORTRAN 90/95语言源程序的结构404.4.1程序构
15、造形式404.4.2语句及其顺序414.4.3空白与注释的作用42习题四43第五章 FORTRAN语言基础445.1 字符集与保留字445.2 基本数据类型455.3 常量465.3.1 数值型常量及其类型465.3.2 字符型常量475.3.3 逻辑型常量475.3.4 符号常量475.4 变量485.4.1 数值型变量及其类型485.4.2 字符型变量505.4.3逻辑型变量515.4.4 变量的初始化515.5 运算符与表达式535.5.1 运算符号535.5.2 算术运算符及其表达式535.5.3 关系运算符及其表达式555.5.4 逻辑运算符及其表达式565.6语句575.6.1 赋
16、值语句585.6.2 程序控制语句595.7 系统内部函数60习题五63第六章 顺序结构程序设计646.1表控输入、输出语句656.1.1 表控输入语句656.1.2表控输出语句666.2可控格式输入、输出语句676.2.1整数的有格式输入输出696.2.2 小数型实数的有格式输入输出706.2.3 指数型实数的有格式输入输出726.2.4 复数的有格式输入输出736.2.5 字符串的有格式输入输出746.2.6 逻辑值的有格式输入输出746.2.7 非重复编辑符746.2.8纵向走纸符控制756.3 程序举例77习题六80第七章 选择结构程序设计827.1 IF语句837.2 SELECT
17、CASE语句887.3 选择语句的嵌套917.4 程序举例93习题七98第八章 循环结构程序设计998.1 DO语句998.1.1带循环变量的DO循环格式998.1.2 DO循环的执行过程1018.1.3 DO循环的有关规定1018.2 DO WHILE语句1048.2.1 DO WHILE循环的格式1048.2.2 DO WHILE循环的执行过程1058.3循环流程控制语句1078.3.1 EXIT语句1078.3.2 CYCLE语句1098.4 无循环变量的DO语句1098.4.1无循环变量的DO语句格式1098.4.2无循环变量的DO语句的执行过程1098.5 循环语句的嵌套1108.5
18、.1 嵌套DO循环的执行过程1118.5.2嵌套DO循环的有关规定1128.6 几种循环形式的比较和关系1148.7 程序举例115习题八123第九章 数组1249.1 概述1249.2 数组的定义与引用1259.2.1 数组的定义1259.2.2 数组元素的引用1279.3数组的逻辑结构与存储结构1289.4 数组的输入输出1309.4.1 使用DO循环输入输出数组元素1319.4.2 用数组名或数组片段对数组进行输入和输出1329.4.3 用隐含的DO循环对数组进行输入和输出1339.5 给数组赋初值1349.5.1 使用DATA语句赋初值1349.5.2 使用数组赋值符赋初值1359.6
19、 动态数组1369.6.1动态数组的定义1369.6.2 ALLOCATE语句1369.6.3 DEALLOCATE语句1379.7 数组常用算法举例1399.7.1 求数组元素的累加和1399.7.2 求最大(小)值及其位置1409.7.3 查找1419.7.4 排序1449.7.5 插入1459.7.6 删除1479.7.7 矩阵运算1499.7.8 应用实例151习题九155第十章 子程序15710.1基本概念15710.2 外部子程序15710.2.1外部函数子程序15710.2.2外部子例行程序16010.3 实参和虚参之间的数据传递16210.3.1 变量作为虚参16210.3.2
20、 数组作为虚参16410.3.3 子程序名作为虚参17110.3.4 星号(*)作为虚参17310.3.5 变量的作用域17310.4 递归子程序17410.4.1递归的概念17410.4.2 递归子例行程序17410.4.3 递归函数17510.5 数据公用存储单元与数据块子程序17610.5.1公用语句(COMMON语句)17610.5.2 数据块子程序17810.6 内部子程序17910.6.1内部子程序的定义17910.6.2内部子程序的调用18010.7 子程序应用举例182习题十192第十一章 结构体与指针19411.1派生类型定义19411.2 结构体变量的定义与引用19511.
21、2.1结构体变量定义19511.2.2结构体成员的引用19611.3 结构体的初始化19611.3.1 定义结构体变量的同时初始化19611.3.2 使用赋值语句进行初始化19711.3.3 使用输入语句进行初始化19711.4 结构体数组19811.5 结构体应用实例20211.6 指针的概念和指针变量的定义20811.6.1指针的概念20811.6.2指针变量的定义20911.6.3 指针变量的使用20911.6.4悬空指针和无法访问的内存21311.7 指针与数组21311.7.1指向数组的指针21311.7.2指针数组21511.8 指针与链表21611.8.1 链表的概念21711.
22、8.2 建立链表21711.8.3 插入结点21911.8.4 删除结点222习题十一226第十二章 文件22712.1 FORTRAN 90/95文件概述22712.1.1文件与记录22812.1.2文件的存取方式22812.1.3文件的结构22912.1.4文件的定位22912.2文件操作语句23012.2.1文件打开(OPEN)语句23012.2.2文件关闭(CLOSE)语句23312.2.3文件输入输出(READ/WRITE)语句23312.3 其它文件操作23412.3.1查询文件状态(INQUIRE)语句23512.3.2反绕文件指针(REWIND)语句23612.3.3 指针回退
23、(BACKSPACE)语句23712.3.4 文件结束(ENDFILE)语句23712.3.5 EOF函数23712.4 文件的使用23712.4.1 有格式顺序文件23712.4.2有格式直接文件24012.4.3 无格式顺序文件24212.4.4 无格式直接文件24612.4.5 二进制顺序文件24812.4.6 二进制直接文件250习题十二256第三篇 FORTRAN语言程序设计提高篇257第十三章 FORTRAN模块与面向对象25813.1模块的定义25813.2模块的基本组成25913.2.1模块中的变量25913.2.2模块中的派生数据类型TYPE26112.2.3 模块的公有和私
24、有属性26313.3模块中的USE26413.4模块的重载性应用26713.4.1同名子程序的重载26713.4.2操作符重载26813.5模块的继承性应用271第十四章 并行程序设计27414.1并行程序设计的概念27414.2并行过程27514.2.1纯过程27514.2.2逐元过程27714.3 FORALL结构27914.4 MPI程序设计28314.4.1 MPI的定义28314.4.2 MPI安装配置说明28414.4.3 FORTRAN 90+MPI程序框架28914.5 简单MPI程序举例29014.5.1用MPI实现计时功能29014.5.2获取机器名和MPI版本号29114
25、.5.3进程间的数据传递292第十五章 FORTRAN数值计算库29515.1 IMSL国际数学和统计函数库29515.1.1 IMSL的定义29515.1.2 配置使用IMSL29515.2 IMSL应用举例29815.2.1矩阵运算29815.2.2 线性方程求解30015.2.3 非线性方程求解30115.2.4 微积分求解30615.2.5 插值与曲线近似310第四篇 FORTRAN语言程序设计应用篇315第十六章 数据处理与分析31616.1预备知识31616.1.1数据处理与分析基本概念31616.1.2数理统计基本概念31616.2一元线性回归分析31916.2.1问题定义与分析
26、步骤31916.2.2 程序实现32116.3多元线性回归分析32216.3.1问题定义与分析步骤32316.3.2程序实现32416.4逐步回归分析32816.4.1问题定义与分析步骤32816.4.2程序实现33016.5主成分分析33516.5.1问题定义与分析步骤33516.5.2程序实现336第十七章 FORTRAN语言程序设计在大气科学中的应用34317.1计算物理量34317.1.1预备知识34317.1.2计算步骤34417.1.3程序实现34417.2 建立时间权重系数场34717.2.1 预备知识34717.2.2 计算步骤34717.2.3 程序实现34817.3正压原始
27、数值预报模式的实现35117.3.1预备知识35117.3.2计算步骤35317.3.3 程序实现35417.2.3 绘图输出362附 录366附录A 标准的ASCII码表367附录B FORTRAN语言中的关键字368附录C FORTRAN语言常用语法提要369附录D 常用库函数377参考文献381-381-第一篇 程序设计基础第一章 程序设计方法学1.1程序设计方法学简介众所周知,随着科技的迅猛发展,越来越多的工作被程序控制着,如数值天气预报、现代工厂的自动化等。那究竟什么是程序?通俗来说,程序是用来控制计算机操作的代码。而程序设计目的是利用计算机对现实问题求解。其实,计算机科学家、图灵奖
28、获得者尼克劳斯威茨(Niklaus Wirth)教授对程序进行了经典定义:程序=算法+数据结构此公式对计算机科学的影响程度足以类似物理学中爱因斯坦的E=MC2,它展示出了程序的本质。随着软件产业的迅猛发展,程序与软件开发环境的关系越来越紧密,开发工具的选择对程序的开发效率有着非常大的影响,有时会获得事半功倍的效果。因此,对程序的定义进行了扩充:程序=算法+数据结构+开发环境本书重点讨论FORTRAN语言开发环境,并不侧重复杂的算法和数据结构,目的让同学们能用FORTRAN语言设计简单程序,建立起与计算机间的会话交流。程序设计方法学是探讨程序设计的理论和方法的学科。它起源于20世纪70年代,程序
29、设计方法学的发展、软件的发展以及编程语言的发展都存在密切的关系;通过对其研究,不断地提高编程人员的程序设计水平,问题求解规模和复杂性;反过来,程序设计的提高也推动着程序设计方法学这门学科的不断发展。通常来说,程序设计方法学的概念有狭义和广义之分。狭义的程序设计方法学是指传统的有关结构化程序设计的理论、方法和技术;广义的程序设计方法学概念包括了程序设计语言和程序设计的所有理论和方法。特别是在结构化程序设计的研究逐步衰退以后,程序设计方法学成为一个笼统的概念。但随着软件产业的快速发展,对程序设计方法提出了更高的要求,如设计过程简单化、代码跨平台化、代码重用化等;促使程序设计方法学成为一门学科;为此
30、,首先要弄清楚程序设汁方法学的基本研究目标。从学科定义来说,程序设计方法学的基本研究目标是通过对程序本质属性的研究来提高程序的效率,并保证程序的正确性。更通俗地说,程序设计方法学的最基本目标是通过对程序本质属性的研究,说明什么样的程序是一个“优秀”的程序,怎样才能设计出“优秀”的程序。一般的程序设计过程是借助某种编程语言对求解问题的计算机算法进行编程实现。其产出是软件产品(俗称程序),其功能是利用计算机求解问题,因此在程序设计时,最重要的是程序的正确性和程序的执行效率。程序的正确性和效率是由程序的结构和算法决定的,当然,也与程序的易读性、可维护性有密切的关系。程序设计的一般过程应包括:分析实际
31、问题并抽象,利用数学建模技术构建问题的数学模型,借助计算方法和数据模型构造合适数据结构,进而设计算法,最后借助计算机语言实现算法形成程序。程序设计方法大致经历如下主要阶段:手工作坊式、结构化、模块化、面向对象等程序设计阶段。下面以主流的结构化程序设计和面向对象程序设计为例,讲解它们的设计方法。1.2结构化程序设计方法1.2.1概述迪克斯特拉(E. W. Dijkstra)在1969年提出了结构化程序设计方法,是以模块化设计为中心,将待开发的软件系统划分为若干个相互独立的模块,这样使完成每一个模块的工作变得简单且明确,为设计一些较大的软件打下了良好的基础。由于模块相互独立,因此在设计其中一个模块
32、时,不会受到其它模块的牵连,因而可将原来较为复杂的问题化简为一系列简单模块的设计。模块的独立性还为扩充已有的系统、建立新系统带来了不少的方便,因为我们可以充分利用现有的模块作积木式的扩展。结构化程序的概念首先是从以往编程过程中无限制地使用转移语句而提出的。转移语句可以使程序的控制流程强制性地转向程序的任一处,在传统流程图中,用“很随意”的流程线来描述转移功能。如果一个程序中多处出现这种转移情况,将会导致程序流程无序可寻,程序结构杂乱无章,这样的程序是令人难以理解和接受的,并且容易出错。尤其是在实际软件产品的开发中,更多的追求是软件的可读性和可修改性,像这种结构和风格的程序是不允许出现的。为此提
33、出了程序的三种基本结构。程序的顺序、选择和循环三种控制流程,这就是结构化程序设计方法强调使用的三种基本结构。算法的实现过程是由一系列操作组成的,这些操作之间的执行次序就是程序的控制结构。1966年,计算机科学家Bohm和Jacopini证明了这样的事实:任何简单或复杂的算法都可以由顺序结构、选择结构和循环结构这三种基本结构组合而成。所以,这三种结构就被称为程序设计的三种基本结构。也是结构化程序设计必须采用的结构。结构化程序设计的基本思想是采用“自顶向下,逐步求精”的程序设计方法和“单入口单出口”的控制结构。自顶向下、逐步求精的程序设计方法从问题本身开始,经过逐步细化,将解决问题的步骤分解为由基
34、本程序结构模块组成的结构化程序框图;“单入口单出口”的思想认为一个复杂的程序,如果它仅是由顺序、选择和循环三种基本程序结构通过组合、嵌套构成,那么这个新构造的程序一定是一个单入口单出口的程序。据此就很容易编写出结构良好、易于调试的程序来。如何编写程序才算符合结构化程序设计方法呢?按照1974年DGries教授的分析,结构化程序设计可以归纳为以下八个方面:n 结构化程序设计是指导我们编写程序的一般方法。n 结构化程序设计是一种避免使用GOTO语句的程序设计。n 结构化程序设计是自顶向下逐步求精的程序设计。n 结构化程序设计把任意大而复杂的流程图转变为标准形式和少数基本而标准的控制逻辑结构(顺序、
35、选择、循环)。n 结构化程序设计是一种组织和编写程序的方法,利用它编写的程序容易理解和修改。n 结构化程序设计是控制复杂性的整个理论和训练方法。n 结构化程序的一个主要功能是使得正确性的证明容易实现。n 结构化程序设计将任何大规模的和复杂的流程图转换为一种标准形式,使它们能够用几种标注形式的控制结构通过重复和嵌套来表示。常用的结构化程序设计语言有:C语言、FORTRAN语言、Pascal语言和Basic语言等。更简单地说,结构化程序设计有以下特征:一、模块化(1)把一个较大的程序划分为若干个子程序,每一个子程序总是独立成为一个模块;(2)每一个模块又可继续划分为更小的子模块;(3)程序具有一种
36、层次结构。注:运用这种编程方法时,考虑问题必须先进行整体分析,避免想到哪里写到哪里。二、层次化(1)先设计第一层(即顶层)。然后步步深入,逐层细分,逐步求精,直到整个问题可用程序设计语言明确地描述出来为止。(2)步骤:先对问题进行仔细分析,确定其输入、输出数据,写出程序运行的主要过程和任务;然后从大的功能方面把一个问题的解决过程分成几个问题,每个子问题形成一个模块。(3)特点:先整体后局部,先抽象后具体。三、逐步求精逐步求精是对一个复杂问题,不是一步就编成一个可执行的程序,而是分步进行,具体如下:第一步编出的程序最为抽象;第二步编出的程序是把第一步所编的程序(如过程、函数等)细化,较为抽象;直
37、到最后,第n步编出的程序即为可执行的程序。所谓“抽象程序”是指程序所描述的解决问题的处理规则,是由那些“做什么”操作组成,而不涉及这些操作“怎样做”以及解决问题的对象具有什么结构,不涉及构造的每个局部细节。这一方法原理就是:对一个问题(或任务),程序人员应立足于全局,考虑如何解决这一问题的总体关系,而不涉及每个局部细节。在确保全局的正确性之后,再分别对每一局部进行考虑每个局部又将是一个问题或任务,因而这一方法是自顶而下的,同时也是逐步求精的。采用逐步求精的优点是:(1)便于构造程序。由这种方法产生的程序,其结构清晰、易读、易写、易理解、易调试、易维护;(2)适用于大任务、多人员设计,也便于软件
38、管理。逐步求精方法有多种具体做法,例如流程图方法、基于过程或函数的方法。1.2.2程序设计步骤程序设计步骤:(1)分析问题对要解决的问题,首先必须分析清楚范围、解的精度等。(2)建立数学模型列出所有已知量,找出题目的求解目标,在对实际问题进行分析之后,找出它的内在规律,就可以建立相应的数学模型。只有建立了模型的问题,才有可能利用计算机来解决。(3)选择算法建立数学模型后,还不能着手编程序,必须根据数据结构,选择解决问题的算法。一般选择算法要注意: 算法的逻辑结构尽可能简单; 算法所要求的存储量应尽可能少; 避免不必要的循环,减少算法的执行时间; 在满足题目条件要求下,使所需的计算量最小。(4)
39、编写程序:把整个程序看作一个整体,先全局后局部,自顶向下。如果某些子问题的算法相同而仅参数不同,可以用子程序来表示。(5)调试运行;(6)分析结果;(7)写出程序的文档。1.2.3方法举例【例1-1】输出2到N之间的素数(质数)。解:要求2到N之间的素数,程序要做的事就是从2开始依次找,判断是否是素数,若是则打印出来,否则继续往下找,直到N为止。第一步:通过分析问题,给出程序总体框架。 读入一个正整数N; 初始化循环变量i为2; 判断i与N间的关系。若i大于N,则转; 判断i是一个素数。若i是素数,则打印输出i; 取比i大的下一个数,并放入i中; 转; 程序结束。第二步:细化“i是否为素数”。
40、思路:若i是一个素数,则是返回为真,否则返回为假。依据素数的定义,除了1和本身之外不能被其他正整数整除的正整数为素数。进一步细化如下: 初始化循环变量k为2,素数标记flag为真; 判断k与i间的关系。若k大于等于i,则转; 判断i是否能被k整除。若能整除,则素数标记flag为假; 若素数标记flag为真,则取比k大的下一个数,并放入k中,转; 返回素数标记flag。第三步:补充完整程序。第四步:除了2之外,其实所有的素数都是奇数,因此可进行相应的程序优化。1.3面向对象程序设计方法1.3.1概述面向对象(Object-Oriented,OO)是当前计算机界关心的重点,它是90年代开始,软件开
41、发方法的主流。面向对象的概念和应用已超越了程序设计和软件开发,扩展到很宽的范围。如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。早期,面向对象是专指在程序设计中采用封装、继承、抽象等设计方法。可现在面向对象的思想已经涉及到软件开发的各个方面。如:面向对象的分析(OOA,Object-Oriented Analysis),面向对象的设计(OOD,Object-Oriented Design)、以及我们经常说的面向对象的编程实现(OOP,Object-Oriented Programming)。常用的面向对象程序设计语言有:C+语言、Java语言
42、、C#语言、Visual Basic语言和Delphi语言等。相对于结构化程序设计来讲,面向对象程序设计理论扩充了许多新的概念和术语。要想理解和掌握面向对象的理论,必须从最基本的概念入手,通过对最基本概念的掌握来真正认识面向对象方法的作用。一、对象面向对象程序设计中的对象具有两方面的含义,即在现实世界中的含义和在计算机世界中的含义。在现实世界中可以将任何客观存在的事物都看作一个对象,如一个人、一辆汽车、一棵树,甚至一个星球。一方面,对象与对象之间存在着一定的差异,如一棵树和一辆汽车是两个截然不同的物体;另一方面,对象与对象之间可能又存在某些相似性。如一辆白色的自行车和一辆红色的自行车,两者都是
43、自行车,具有相同的结构和工作原理,仅仅是颜色不同而已。对象既具有一些静态的特征,如一个人的体重、身高和年龄;还具有一些动态的特征,如一个人的说话或交友习惯等。另外,每一个对象都具有一个名字以区别其他对象,如学生张三和学生李四。在计算机世界中,对象(Object)是一个现实实体的抽象。一个对象可被认为是一个将数据(属性)和程序(方法)封装在一起的实体,这个程序产生该对象的动作或对它接收到的外界信号的反应,这些对象操作有时称为方法。对象是建立面向对象程序所依赖的基本单元。用更专业的话来说,所谓对象就是一种代码的实例。这种代码执行特定的功能,具有自包含或者封装的性质。在结构化程序设计中,变量可以看作
44、是简化了的对象。换句话说,变量是仅仅具有单一属性且不具有方法的对象,这里的单一属性便是变量的取值,变量名就是对象名。通过上面的分析,无论是现实世界中的对象还是计算机世界中的对象,它们具有如下共同的特征:(1)每个对象都有一个名字以区别其他对象。(2)每个对象都有一组状态用来描述它的某些特征。(3)对象通常包含一组操作,每个操作决定对象的一种功能或行为。在一个面向对象的系统中,对象是运行期的基本实体。它可以用来表示一个人或一个银行账户,一张数据表格。当一个程序运行时,对象与对象之间通过互发消息来相互作用。二、类类是构成面向对象程序设计的基础,它把数据和函数封装在起,是具有相同操作功能和相同数据格
45、式(属性)的对象抽象,它可以被看作抽象数据类型的具体实现。在程序设计语言中,数据类型本质上是抽象的。高级程序设计语言从位、字节和字中抽象出字符、整数和实数等基本数据类型,这使程序员比使用位等设计程序方便多了,因为整数、实数的抽象比位、字节的抽象更接近人类的应用。但是在实际应用中,程序设计语言中所提供的数据类型总是有限的。例如,在一般的编程语言中,没有矩阵、方程组、矢量等数据类型,也没有年龄、地址等数据类型。这些数据类型是人们应用抽象到一组对象上而得到的抽象数据类型。在程序中定义一个新类将导致产生一种新的数据类型,类的设计就是数据类型的设计。三、类与对象的关系简单来说,类是用户自定义的数据类型,是用来描述只有相同的属性和方法的对象的集合,它定义了该集合中每个对象所共有的属性和方法,对象是类的实例。例如,苹果是一个类,而放在桌上的那个苹果则是一个对象。对象和类的关系相当于一般的程序设计语言中变量和数据类型的关系。对象包含数据以及操作这些数据的代码。一个对象所包含的所有数据和代码可以通过类来构成一个用户定义的数据类型。事实上,对象就是类类型的变量。一旦定义了一个类,就可以创建这个类的多个对象,每个对象与一组数据相关,而这组数据的类型在类中定义。因此,一个类就是具有相同类型的对象的抽象。例如,芒果、苹果和桔子都是的水果类的对象。类是用户自定
版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。
Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1
陕公网安备 61072602000132号 违法和不良信息举报:0916-4228922