FORTRAN95第01章-概述.ppt_第1页
FORTRAN95第01章-概述.ppt_第2页
FORTRAN95第01章-概述.ppt_第3页
FORTRAN95第01章-概述.ppt_第4页
FORTRAN95第01章-概述.ppt_第5页
免费预览已结束,剩余74页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1,FORTRAN95程序设计与数据结构基础,计算机学院基础教学部2007年1月,2,课程的主要内容,FORTRAN95程序设计语言的基础知识FORTRAN95程序的基本结构和设计方法实用软件开发技术和方法数据结构的基础知识,3,课程安排,学时安排:讲课44学时上机实践20学时考核方法:期末一次性考试,笔试+上机,笔试占80,上机占20,平时作业少于2/3无考试资格.,4,第1章FORTRAN95简单程序设计,本章主要内容:Fortran语言的基本概念Fortran95语言的用途程序的书写格式Fortran95基本数据类型的表示方法Fortran95表达式的书写方法Fortran95赋值语句的用法Fortran95简单的输入与输出语句的用法初步学会简单Fortran95程序的编写,5,1.1程序设计概述1.1.1程序设计语言程序设计就是编写程序计算机通过执行程序完成指定任务的编写程序有几种方法:用机器语言编写程序用汇编语言编写程序用高级语言编写程序,6,用高级语言编写程序:高级语言是接近自然语言和数学语言的编程语言,通常说的“程序设计语言”所指的就是这类语言。,7,用户采用高级语言编程,上机的过程如图1-1所示.,编写源程序,编辑输入,编译,产生目标程序,装配连接形成可执行程序,执行程序(如需要可输入数据),输出结果,图1-1采用高级语言编程上机过程,8,用高级语言编写的程序通常称为源程序。计算机不能直接识别和执行源程序,必须把它们先翻译成机器指令程序,称“目标程序”,然后再由计算机执行目标程序。这个“翻译”工作是由一个称为“编译程序”的软件完成的,不同的高级语言有不同的编译程序。用高级语言编程解决实际问题,前提是:在计算机中安装该高级语言的编译程序。,9,其中“装配连接”是由“连接程序”完成的,其任务是将若干个目标程序(包括库函数)连接在一起,并执行重定位操作及自动的库文件检索,然后形成可执行的程序。连接好的程序保存在外存,随时可装入主存中运行。,10,1.1.2程序设计过程一、程序设计步骤1确定所要解决的问题及应达到的要求2分析问题构造模型根据实际问题确定物理模型,再用数学语言描述它,即列出解题的数学公式或方程式,也就是建立数学模型。3选择计算方法4确定算法并绘制流程图5编写程序6程序调试7正式运行,11,二、算法所谓算法指为在有限步内解决一个具体问题而规定的意义明确的步骤。是为计算机设计的执行步骤。,12,一个算法应具有以下基本特征:(1)有穷性一个算法必须在执行有限步之后结束。(2)确定性算法的每一步骤,其顺序和内容都必须有确切的定义,不能有模棱两可的解释和二义性。(3)有效性也称为可行性,指算法的每一步都能使算法的执行者(人或机器)明确其含义并能去实现所规定的操作。(4)有零个或多个输入输入是指执行算法时需要从外界取得必要的初始数据。有的算法表面上无输入(即零个输入),但实际上算法执行所需的初值已被嵌入在算法中了。(5)有一个或多个输出每个算法应至少有一个输出步骤,告知解决问题的结果。评价一个算法通常还考虑以下标准:执行算法所需时间的长短、执行算法所需存储空间,即所需计算机存容量的大小。除此之外,算法的正确性、最佳性和精确性等也是评价算法的标准。,13,三、流程图上述算法可以用文字表达,也可以用流程图来表示。有时用流程图表示算法更有利于编写程序,可以减少编程过程中的错误。圆角矩形:开始和结束矩形:处理菱形:判别的条件平行四边形:输入或输出带箭头的线:执行的先后次序,14,1.2FORTRAN语言简介1.2.1FORTRAN语言简史FORTRAN语言是一种在国际上广泛流行的适用于科技计算的高级程序设计语言。FORTRAN的名字来自英文的FormulaTranslator,即数学公式翻译器的意思。FORTRAN语言最初是在1954年由美国IBM公司提出的。1966年制定了FORTRAN语言的统一标准,这套标准后来被称为FORTRAN66,15,1977年又制定了新的FORTRAN语言标准,并在1978年由美国国家标准协会(ANSI)正式公布,称为FORTRAN771992年正式由国际标准化组织ISO公布了新的标准,称为FORTRAN901997年国际标准化组织ISO再次公布了FORTRAN语言的新标准,这就是FORTRAN95。主要加强了FORTRAN在高性能并行运算方面的支持。此外,FORTRAN2003的标准正在制定中,不久的将来会正式发布。新标准将增强对面向对象程序设计的支持。,16,1.2.2FORTRAN字符集“字符集”是指编写程序时所能使用的全部字符和符号。FORTRAN语言的字符集包括的字符及符号有:26个英文字母:AZ及az(在FORTRAN程序中英文字母不分大小写)数字:0922个特殊符号:=+-*/(),。!“%?¥_其中的特殊符号除了做为数学运算符号外,还有其他用法,17,1.2.3FORTRAN程序的组成一、FORTRAN程序结构是一种段式结构(或称块结构)。每个FORTRAN程序由一个主程序段和若干个子程序段及模块组成。主程序段有且仅有一个,子程序段和模块根据需要可用零个或多个。每个程序段可以独立编写,实现不同的功能,程序运行总是从主程序段开始。每个程序段都有自己的段头语句,但主程序段的段头语句可以省略。,18,二、FORTRAN语句每个程序段和模块由若干条FORTRAN语句组成,这些语句又分为可执行语句和非执行语句。可执行语句在程序执行时使计算机产生某种特定的操作,如赋值、输入输出、控制转移等。非执行语句只是用于将某些信息(如变量的类型、数组的维数及大小、数据的输入输出格式等)通知编译程序,使编译程序在编译源程序时按这些信息要求进行处理。程序执行时非执行语句不会使计算机产生任何操作。,19,FORTRAN语句在使用时有基本的顺序要求,不能随意放置,表1-1给出了这些语句在程序中的顺序要求,20,21,其中:(1)PROGRAM、FUNCTION、SUBROUTINE、MODULE、BLOCKDATA均为程序段的段头语句,只能出现在每个程序段开始的位置上;(2)END语句是程序段的结束语句,只能出现在各程序段的最后(3)USE语句只能出现在段头语之后,其他语句之前;(4)FORMAT语句可以出现在USE语句和结束语句之间的任何位置上;(5)IMPLICITNONE语句在USE语句之后,在其他说明语句之前出现;(6)PARAMETER语句可出现在DATA语句和可执行语句之前,IMPLICITNONE语句之后的任何位置上;(7)其他说明语句应出现在DATA语句和可执行语句之前;(8)DATA语句可在说明语句之后,END语句之前的任何位置上(9)注释行不是FORTRAN语句,仅为程序设计者提供了一种注释说明的手段,可以写在程序的任何位置上。,22,1.2.4FORTRAN程序书写格式一、固定格式固定格式是一种FORTRAN程序的旧式写法,采用这种写法的程序代码文件扩展名为“.FOR”或“.F”。在“固定格式”中,每一行至多写一个语句,且最多可写72个有效字符:第1个字符,如果是字母C或*号,说明此行为注释行,仅起说明作用,不会被编译;第15个字符,如果是数字,则表示是该行的代号,称为语句标号,如不需要则只能是空格或全0;第6个字符,如果是数字“0”或空格以外的任何学符,表示该行是上一行的继续行;第772个字符,是FORTRAN语句的书写区域;第73个字符及之后的字符将被忽略,有的编译程序会给出错误提示。,23,二、自由格式(目前最流行的书写格式)自由格式是FORTRAN90之后的新写法,取消了许多限制,没有规定每行的第几个字符有什么作用:每行最多可写132个字符;叹号“!”后的内容都是注释;如果需要写语句标号,则标号可以紧挨着写在语句第1个字符前面;一行字符的最后如果是符号“”隔开。用自由格式书写的FORTRAN程序文件,其扩展名为“.F90”。以下是用自由格式书写的FORTRAN程序实例。,24,!FreeFormatprogrammain!已知a,b,c,求一元二次方程的根a=1.0;b=3.0;c=-5.6!一行书写多个语句x1=(-b+sqrt(b*b-4.0*a*c)/类型名用于说明变量名表中变量的类型,可以是INTEGER、REAL、COMPLEX、CHARACTER、LGICAL(KIND=字节数)表示变量占用内存的字节数可以省略此项,不同类型有不同的缺省长度。,44,整型变量的说明INTEGER(KIND=4):X1,Y1说明两个整型变量X1、Y1,其中KIND=4表示这两个变量分别用4个字节存放整数。INTEGER:X1,Y1没有说明变量的长度,默认为一个整型变量占4个字节INTEGER(KIND=2):A,B,C说明A,B,C为三个整型变量,各占2个字节的。,45,实型变量的说明REAL:M1,M2REAL(KIND=4):M1,M2REAL(KIND=8):M1,M2这三个语句中,前两个语句功能相同,说明M1、M2为两个各占用4个字节的单精度实型变量;第三个语句说明M1、M2是各占用8个字节的双精度实型变量。,46,复型变量的说明COMPLEX:A,B,CCOMPLEX(KIND=4):A,B,CCOMPLEX(KIND=8):A,B,C其中前两个语句功能相同,说明A,B,C为三个单精度复型;第三个语句说明三个变量均为双精度复型。,47,逻辑型变量的说明LOGICAL:A,BLOGICAL(KIND=2):A,BLOGICAL(KIND=4):A,B逻辑型变量虽然同样可以说明它所占用内存空间大小,但实际意义不大,通常不需用KIND去设置。,48,字符型变量的说明字符型变量用来保存一个字符或一个字符串。其说明方法与其他变量类型的说明格式有所不同,见以下例子。CHARACTER:C1,C2说明C1,C2这两个数量各存放一个字符。CHARACTER(LEN=10):C1,C2说明C1,C2这两个数量各存放10个字符。,49,(2)变量类型的其他说明方法用IMPLICIT语句说明变量类型IMPICITINTEGER(A,B)说明A,B开头的变量都是整型变量。IMPLICITINTEGER(A-F,I,K)说明A到F及I、K开头的变量均为整型变量。IMPLICITREAL(M-P)说明M到P开头的变量都为实型变量。IMPLICITCOMLEX(C)说明以字母C开头的变量都为复型变量。,50,隐含说明变量的类型这种说明方法是根据变量名称的第一个字母自动决定变量的类型,且仅适用于整型和实型变量,凡是以I、J、K、L、M、N开头的变量名均为整型变量,其他字母开头的变量都作为单精度实型变量。这种方法最好不要使用。好的程序员在写程序时都会先对变量进行说明才使用,这样能清楚了解程序执行时的内存使用情况,同时也可避免很多“人为错误”。最好是在程序开头写上以下语句:IMPLICITNONE该语句关闭“隐含说明”,所有变量都要先说明后使用,以避免在程序中使用没意义(未赋值)的变量。但要注意,这个语句要放在USE语句的下一行,任何其它语句之前,不能放在其他位置。,51,三、常数的命名常数的命名就是给常数起名字,这样在程序中用到这个常数时不必写这个常数,而直接写这个常数的名字,从而给编写程序、阅读程序以及修改程序带来方便。例如:REAL:PIPARAMETER(PI=3.14159)也可以在类型说明时,同时给常数命名。例如:REAL,PARAMETER:PI=3.14159这里PARAMETER是作为一个形容词(称为属性描述符),双冒号表示这个形容词“形容”完毕,后面开始常量命名,冒号在这里不能省略。当类型说明语句和其他类似的“形容词”连用时都要写上这个冒号。,52,1.4.2FORTRAN库函数(标准函数、内部函数)在程序设计中常要用到数学中的一些函数,如三角函数、指数函数、对数函数、求根函数、绝对值函数等。FORTRAN将这些常用的函数编成一系列独立的子程序,如果需要用到这些函数,用户不必自己再去编写求这些函数值的程序,只需直接写出函数名字和有关的自变量即可。例如求|x|,只要写ABS(x)就可以了。系统会按函数名从函数库中找出计算该函数的子程序,从而完成函数的求值。,53,表1-2常用库函数,54,使用库函数的一般形式:函数名(自变量)“自变量”(或“参数”)可以是一个或多个。关于库函数的说明:(1)自变量有类型的要求,并由自变量的类型决定函数类型。(2)函数各分“通用名”(也称“属名”)和“专用名”。使用通用名时函数值类型随自变量的类型而定,使用专用名时只允许用指定类型的自变量,且只能得到固定类型的函数值。(3)自变量必须用括号括起来,且三角函数的自变量单位是弧度。(4)自变量可以是表达式,且可以嵌套引用。例如EXP(x+2.5)、SIN(ABS(X))。,55,1.4.3算术表达式和字符表达式一、算术表达式算术表达式是用算术运算符将常数、变量、函数等运算元素按一定规则组成的算式。1算术运算符FORTRAN程序中使用的算术运算符按运算优先级从“低”到“高”排列如下:+加法-减法*乘法/除法*乘幂注:可以使用括号“()”表示括号内的部分优先运算,56,以下是一些算术表达式的例子。数学式子算术表达式,a*exp(x)-sin(alpha+beta)*2,3.14159*R*2,在编写表达式时首先要注意以下几点:(1)乘号是不能省略的,且乘幂必须用两个连续的“*”号表示,例如x3和2ab的写法是不允许的,应写成x*3和2*a*b。,57,(2)同类型的两个运算元素运算后类型不变,例如“1/2”结果为0而不是0.5。(3)同一个算术表达式中允许出现不同类型的运算元素,但运算结果的类型遵守如下规则:一个实型数和一个整型数运算,结果为实型;一个双精度数和一个单精度数或整型数运算,结果为双精度数;一个复型数和其他类型数运算,结果为复型数。对不同类型数据混合运算时的类型转换是逐步进行的,即一边转换一边计算,而不是先转换成统一类型后再计算,例如5.0-5/2结果不是2.5而是3.0。,58,二、字符表达式字符表达式是用字符运算将若干个字符型量连接起来的表达式。字符型量可以是字符常数、字符变量、字符数组元素、字符子串和字符型函数。字符运算符只有一个,即“/”,表示将两个字符串连接起来。例如,字符表达式FORT/RAN95,其值为FORTRAN95。“Thats”/“right”,其值为Thatsright.。当使用双撇号将字符串括起来时,字符串中每个单撇号为一个字符。That”s/right,其值为Thatsright.。当使用单撇号将字符串括起来时,字符串中的两个连续撇号表示一个单撇号字符。其它字符型量使用的例子将在以后章节中见到。,59,1.5赋值语句一、赋值语句赋值语句是FORTRAN程序中使用最多的语句,它的作用是将一个值赋予某个量。其一般形式为:V=e其中:V可以是一个变量名、数组名、数组元素、数组片段或字符子串,e是一个表达式(包括单个常量或变量),“=”称赋值号。赋值语句的功能是,先计算出表达式e的值,然后将此值转换成和V的类型一致后赋给V,即送到V所表示的内存单元中。下面是一些赋值语句的例子。,60,A=3.5*SIN(0.5)*6.0+4.5DX=-0.12345D-10X=X+1.0C=(2.5,-0.9)C1=ABCD/XYZ(假定C1是字符型变量)其中前四个赋值语句中“=”两边都是数值型量,通常称这种赋值语句为“算术赋值语句”,第五个赋值语句中都是字符型量,称其为字符赋值语句。,61,几点说明1赋值号左边不能是表达式、函数或常数。例如X+Y=5,5=X+Y,SIN(X)=3.14159/2.0都是错误的。2一个赋值语句不能给多个变量赋值。例如A=B=C=0是不允许的。3对算术赋值语句,赋值号丙边的类型不一致时,表达式的值自动换成与赋值号左边的量的类型一致后再赋值。例如I=6.5*3(设I为整型变量)执行后I的值为19,而不是19.5。又如A=3*5/2(设A为实型变量)执行后A的值为7.0。再如C=(2.5,-0.9)(设C为实型变量)执行后C的值为2.5,不是(2.5,-0.9)。,62,二给变量赋初值给变量赋值不一定只利用赋值语句,可以在定义变量时给变量赋初值。例如INTEGER:a=1REAL:b=2.0COMPLEX:c=(1.0,2.0)CHARACTER(LEN=10):str=“FORTRAN95”注意,在定义变量时赋初值,赋值号右边不能是含有运算符的表达式,而且语句中的两个冒号不能省略。利用赋值语句给变量赋值是在程序执行时完成的,而在定义变量时赋初值是在程序被编译时实现的,可以提高程序的执行速度。,63,1.6简单的输入与输出FORTRAN提供了丰富的输入输出功能。这些功能是通过输入输出语句实现的。本节介绍简单的输入输出方法,即使用表控格式输入输出语句实现输入输出。所谓表控格式是指输入输出语句中不提供数据的输入输出格式,而按编译程序提供的隐含格式进行数据的输入输出。,64,1.6.1表控输入语句表控输入语句的形式:READ(UNIT=u,*)输入表或READ*,输入表其中,UNIT=u指定输入设备,u为输入设备号;“*”号表示表控输入,“UNIT”可以省略;“输入表”可以是变量、数组元素名、数组名、子串名等,它们之间用逗号分隔开。语句的功能是从“u”指定的设备输入若干个数据,然后一一对应的赋给输入表中的元素。,65,例如READ(UNIT=5,*)A,B,C表示从5号设备输入三个数据,分别赋给变量A、B、C。该语句也可以写成READ(5,*)A,B,C,省略了“UNIT=”。这个语句还可以写成如下形式:READ(*,*)A,B,C或者写成READ*,A,B,C形式。这些形式彼此是等价的,都表示以表控格式从键盘输入三个数据分别赋给A、B、C。,66,在程序中使用表控格式输入数据时,当执行到该语句,显示器上会出现一个光标,等待从键盘输入数据。输入多个数据时,数据之间用逗号或空格隔开,若输入字符常数,而且字符常数中有空格符或逗号,则要使用撇号将字符串括起来。,67,INTEGERA,B,CREALX,Y,ZCHARACTER(LEN=20)C1,C2READ*,A,B,CREAD*(*,*)X,Y,ZREAD(*,*)C1,C2当执行到READ语句时,若从键盘输入以下数据:1,2,34.0,5.0,6.0HAPPYBIRTHDAY则执行结果是A=1,B=2,C=3,X=4.0,Y=5.0,Z=6.0,C1=“HAPPY”,C2=“BIRTHDAY”。,68,1.6.2表控输出语句表控输出语句的形式:WRITE(UNIT=u,*)输出表其中,UNIT=u指定输出设备,“UNIT”可以省略;u为输出设备号;“*”表示表控输出;“输出表”中可以包含变量、常数、数组名、数组元素名、子串名、函数名或一般表达式,各项之间用逗号隔开。该语句的功能是在“u”指定的设备上输出输出表中各项的值。系统默认的输出设备号是6,表示在显示器上输出,可以用“*”号表示默认设备。因此表控输出语句的以下几种写法是等价的。WRITE(UNIT=6,*)A,B,CWRITE(UNIT=5,*)A,B,CWRITE(UNIT=*,*)A,B,CWRITE(*,*)A,B,C,69,表控输出语句还有另一种形式:PRINT*,输出表这个语句只能用于在标准输出设备上输出数据,它不能用UNIT=u指定输出设备,这是和WRITE语句的主要区别。另外注意,WRITE语句不能写成“WRITE*,输出表”这样的形式,即WRITE后面不能省略括号,同样PRINT后也不能加括号。下面是表控输出语句的例子。INTEGERI,JREALA,BWRITE(*,*)I,JPRINT*,A,B如果设I=49,J=-128,A=2.05,B=17.38,则输出结果为:,70,0,71,采用表控输出时:整型数输出占15位,不足15位右对齐左边补空格,且正号不输出;实型数占15位,其中小数部分占6位,不足15位右对齐左边补空格,正号不输出;双精度实型数占24位,小数部分占15位,不足24位右对齐,右边补空格,正号不输出;复型数输出时,输出的实部和虚部用逗号分开且用括号括起来;字符型数据原样输出,但作为定界符的撇号不输出,两个字符串间留一空格。见以下例子,72,COMPLEXX,YCHARACTER(LEN=10)BCHARACTERAA=HB=ELLOX=(1.0,1.0)B=(1.0,2.0)WRITE(*,*)A,BWRITE(*,*)“X+Y=”,X+Y当两个表控语句执行后会输出以下结果:HELLOX+Y=(2.000000,3.000000),73,对上面这些例子中的表控输出语句,都可以使用PRINT语句代替,结果是一样的,例如PRINT*,A,BPRINT*,“X+Y=”,X+Y,74,1.7程序举例例1.编写一个进行复数加、减、乘、除及简单字符处理的程序。,75,programex101s1(6:)=“evening.”complexa,bwrite(*,*)s1Character(len=20)s1,s2write(*,*)index(s2,substring)Character(len=5)substringwrite(*,*)s1/s2s1=“Goodmoring.”write(*,*)ichar(“A”),char(65)s2=“Haveaniceday.”write(*,*)len(s1),len_trim(s1)substring=“nice”write(*,*)s1(2:5)a=(1.0,1.0)!a=1+1is1(6:6)=”!”b=(1.0,2.0)!b=1+2iwrite(*,*)s1Write(*,*)“a+b=”,a+b,“a-b=

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论