单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第二章,Fortran语言初步,第二章,1,怎样学习一门计算机语言,基本结构及组成部分,基本语言要素,字符集、命名规则、关键字、对大小写的要求,书写格式、注释方法、语句的顺序,基本数据类型(常量、变量)、数组、派生类型、指针,基本表达式(算术、字符、逻辑、关系、二进制),主程序、子程序,模块、类,怎样学习一门计算机语言 基本结构及组成部分 基本语言要素 字,2,怎样学习一门计算机语言,基本程序流程(顺序、选择、循环),编译器的选择,输入输出怎样和外部设备交换数据,子程序,各程序模块之间的信息(数据)交换与共享方式,优化与其它高级技巧,软硬件的搭配,辅助的开发工具,怎样学习一门计算机语言 基本程序流程(顺序、选择、循环)编,3,Fortran编译器,Intel,(,Compag)Visual Fortran,Absoft,Fortran Compiler,Lahey,Fortran Compiler,GNU,Fortran Compiler,Portland Group,(,PGI,)Fortran Compiler,Salford FTN95,Fortran Compiler,Fortran编译器 Intel(Compag)Visu,4,Fortran程序的结构,Fortran90,程序,program,module,block data,contains,subroutine,function,contains,contains,contains,外部子程序,内部子程序,模块子程序,Fortran程序的结构Fortran90程序program,5,Fortran的语句,分为,非执行语句,与,可执行语句,(有位置顺序),PROGRAM,FUNCTION,SUBROUTINE,MODULE,BLOCK DATA,USE,FORMATENTRY,IMPLICIT NONE,PARAMETER,IMPLICIT,PARAMETER&DATA,定义:派生类型、接口块、变量类型、语句函数,DATA,执行结构,CONTAINS,内部过程或模块过程,END,Fortran的语句 分为非执行语句与可执行语句(有位置顺序,6,Fortran源程序的书写格式,固定格式(*.for或*.f),Fortran源程序的书写格式 固定格式(*.for或*.f,7,Fortran源程序的书写格式,Fortran源程序的书写格式,8,Fortran源程序的书写格式,lists.for,Fortran源程序的书写格式lists.for,9,自由格式(*.f90)和固定格式的比较,Fortran源程序的书写格式,固定格式,自由格式,每行字符数,80,132(VF 中几乎不限制),注释,第一列,:,c*,73-80列,任意位置,:!(第六列除外),任意位置,:,!,每行语句数,多条,用;隔开,(FORTRAN77只能有1条),多条,用;隔开,续行,第六列,非0非空格,最多续19行,&,最多续39行,Visual Fortran允许续511行,语句标号,1-5列:199999,语句前即可,199999,exam_2_1,自由格式(*.f90)和固定格式的比较Fortran源程序,10,计算机语言语法的形式化定义BNF范式,程序设计语言的基本概念及其描述方式,词法:单词的构成规则,语法:由单词构成语句的规则,语义:语句的实际意义,语用:语句与使用者之间的关系,语境:理解和实现程序设计语言的环境,(编译和运行环境),严格的形式化描述(语法图、BNF范式),自然语言,计算机语言语法的形式化定义BNF范式 程序设计语言的基本概,11,BNF,范式定义了一组描述语言的规则元语言,元语言 描述语言的规则(产生式),对象(程序)语言,产生式中不属于对象语言的符号,元语言符号,计算机语言语法的形式化定义BNF范式,产生式中属于对象语言的符号,终结符,|“,_,”|“,$,”,“,0,”|“,1,”|“,2,”|“,3,”|“,4,”|“,5,”|“,6,”|“,7,”|“,8,”|“,9,”,“大写英文字母”|“小写英文字母”,BNF范式定义了一组描述语言的规则元语言 元语言,12,计算机语言语法的形式化定义BNF范式,元语言符号,含义,定义为,|,或者,(),括号内对象一定取其中之一,括号内任取一个对象,也可不取,括号内对象可出现零次或多次,括号内为元语言符号,“”可省略,引号内为终结符,计算机语言语法的形式化定义BNF范式元语言符号含义定义为,13,Fortran字符集,A|B|C|D|E|F|G|H|I|J|K|,L|M|N|O|P|Q|R|S|T|U|V|,W|X|Y|Z|(,不区分大小写,),0|1|2|3|4|5|6|7|8|9,空格,|,=|+|-|*|/|(|)|,|.|:|,|,!,|,%,|,&,|,;,|,|,$,|,?,|,_,(F90,新增,),Fortran字符集 A|B|C|,14,Fortran的名称,用来标识程序中的实体(变量、子程序、函数),|_|$,名称长度不能超过6(FORTRAN77),31(Fortran90),63(Visual Fortran),Fortran的名称 用来标识程序中的实体(变量、子程序、函,15,Fortran的名称,program,X-Y-Z,Find_it,1A,_program,$total,exam_2_2,Fortran的名称programX-Y-ZFind_it1,16,Fortran的名称,O$k,A b,F7t,Dr.Li,Fortran的名称O$kA bF7tDr.Li,17,Fortran的关键字,语句关键字:if,subroutine,program,end,变元关键字,cmplx(x,y,kind),cmplx(10,20,4),cmplx(y=20,kind=4,x=10),不保留关键字,Fortran的关键字 语句关键字:if,subrouti,18,数据(信息),Fortran的数据类型,客观事物的符号表示,且能够被计算机接受和处理,数值型数据,非数值型,数据(信息)Fortran的数据类型 客观事物的符号表示,,19,数据类型,Fortran的数据类型,是数据的,取值范围,和其上定义的一组,操作,的总称,内部(基本)数据类型,数组,公用区,指针,派生类型,整数类型,实数类型,复数类型,字符类型,逻辑类型,数据类型Fortran的数据类型 是数据的取值范围和其上定,20,常量,exam_2_3,#,_,|,2,|,3,|,4,|,5,|,6,|,7,|,8,|,9,|,10,|,11,|,12,|,13,|,14,|,15,|,16,|,17,|,18,|,19,|,20,|,21,|,22,|,23,|,24,|,25,|,26,|,27,|,28,|,29,|,30,|,31,|,32,|,33,|,34,|,35,|,36,|,1,|,2,|,4,|,8,表示存储空间的大小(字节),只对十进制有效,常量exam_2_3#,21,常量,(.|,.),_,(|),(,E,|,e,|,D,|,d,)_,exam_2_3,常量(.小数,22,常量,exam_2_3,(,),|,|,(|”)系统允许字符(|”),H,系统允许字符,Fortran90,中废除,常量exam_2_3(,)一,23,常量,(|”)系统允许字符(|”),C,(,.true.,|,.false.,)_,特殊字符,意义,特殊字符,意义,a,铃声,t,水平Tab,b,退一格,v,垂直Tab,f,进一格,n,换行,xhh,编码为16进制hh的ASCII码字符,r,回车,ooo,编码为8进制ooo的ASCII码字符,exam_2_3,常量(|”)系统允许字符(|”)C,24,变量,变量的声明,隐式声明,(FORTRAN),显式声明,I-N规则,implicit语句,implicit none语句,exam_2_4,List.for,变量 变量的声明 隐式声明(FORTRAN)显式声明 I-,25,表达式和赋值语句,算术表达式,运算符:,+,、,-,、*、/、*(,重载,),操作数:常量、变量、函数,(整型、实型、复型、逻辑型、,数组,、,指针,、,派生类型,),优先级(,最好加括号,):,括号 函数,*,*、/,单目,、,双目,、,类型转换(向高看齐),int,nint,real,dble,cmplx,复数运算,exam_2_5,表达式和赋值语句 算术表达式 运算符:+、-、*、/、*,26,关系表达式:,.lt.().ge.(=),字符表达式,子字符串,字符串的连接,相关内部函数,exam_2_6,表达式和赋值语句,关系表达式:字符表达式 子字符串exam_2_6,27,二进制位操作(,Fortran90,),逻辑表达式,非:.NOT.,与:.AND.,或:.OR.,异或:.XOR.,同或:.EQV.,(异或):.NEQV.,高优先级,低优先级,最好加括号,表达式和赋值语句,二进制位操作(Fortran90)逻辑表达式 非:,28,输入输出,表控格式输入输出,有格式输入输出,无格式(二进制)输入输出,read,*,print,*,read(*,*),write,(*,*),输入输出 表控格式输入输出 有格式输入输出 无格式(二进制),29,程序的暂停、返回与结束,return(,很少使用,),end(,已经包含了return的没有废弃的功能,),Fortran90 废除,Fortran95取消,用read*代替,pause,|,pause,123,pause,Press any key to continue,stop,123,stop,Error found!,stop,|,程序的暂停、返回与结束 return(很少使用)end(,30,运算误差,数据的表示范围,整数,范 围,Integer(1),128127,Integer(2),-32,768 32,767,Integer(4),-2,147,483,648 2,147,483,647,Integer(8),-9,223,372,036,854,775,808,9,223,372,036,854,775,807,exam_2_7,符号,0,最高位,运算误差 数据的表示范围 整数范 围Inte,31,运算误差,实数,范 围,有效位数,real(4),-3.402823E38-1.175495E-38,0.0,1.175495E-38 3.402823E38,7,real(8),-1.79769313486232D308,-2.22507385850720D-308,0.0,2.22507385850720D-308,1.79769313486232D308,15,real(16),-1.189731E+4932,-3.362103E-4932 ,33,exam_2_7,符号,0,最高位,指数部分,小数部分(决定了有效位数),运算误差 实数范 围有效位数real(4),32,运算误差,不同类型之间的转换,整数,i,i=1/2*2,i=0,整数,i,i=3.7,i=3,单精度实数双精度实数,exam_2_8,运算误差 不同类型之间的转换 整数i,i=1/2*,33,运算误差,浮点数的计算误差,大数加小数引起有效位数的丢失,有效位数限制造成的舍入误差,两个大小极其相近的数相减引起有效位数的丢失(CPU相关),判断实数x是否为零必须用:abs(x)1 成立的最小正数,运算误差 浮点数的计算误差 大数加小数引起有效位数的丢失 有,34,