Fortran语言基础资料讲解.docx
- 文档编号:29894285
- 上传时间:2023-08-03
- 格式:DOCX
- 页数:100
- 大小:303.34KB
Fortran语言基础资料讲解.docx
《Fortran语言基础资料讲解.docx》由会员分享,可在线阅读,更多相关《Fortran语言基础资料讲解.docx(100页珍藏版)》请在冰豆网上搜索。
Fortran语言基础资料讲解
Fortran语言基础
数值分析程序设计
PartIFortran语言基础
COMPAQVISUALFORTRAN6.5
0编译器的使用
0.1编译器简介
高级语言以及汇编语言的程序代码在没有转换成机器代码前,计算机是无法执行的。
编译器的功能是将高级语言的程序代码翻译成计算机可执行的机器码,也就是生成扩展名为EXE,COM的文件。
0.2VisualFortran的使用
VisualFortran起源于Microsoft的FortranPowerStation4.Q这套工具后来卖给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,默认程序名称为Compaq
VisualFortran6.5
选择File菜单中的New选项
在弹出的对话框中,选择Project标签。
在Project中选择FortranConsole
Application。
在ProjectName的文本框中给定Project的名字,Location会显示出整个
Project的工作目录。
点击”0K”
选择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编译器的使用方法。
1Fortran语言基本概念
1.0程序书写格式
Fortran程序代码的编写格式有两种:
FreeFormat(自由格式)和Fixed
Format(固定格式)。
固定格式属于旧式写法,他在编写版面上有很多限制。
自由格式是
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个字符之后:
不使用,超过的部分会被忽略,有的编译器会发出错误信息。
CFIXEDFORMATDEMO
programmain
write(*,*)'15000.789'write(*,*)
1'Hello'
100write(*,*)'Hello'
10stop
end
注意:
程序中的空格,没有任何意义。
固定格式是配合早期使用穿孔卡片输入程序所发明的格式。
熟悉固定格式,有助于阅读早期的Fortran程序代
码。
1.0.2FreeFormat(自由格式)
自由格式基本上允许非常自由地编写格式,他没有规定每一行的第几个字符有什么作用。
需要注意的事项只有以下几点:
(1)叹号“!
”后面的文本都是注释;
(2)每一行可以编写132个字符;
(3)行号放在每行程序的最前面;
(4)一行程序代码的最后如果是符号“&”,代表下一行程序会和这一行连接。
如果一行程序代码的开头是符号&,代表它会和上一行程序连接。
看一个自由格式编写的程序:
!
FreeFormat
programmain
write(*,*)"Hello"!
这也是注解
write(*,*)&
"Hello"
wr&
&te(*,*)"Hello"
end
1.1字符集
字符集是指编写Fortran程序时,所能使用的所有字符及符号。
Fortran所能使用的字符集有:
英文字母:
A~Z及a~z(英文字母不区分大小写);
数字:
0~9;
22个特殊符号:
:
=+-*/.‘!
“%&;<>?
$_(还有一个显示
不出来的空格符)
注意:
Fortran是不区分大小写的语言。
所以,INTEGER」nteger,
inteGER是相同的命令。
1.2数据类型
整数(INTEGER):
整数又可以分为长整型与短整型。
在个人计算机中长整型占用32bits(4bytes)的空间,长整型可以保存的数值范围在-2147483648~+2147483647(也就是-231+1~231)之间;短整型占用16bits(2bytes)的空间,保存数值的范围在-32768~+32767之间。
浮点数(REAL):
浮点数有两种类型:
单精度和双精度。
单精度浮点数占用32bits的空间,有效位数为6~7位。
可记录的最大数
双精度浮点数占用64bits,有效位数为15~16位。
可记录的最大数值为
1.7910308,最小数值为2.2310308。
复数(COMPLEX):
单精度和双精度。
以abi表示的复数,其中a,b是
由两个浮点数来记录的
字符型(CHARACTER):
计算机除了记录数之外,可以记录一段文本或称作字符串。
记录一个字符需要一个字节。
逻辑型(LOGICAL):
只有两种结果:
真(TRUE)和假(FALSE)在二进制中,通常以1代表真,0代表假。
使用Fortran编写程序,必须事先声明数据类型。
不同数据类型必须经过转换才能互通。
1.3数学表达式
Fortran使用的数学运算符号,根据运算优先级顺序排列如下:
+加法-减法
*乘法/除法
**乘幕(乘方)
()括号
越是下面的运算符号,运算的优先级越高。
Fortran的数学表达式和手写的差别主要有三点:
(1)乘幕要连用两个星号**,例如43必须写成4**3;
(2)乘号不能省略,2a应当写作2*a;
(3)
2(ef)
除法算式(ab)(cd)应当写作((a+b)*(c+d))/(2*(e+f));
1.4变量命名
在Fortran中,变量命名要注意一些原则:
(1)变量的名称以使用英文字母为主,可以含有下划线或数字,但前缀必须是英文字母;
(2)变量名的长度最多31个字符;
(3)变量名不要与Fortran的命令名相同,也不要与程序名相同;
(4)程序中变量名不区分大小写。
(5)
1.5Fortran程序结构
例如:
programmainwrite(*,*)"Hellostopend
作业:
1、变量命名有哪些要求?
2、变量的类型有哪些?
2输入输出及声明
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
stopend
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)
语法:
characte(len=n)a
注释:
len决定字符串的长度。
字符串赋值由双引号定义
a=”amastudent”
programex0413
characte(len=20)string
string="Goodmorning."
write(*,*)string
string(6:
)="evening."!
重设设定从第6个字符之后的字符串write(*,*)string
end
执行结果:
Goodmorning.
Goodevening.
注意:
Fortran的命令不区分大小写,但是在字符串中是区分大小写的。
关于字符串的有关函数,请查阅相关的帮助。
2.2.5逻辑变量(LOGICAL)
语法:
logicala
注释:
逻辑变量的值为“true”和fafse”。
逻辑变量输出值为”T”和”F”
a=.true.
a=.false.
逻辑变量用于程序的逻辑判断语句,一般并不输出。
READ命令
语法:
reac(*,*)a
programex0417
integera
reac(*,*)a!
由键盘读入一个整数
write(*,*)a!
写出读进变量a的内容
end
Read命令用于实时接受用户从键盘输入数据。
Read命令配合输入格式可以方便读取文件中的数据。
有关格式命令参考帮助文件。
格式化输入(FORMAT)命令
2.5.1格式化输出概论
Format命令用来设置输出格式,看一个例子:
programex0420
integera
a=100
write(*,100)a!
使用行代码100地方设定的格式来输出变数a
100format(l4)
!
最前面的100是行代码,把这一行程序代码给一个编号
end
HVisualStudi^\MyProjecfe\lianxi\[>cbug
I199
iPreiseanytocoetinus*.
程序的执行结果使用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
characte(len=20)e
a=10
b=12.34
c=(1,2)
d=.true.
e="FORTRAN"
write(*,"(1X,l5)")a!
用I来格式化整数write(*,"(1X,F5.2)")b!
用F来格式化浮点数write(*,"(1X,F4.1,F4.1)")c!
complex也是浮点数write(*,"(1X,L3)")d!
用L来输出logicalwrite(*,"(1X,A10)")e!
用A来输出字符串
end
"C^MfcruSiurtVkujlSludic\MyPnijAc!
1234
1d2e
IFOftTftAN
angkeytocontinue
上例将输出格式写在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来输出logicalWRITE(*,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”是最常用的几个格式,最好能记住他们的用法。
【lw[.m]】一一以w个字符的宽度输出整数[至少输出m个数字]
write(*,”(15)”)100
WW100!
采用5个字符宽输出,100前补两个空白
write(*,”(13)”)10000
***!
设置的输出文本框不足,输出3个*以示警告
write(*,”(15.3)”)10
WW010!
强迫输出
声明的其他命令
261IMPLICT命令
Fortran编译器会根据变量名的首字母自动决定变量类型,以I、J、K、
L、M、N开头的变量被视为整型变量。
implicitnone关闭默认类型功能,所有变量都要事先声明;
implicitreal(M-P)
implicitinteger(A,B,C)
2.6.2常数的声明方法(PARAMETER)
程序中的一些不变量,可以声明为常数,其在程序中是不变的。
看一个例
子:
programex0429
implicitnone
realpi
paramete(pi=3.14159)
write(*,"(F4.2)")sin(pi/6)end
2.6.3设置变量初值
程序中的变量可以在声明变量类型时同时赋值
programex0430
integer:
:
a=1
real:
:
b=2complex:
:
c=(1,2)
characte(len=20):
:
str="FORTRAN90"
write(*,*)a,b,c,str
end
在Fortran77中,需要使用Data命令设值初值。
264等价声明(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
characte(len=30):
:
name!
人名
integer:
:
age!
年龄
integer:
:
height!
身高
integer:
:
weight!
体重
characte(len=80):
:
address!
地址
endtypeperson
type(person):
:
a!
声明一个person类型的变量
write(*,*)"NAME:
"
reac(*,*)a%name
write(*,*)"AGE:
"
reac(*,*)a%age
write(*,*)"HEIGHT:
"
reac(*,*)a%height
write(*,*)"WEIGHT:
"
reac(*,*)a%weight
write(*,*)"ADDRESS:
"
reac(*,"(A80)")a%address
write(*,100)a%name,a%age,a%height,a%weight
100format("Name:
",A10/,"Age:
",l3/,"Height:
",l3/,"Weight:
",l3,&
&"Addres:
",A50)
stop
end
每个类型为person的变量中,都有name,age,height,weight,addres这几
个元素可以使用,使用时要加上一个百分号%来取用他们。
Person%age,
person%weight。
Fortran90中的type功能与C语言中的struct类似。
3流程控制与逻辑运算
3.1IF语句
IF语句基本用法
IF语句基本流程:
IF(逻辑表达式)THEN
程序代码
ENDIF
programex0501
implicitnone
real(kind=4):
:
speed
write(*,*)"speed:
"
reac(*,*)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:
"
reac(*,*
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Fortran 语言 基础 资料 讲解