Fortran语言基础.docx

上传人:b****6 文档编号:16678707 上传时间:2023-07-16 格式:DOCX 页数:99 大小:289.26KB
下载 相关 举报
Fortran语言基础.docx_第1页
第1页 / 共99页
Fortran语言基础.docx_第2页
第2页 / 共99页
Fortran语言基础.docx_第3页
第3页 / 共99页
Fortran语言基础.docx_第4页
第4页 / 共99页
Fortran语言基础.docx_第5页
第5页 / 共99页
Fortran语言基础.docx_第6页
第6页 / 共99页
Fortran语言基础.docx_第7页
第7页 / 共99页
Fortran语言基础.docx_第8页
第8页 / 共99页
Fortran语言基础.docx_第9页
第9页 / 共99页
Fortran语言基础.docx_第10页
第10页 / 共99页
Fortran语言基础.docx_第11页
第11页 / 共99页
Fortran语言基础.docx_第12页
第12页 / 共99页
Fortran语言基础.docx_第13页
第13页 / 共99页
Fortran语言基础.docx_第14页
第14页 / 共99页
Fortran语言基础.docx_第15页
第15页 / 共99页
Fortran语言基础.docx_第16页
第16页 / 共99页
Fortran语言基础.docx_第17页
第17页 / 共99页
Fortran语言基础.docx_第18页
第18页 / 共99页
Fortran语言基础.docx_第19页
第19页 / 共99页
Fortran语言基础.docx_第20页
第20页 / 共99页
亲,该文档总共99页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

Fortran语言基础.docx

《Fortran语言基础.docx》由会员分享,可在线阅读,更多相关《Fortran语言基础.docx(99页珍藏版)》请在冰点文库上搜索。

Fortran语言基础.docx

Fortran语言基础

数值分析程序设计

PartIFortran语言基础

COMPAQVISUALFORTRAN6.5

1编译器的使用

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程序了。

运行DeveloperStudio启动VisualFortran,默认程序名称为CompaqVisualFortran6.5

选择File菜单中的New选项

在弹出的对话框中,选择Project标签。

在Project中选择FortranConsoleApplication。

在ProjectName的文本框中给定Project的名字,Location会显示出整个Project的工作目录。

点击”OK”。

选择Anemptyproject选项,单击Finish按钮。

这个画面只有在VF6.5中才会出现,他显示Project打开后自动生成的文件,直接单击OK按钮。

这是刚设置完成的Project后的界面,目前还没有任何程序代码。

以上是建立Project的方法。

VisualStudio的环境是以Project作为编译单位,*.dsp或*.dsw是记录Project文件。

打开Project后,还要把程序代码加入Project中才能编译。

下面是添加程序代码文件的方法。

再次选择File菜单中的New选项。

在对话框中,选择Files标签,选择FortranFreeFormatSourceFile。

并为文件命名。

编写一个程序或打开一个已有的程序。

选择Build菜单中的Execute选项,VF会编译并执行编译好的程序。

程序执行的结果。

 

最后再一次简单地说明编译程序的过程:

(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编译器的使用方法。

2Fortran语言基本概念

1.0程序书写格式

Fortran程序代码的编写格式有两种:

FreeFormat(自由格式)和FixedFormat(固定格式)。

固定格式属于旧式写法,他在编写版面上有很多限制。

自由格式是Fortran90之后的新写法,取消了许多旧的限制。

Fortran程序代码扩展名为*.F或*.FOR的文件是以FixedFormat编写的程序;以*.F90为扩展名的文件,是以FreeFormat编写的程序。

今后我们编写的程序建议采用自由格式编写。

1.1.1FixedFormat(固定格式)

在固定格式中,规定了程序代码每一行中每个字段的意义。

第7~72个字符是可以用来编写程序的字段。

每一行的前5个字符只能是空格或者是数字,数字用来作为“行代码”。

每一行的第6个字符只能是空格或者“0”以外的字符。

第1个字符:

如果是字母C,c或者星号*,这一行文本会被当作说明批注,不会被编译。

第1~5个字符:

如果是数字,就是用来给这一行程序代码取个代号。

不然只能是空格。

第6个字符:

如果是“0”以外的任何字符,表示这一行程序会接续上一行;

第7~72个字符:

Fortran程序代码的编写区域。

第73个字符之后:

不使用,超过的部分会被忽略,有的编译器会发出错误信息。

CFIXEDFORMATDEMO

programmain

write(*,*)'15000.789'

10

write(*,*)

1'Hello'

100write(*,*)'Hello'

10stop

end

注意:

程序中的空格,没有任何意义。

固定格式是配合早期使用穿孔卡片输入程序所发明的格式。

熟悉固定格式,有助于阅读早期的Fortran程序代码。

1.1.2FreeFormat(自由格式)

自由格式基本上允许非常自由地编写格式,他没有规定每一行的第几个字符有什么作用。

需要注意的事项只有以下几点:

(1)叹号“!

”后面的文本都是注释;

(2)每一行可以编写132个字符;

(3)行号放在每行程序的最前面;

(4)一行程序代码的最后如果是符号“&”,代表下一行程序会和这一行连接。

如果一行程序代码的开头是符号&,代表它会和上一行程序连接。

看一个自由格式编写的程序:

!

FreeFormat

programmain

write(*,*)"Hello"!

这也是注解

write(*,*)&

"Hello"

wr&

&ite(*,*)"Hello"

end

1.1字符集

字符集是指编写Fortran程序时,所能使用的所有字符及符号。

Fortran所能使用的字符集有:

英文字母:

A~Z及a~z(英文字母不区分大小写);

数字:

0~9;

22个特殊符号:

=+-*/.‘!

“%&;<>?

$_(还有一个显示不出来的空格符)

注意:

Fortran是不区分大小写的语言。

所以,INTEGER,Integer,inteGER是相同的命令。

1.2数据类型

整数(INTEGER):

整数又可以分为长整型与短整型。

在个人计算机中长整型占用32bits(4bytes)的空间,长整型可以保存的数值范围在-2147483648~+2147483647(也就是-231+1~231)之间;短整型占用16bits(2bytes)的空间,保存数值的范围在-32768~+32767之间。

浮点数(REAL):

浮点数有两种类型:

单精度和双精度。

单精度浮点数占用32bits的空间,有效位数为6~7位。

可记录的最大数值为

,最小数值为

双精度浮点数占用64bits,有效位数为15~16位。

可记录的最大数值为

,最小数值为

复数(COMPLEX):

单精度和双精度。

表示的复数,其中a,b是由两个浮点数来记录的。

字符型(CHARACTER):

计算机除了记录数之外,可以记录一段文本或称作字符串。

记录一个字符需要一个字节。

逻辑型(LOGICAL):

只有两种结果:

真(TRUE)和假(FALSE)。

在二进制中,通常以1代表真,0代表假。

使用Fortran编写程序,必须事先声明数据类型。

不同数据类型必须经过转换才能互通。

1.3数学表达式

Fortran使用的数学运算符号,根据运算优先级顺序排列如下:

+加法-减法

*乘法/除法

**乘幂(乘方)

()括号

越是下面的运算符号,运算的优先级越高。

Fortran的数学表达式和手写的差别主要有三点:

(1)乘幂要连用两个星号**,例如

必须写成4**3;

(2)乘号不能省略,2a应当写作2*a;

(3)除法算式

应当写作((a+b)*(c+d))/(2*(e+f));

1.4变量命名

在Fortran中,变量命名要注意一些原则:

(1)变量的名称以使用英文字母为主,可以含有下划线或数字,但前缀必须是英文字母;

(2)变量名的长度最多31个字符;

(3)变量名不要与Fortran的命令名相同,也不要与程序名相同;

(4)程序中变量名不区分大小写。

1.5Fortran程序结构

程序开始PROGRAMMAIN

…………………

主程序代码WRITE(*,*)“Hello”

…………………

程序结束STOP

主程序代码结束END

例如:

programmain

write(*,*)"Hello"

stop

end

作业:

1、变量命名有哪些要求?

2、变量的类型有哪些?

3输入输出及声明

WRITE命令

语法:

WRITE(UNIT,FMT)

注释:

屏幕输出。

UNIT输出位置FMT输出格式。

默认格式WRITE(*,*)。

默认输出格式unit=6,也就是屏幕输出。

programmain

write(*,*)"Hello"

stop

endprogrammain

其他的输出格式参考Fortran的帮助。

PRINT命令

programmain

print*,"Hello"

stop

endprogrammain

Print的用法和write大致相同,只是print后面不适用括号,而且只有一个星号。

这个星号的意义是不限定输出格式。

声明

所谓声明是指:

在程序代码中,程序员向编译器要求预留一些存放数据的内存空间。

看一个例子:

programex0404

integera

a=3

write(*,*)"a=",a

stop

end

integera声明变量为整型。

编写程序时,应当根据变量的类型选择适当的数据类型,数据类型选用不当,可能造成错误。

这种错误有时是编译器无法察觉的。

2.3.1整数类型(INTEGER)

语法:

integer(kind=n)a

注释:

kind的值决定整型数据类型。

kind=2短整型,kind=4长整型。

默认为长整型。

Integera

A=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)a

a=(x,y)

注释:

kind的值决定浮点数的精度类型。

kind=4单精度浮点数(有效数字位数6~7位),kind=8双精度浮点数(有效数字位数15位)。

默认为单精度浮点数。

2.3.4字符及字符串(CHARACTER)

语法:

character(len=n)a

注释:

len决定字符串的长度。

字符串赋值由双引号定义

a=”Iamastudent!

programex0413

character(len=20)string

string="Goodmorning."

write(*,*)string

string(6:

)="evening."!

重设设定从第6个字符之后的字符串

write(*,*)string

end

执行结果:

Goodmorning.

Goodevening.

注意:

Fortran的命令不区分大小写,但是在字符串中是区分大小写的。

关于字符串的有关函数,请查阅相关的帮助。

2.2.5逻辑变量(LOGICAL)

语法:

logicala

注释:

逻辑变量的值为“true”和“false”。

逻辑变量输出值为”T”和”F”

a=.true.

a=.false.

逻辑变量用于程序的逻辑判断语句,一般并不输出。

READ命令

语法:

read(*,*)a

programex0417

integera

read(*,*)a!

由键盘读入一个整数

write(*,*)a!

写出读进变量a的内容

end

Read命令用于实时接受用户从键盘输入数据。

Read命令配合输入格式可以方便读取文件中的数据。

有关格式命令参考帮助文件。

格式化输入(FORMAT)命令

2.5.1格式化输出概论

Format命令用来设置输出格式,看一个例子:

programex0420

integera

a=100

write(*,100)a!

使用行代码100地方设定的格式来输出变数a

100format(I4)

!

最前面的100是行代码,把这一行程序代码给一个编号

end

程序的执行结果使用4个字符宽输出整数,前面没有多余的空格。

Format命令中可以使用很多的格式控制描述。

下面列出所有格式命令的功能([]中的选项可以省略):

Aw——以w个字符宽来输出字符串;

BN——定义文本框中的空位为没有东西,在输入时才需要使用;

BZ——定义文本框中的空位为0,在输入时才需要使用;

Dw.d——以w个字符宽输出指数类型的浮点数,小数部分占用d个字符宽;

EW.d[Ee]——以w个字符宽输出指数类型的浮点数,小数部分占用d个字符宽,指数部分占用e个字符;

Enw.d[Ee]——以指数类型输出浮点数;

Esw.d[Ee]——以指数类型输出浮点数;

Fw.d——以w个字符宽输出浮点数,小数部分占用d个字符宽;

Gw.d[Ee]——以w个字符宽输出任何种类的数据;

Iw[.m]——以w个字符宽输出整数,最少输出m个数字;

Lw——以w个字符宽输出T或F的真假值;

nX——把输出的位置向右跳过n个位置;

/——代表换行;

——在没有更多数据时结束输出;

下面看一个例子:

programex0421

integera

realb

complexc

logicald

character(len=20)e

a=10

b=12.34

c=(1,2)

d=.true.

e="FORTRAN"

write(*,"(1X,I5)")a!

用I来格式化整数

write(*,"(1X,F5.2)")b!

用F来格式化浮点数

write(*,"(1X,F4.1,F4.1)")c!

complex也是浮点数

write(*,"(1X,L3)")d!

用L来输出logical

write(*,"(1X,A10)")e!

用A来输出字符串

end

上例将输出格式写在Write命令内,下面的例子采用Format命令规定输出格式:

PROGRAMex0422

INTEGERA

REALB

COMPLEXC

LOGICALD

CHARACTER*(20)E

A=10

B=12.34

C=(1,2)

D=.true.

E="FORTRAN"

WRITE(*,100)A!

用I来格式化整数

WRITE(*,200)B!

用F来格式化浮点数

WRITE(*,300)C!

complex也是浮点数

WRITE(*,400)D!

用L来输出logical

WRITE(*,500)E!

用A来输出字符串

100FORMAT(1X,I5)

200FORMAT(1X,F5.2)

300FORMAT(1X,F4.1,F4.1)

400FORMAT(1X,L3)

500FORMAT(1X,A10)

END

详细的输出格式使用方法,参考相关帮助。

2.5.2详论格式化输出

格式化输出的控制字符非常丰富,但是常用的并不多,所以不需要记住每一个控制字符。

一般来说,“I、F、E、A、X”是最常用的几个格式,最好能记住他们的用法。

【Iw[.m]】——以w个字符的宽度输出整数[至少输出m个数字]

write(*,”(I5)”)100

100!

采用5个字符宽输出,100前补两个空白

write(*,”(I3)”)10000

***!

设置的输出文本框不足,输出3个*以示警告

write(*,”(I5.3)”)10

010!

强迫输出

 

声明的其他命令

2.6.1IMPLICT命令

Fortran编译器会根据变量名的首字母自动决定变量类型,以I、J、K、L、M、N开头的变量被视为整型变量。

implicitnone关闭默认类型功能,所有变量都要事先声明;

implicitreal(M-P)

implicitinteger(A,B,C)

2.6.2常数的声明方法(PARAMETER)

程序中的一些不变量,可以声明为常数,其在程序中是不变的。

看一个例子:

programex0429

implicitnone

realpi

parameter(pi=3.14159)

write(*,"(F4.2)")sin(pi/6)

end

2.6.3设置变量初值

程序中的变量可以在声明变量类型时同时赋值。

programex0430

integer:

:

a=1

real:

:

b=2

complex:

:

c=(1,2)

character(len=20):

:

str="FORTRAN90"

write(*,*)a,b,c,str

end

在Fortran77中,需要使用Data命令设值初值。

2.6.4等价声明(EQUIVALENCE)

把两个以上的变量,声明他们使用同一个内存地址,就是等价声明。

使用等价声明可以节省内存、精简程序代码。

integera,b

equivalence(a,b)!

声明a,b这两个变量使用同一块内存空间

注意:

所有的声明都应当放在程序代码的可执行描述之前。

混合运算

混合运算是指:

在算式中所进行计算的数字类型不同。

进行混合运算时,要先经过数据类型的转换,以免出现错误。

programex0432

implicitnone

integer:

:

a=1

integer:

:

b=2

real:

:

c

c=real(a)/real(b)!

经由库函数real把整数转换成浮点数

write(*,"(F5.2)")c

end

程序的执行结果:

0.5

如果不做类型转换,c=a/b=0,出现错误的结果。

自定义数据类型

利用自定义数据类型可以定义数据结构体,管理不同类型的数据,这对于数据库建立是非常有用的。

programex0434

implicitnone

!

开始建立person这个类型

type:

:

person

character(len=30):

:

name!

人名

integer:

:

age!

年龄

integer:

:

height!

身高

integer:

:

weight!

体重

character(len=80):

:

address!

地址

endtypeperson

type(person):

:

a!

声明一个person类型的变量

write(*,*)"NAME:

"

read(*,*)a%name

write(*,*)"AGE:

"

read(*,*)a%age

write(*,*)"HEIGHT:

"

read(*,*)a%height

write(*,*)"WEIGHT:

"

read(*,*)a%weight

write(*,*)"ADDRESS:

"

read(*,"(A80)")a%address

write(*,100)a%name,a%age,a%height,a%weight

100format("Name:

",A10/,"Age:

",I3/,"Height:

",I3/,"Weight:

",I3,&

&"Addres:

",A50)

stop

end

每个类型为person的变量中,都有name,age,height,weight,address这几个元素可以使用,使用时要加上一个百分号%来取用他们。

Person%age,person%weight。

Fortran90中的type功能与C语言中的struct类似。

4流程控制与逻辑运算

3.1IF语句

IF语句基本用法

IF语句基本流程:

IF(逻辑表达式)THEN

程序代码

ENDIF

programex0501

implicitnone

real(kind=4):

:

speed

write(*,*)"speed:

"

read(*,*)speed

if(speed>100.0)then

!

speed>100时才会执行下面这一行程序

write(*,*)"Slowdown."

endif

stop

end

IF命令可以与ELSE搭配,逻辑流程为:

IF(逻辑表达式)THEN

程序代码

ELSE

程序代码

ENDIF

programex0502

implicitnone

real(kind=4):

:

height!

记录身高

real(kind=4):

:

weight!

记录体重

write(*,*)"height:

"

read(*,*)height!

读入身高

write(*,*)"weight:

"

read(*,*)weight!

读入体重

if(weight>height-100)then

!

如果体重大于身高减去100,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2