山东建筑大学1数值分析程序设计PartIFortran语言基础COMPAQVISUALFORTRAN6.50编译器的使用0.1编译器简介高级语言以及汇编语言的程序代码在没有转换成机器代码前,计算机是无法执行的。编译器的功能是将高级语言的程序代码翻译成计算机可执行的机器码,也就是生成扩展名为EXE,COM的文件。0.2VisualFortran的使用VisualFortran起源于Microsoft的FortranPowerStation4.0,这套工具后来卖给Digital公司继续开发,第二个版本称为DigitalVisualFortran5.0,Digital被Compaq并购之后,接下来的版本6.0和6.5称为CompaqVisualFortran。下面的介绍以CompaqVisualFortran6.5作范例。VisualFortran被组合在一个叫做MicrosoftVisualStudio的图形接口开发环境中。VisualStudio提供一个统一的使用接口,这个接口包括文字编辑功能、Project管理功能、调试工具等。而编译器则被组合到VisualStudio中,VF和VC++使用相同的使用接口。VisualFortran6.5除了完全支持Fortran95的语法外,扩展功能方面提供了完整的Windows程序开发工具,专业版还含有IMSL数值计算连接库。另外还可以和VC++直接互相连接使用,也就是把Fortran和C语言的程序代码混合编译成一个执行文件。安装好CompaqVisualFortran后,运行DeveloperStudio就可以开始编译Fortran程序了。数值分析程序设计——Fortran基础2运行DeveloperStudio启动VisualFortran,默认程序名称为CompaqVisualFortran6.5选择File菜单中的New选项在弹出的对话框中,选择Project标签。在Project中选择FortranConsoleApplication。山东建筑大学3在ProjectName的文本框中给定Project的名字,Location会显示出整个Project的工作目录。点击”OK”。选择Anemptyproject选项,单击Finish按钮。这个画面只有在VF6.5中才会出现,他显示Project打开后自动生成的文件,直接单击OK按钮。数值分析程序设计——Fortran基础4这是刚设置完成的Project后的界面,目前还没有任何程序代码。以上是建立Project的方法。VisualStudio的环境是以Project作为编译单位,*.dsp或*.dsw是记录Project文件。打开Project后,还要把程序代码加入Project中才能编译。下面是添加程序代码文件的方法。再次选择File菜单中的New选项。在对话框中,选择Files标签,选择FortranFreeFormatSourceFile。并为山东建筑大学5文件命名。编写一个程序或打开一个已有的程序。选择Build菜单中的Execute选项,VF会编译并执行编译好的程序。程序执行的结果。数值分析程序设计——Fortran基础6最后再一次简单地说明编译程序的过程:(1)建立一个新的Project(File/New,选择Project选项卡,选择FortranConsoleProgram格式,给定Project名称)。Project会保存成*.dsw文件。(2)生成一个新的程序文件(File/New,选择Files选项卡,选择FortranFreeFormatSourceFile,给定文件名),或是插入一个已有的程序文件(选项Project/AddtoProject/Files)。程序代码会保存成*.f90或*.for文件。(3)用Build菜单中的Execute选项来编译并运行程序,或只是单击Build选项来只作编译,不运行程序。(4)要写新的程序可以另外建立一个新的Project,或是直接更换Project中的文件。千万不要把两个独立的程序文件放在同一个Project中,否则导致编译过程出现错误。(5)下次修改程序时,可以直接使用File/OpenWorkspace来打开*.dsw的Project工程文件。作业:1、熟悉Fortran编译器的使用方法。山东建筑大学71Fortran语言基本概念1.0程序书写格式Fortran程序代码的编写格式有两种:FreeFormat(自由格式)和FixedFormat(固定格式)。固定格式属于旧式写法,他在编写版面上有很多限制。自由格式是Fortran90之后的新写法,取消了许多旧的限制。Fortran程序代码扩展名为*.F或*.FOR的文件是以FixedFormat编写的程序;以*.F90为扩展名的文件,是以FreeFormat编写的程序。今后我们编写的程序建议采用自由格式编写。1.0.1FixedFormat(固定格式)在固定格式中,规定了程序代码每一行中每个字段的意义。第7~72个字符是可以用来编写程序的字段。每一行的前5个字符只能是空格或者是数字,数字用来作为“行代码”。每一行的第6个字符只能是空格或者“0”以外的字符。第1个字符:如果是字母C,c或者星号*,这一行文本会被当作说明批注,不会被编译。第1~5个字符:如果是数字,就是用来给这一行程序代码取个代号。不然只能是空格。第6个字符:如果是“0”以外的任何字符,表示这一行程序会接续上一行;第7~72个字符:Fortran程序代码的编写区域。第73个字符之后:不使用,超过的部分会被忽略,有的编译器会发出错误信息。CFIXEDFORMATDEMOprogrammainwrite(*,*)'15000.789'10数值分析程序设计——Fortran基础8write(*,*)1'Hello'100write(*,*)'Hello'10stopend注意:程序中的空格,没有任何意义。固定格式是配合早期使用穿孔卡片输入程序所发明的格式。熟悉固定格式,有助于阅读早期的Fortran程序代码。1.0.2FreeFormat(自由格式)自由格式基本上允许非常自由地编写格式,他没有规定每一行的第几个字符有什么作用。需要注意的事项只有以下几点:(1)叹号“!”后面的文本都是注释;(2)每一行可以编写132个字符;(3)行号放在每行程序的最前面;(4)一行程序代码的最后如果是符号“&”,代表下一行程序会和这一行连接。如果一行程序代码的开头是符号&,代表它会和上一行程序连接。看一个自由格式编写的程序:!FreeFormatprogrammainwrite(*,*)Hello!这也是注解write(*,*)&Hellowr&&ite(*,*)Helloend1.1字符集字符集是指编写Fortran程序时,所能使用的所有字符及符号。Fortran所能使用的字符集有:英文字母:A~Z及a~z(英文字母不区分大小写);数字:0~9;22个特殊符号::=+-*/.‘!“%&;?$_(还有一个显示不出来的空格符)山东建筑大学9注意:Fortran是不区分大小写的语言。所以,INTEGER,Integer,inteGER是相同的命令。1.2数据类型整数(INTEGER):整数又可以分为长整型与短整型。在个人计算机中长整型占用32bits(4bytes)的空间,长整型可以保存的数值范围在-2147483648~+2147483647(也就是-231+1~231)之间;短整型占用16bits(2bytes)的空间,保存数值的范围在-32768~+32767之间。浮点数(REAL):浮点数有两种类型:单精度和双精度。单精度浮点数占用32bits的空间,有效位数为6~7位。可记录的最大数值为383.410,最小数值为381.1810。双精度浮点数占用64bits,有效位数为15~16位。可记录的最大数值为3081.7910,最小数值为3082.2310。复数(COMPLEX):单精度和双精度。以abi表示的复数,其中a,b是由两个浮点数来记录的。字符型(CHARACTER):计算机除了记录数之外,可以记录一段文本或称作字符串。记录一个字符需要一个字节。逻辑型(LOGICAL):只有两种结果:真(TRUE)和假(FALSE)。在二进制中,通常以1代表真,0代表假。使用Fortran编写程序,必须事先声明数据类型。不同数据类型必须经过转换才能互通。1.3数学表达式Fortran使用的数学运算符号,根据运算优先级顺序排列如下:+加法-减法*乘法/除法**乘幂(乘方)()括号越是下面的运算符号,运算的优先级越高。Fortran的数学表达式和手写的差别主要有三点:(1)乘幂要连用两个星号**,例如34必须写成4**3;数值分析程序设计——Fortran基础10(2)乘号不能省略,2a应当写作2*a;(3)除法算式()()2()abcdef应当写作((a+b)*(c+d))/(2*(e+f));1.4变量命名在Fortran中,变量命名要注意一些原则:(1)变量的名称以使用英文字母为主,可以含有下划线或数字,但前缀必须是英文字母;(2)变量名的长度最多31个字符;(3)变量名不要与Fortran的命令名相同,也不要与程序名相同;(4)程序中变量名不区分大小写。1.5Fortran程序结构程序开始PROGRAMMAIN…………………主程序代码WRITE(*,*)“Hello”…………………程序结束STOP主程序代码结束END例如:programmainwrite(*,*)Hellostopend作业:1、变量命名有哪些要求?2、变量的类型有哪些?山东建筑大学112输入输出及声明WRITE命令语法:WRITE(UNIT,FMT)注释:屏幕输出。UNIT输出位置FMT输出格式。默认格式WRITE(*,*)。默认输出格式unit=6,也就是屏幕输出。programmainwrite(*,*)Hellostopendprogrammain其他的输出格式参考Fortran的帮助。PRINT命令programmainprint*,HellostopendprogrammainPrint的用法和write大致相同,只是print后面不适用括号,而且只有一个星号。这个星号的意义是不限定输出格式。声明所谓声明是指:在程序代码中,程序员向编译器要求预留一些存放数据的内存空间。看一个例子:programex0404integeraa=3write(*,*)a=,astopend数值分析程序设计——Fortran基础12integera声明变量为整型。编写程序时,应当根据变量的类型选择适当的数据类型,数据类型选用不当,可能造成错误。这种错误有时是编译器无法察觉的。2.3.1整数类型(INTEGER)语法:integer(kind=n)a注释:kind的值决定整型数据类型。kind=2短整型,kind=4长整型。默认为长整型。IntegeraA=1.5最终的结果为a=1,这是因为a为整型,会把小数部分无条件舍去。2.3.2浮点数(REAL)语法:real(kind=n)a注释:kind的值决定浮点数的精度类型。kind=4单精度浮点数(有效数字位数6~7位),kind=8双精度浮点数(有效数字位数15位)。默认为单精度浮点数。超大数值的设置:单精度浮点数:1.23E20双精度浮点数:1.232365D10计算机在进行浮点数计算时,需要对位,由于有效数位的限制,可能造成大数吃小数的情况。2.3.3复数(COMPLEX)语法:complex(kind=n)aa=(x,y)注释:kind的值决定浮点数的精度类型。kind=4单精度浮点数(有效数字位数6~7位),kind=8双精度浮点数(有效数字位数15位)。默认为单精度浮点数。2.3.4字符及字符串(CHARACTER)语法:character(len=n)a注释:len决定字符串的长度。字符串赋值由双引号定义山东建筑大学1