FORTRAN90指导汇编.docx
- 文档编号:9073625
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:96
- 大小:66.93KB
FORTRAN90指导汇编.docx
《FORTRAN90指导汇编.docx》由会员分享,可在线阅读,更多相关《FORTRAN90指导汇编.docx(96页珍藏版)》请在冰豆网上搜索。
FORTRAN90指导汇编
△routen.路线;路途
anumberof若干;许多
Unit4
pretendvt.假装;假扮
adj.灰色的;有灰斑的
youthn.青年;青年时期
△rollercoastern.过山车
vt.减轻(痛苦;忧虑)
foreheadn.额头
nativeadj.本国的;本地的FORTRAN90学习指导
一、FORTRAN90基础知识
1.源程序及其构成
书写格式:
主程序定义语句、结束语句
注意:
在没有程序名称的时候,程序开头的PROGRAM也不要出现。
如果使用了程序名称且在END语句中出现,则END语句中的PROGRAM不能省略。
语句行可以是0~132个字符;除赋值语句外,每个语句都要使用关键字开头。
如果希望一行中出现多个语句,语句一定要用分号隔开。
空格不能随便使用,关键字、变量和常量名以及操作符中的空格会使字符失去其原有的含义。
但它们之间一定要加空格。
注释行:
以感叹号为标记,或“C”、“*”(FORTRAN90中不提倡此用法)
续行标记:
在句末尾添加续行符&,如果将关键字分成两行,则下一行开头也要加续行标记。
如果续行符出现在注释语句中,则失去了续行的功能。
2.FORTRAN90字符集
126个英文字母(大小写字母等价)
210个阿拉伯数字
3下划线
421个特殊字符:
空格=+-*/(),.‘:
!
“%&;<>?
$
5其他字符(只可以出现在字符常量、字符串编辑描述符、注释和输入输出记录中)
3.基本数据类型
1整型KIND值可以为1、2、4
类型说明关键字:
INTEGER
KIND值决定数据的范围。
对于整数没有误差。
I=3/2=1;I=1/2=0
INTEGER(KIND=4):
:
A
INTEGER*4:
:
A
INTEGER(4):
:
A
2实型KIND值可以为4(单精度7位有效数字)、8(双精度15~17位有效数字)
类型说明关键字:
REAL
小数表示形式、指数表示形式(规格化的指数形式)
错误表示形式:
E34、.E34、0.14E2.3
8开3次方:
8.0**(1.0/3.0)
3复型KIND值为4、8
是实数的有序对,将两个实数中间用逗号分隔,然后放在一对括号中
类型说明关键字:
COMPLEX
复数的运算:
+、—、*、/
4字符型KIND值为国家语言种类
由一对单撇号或一对双撇号之间的字符序列组成。
字符串内大小写字母均可使用,但识别为不同字符。
撇号不是字符串的组成部分。
类型说明关键字:
CHARACTER
CHARACTER(LEN=10,kind=):
:
A
CHARACTER(10):
:
A
CHARACTER*10:
:
A
CHARACTER*(*),parameter:
:
A=’aasdfasd’
运算符:
//
函数:
CHAR(NUM);ICHAR(CHAR);LEN(STRING);LEN_TRIM(STRING)
INDEX(STRING,KEY);TRIM(STRING)
5逻辑型KIND值为2、4
只有真(.TRUE.)和假(.FALSE.)两个值。
4.命名规则
1名字的长度不能超过31个字符。
2名字的组成成分可以是字母、数字和下划线。
3名字的第一个字符必须是字母。
4要特别注意,在名字中不能出现空格。
5变量名不能与全局名(程序单位名,数组名)同名,也不要与关键字同名。
6名称不区分大小写。
二、基本语句
1.类型说明语句
a.显式说明:
b.隐含说明:
IMPLICITINTEGER(A-C)!
FORTRAN90不再使用
c.I-N规则:
d.屏蔽I-N规则:
IMPLICITNONE
2.种别说明
programex0435
implicitnone
!
判断可以记录9个位数的整数kind值
integer,parameter:
:
long_int=selected_int_kind(9)
!
判断可以记录3个位数的整数kind值
integer,parameter:
:
short_int=selected_int_kind(3)
!
判断可以有10个有效位数,指数可以记录到50的浮点数kind值
integer,parameter:
:
long_real=selected_real_kind(10,50)
!
判断可以有3个有效位数,指数可以记录到3的浮点数kind值
integer,parameter:
:
short_real=selected_real_kind(3,3)
integer(kind=long_int):
:
a=12345678
integer(kind=short_int):
:
b=12
real(kind=long_real):
:
c=1.23456789D45
real(kind=short_real):
:
d=1230
write(*,"(I3,1X,I10)")long_int,a
write(*,"(I3,1X,I10)")short_int,b
write(*,"(I3,1X,E10.5)")long_real,c
write(*,"(I3,1X,E10.5)")short_real,d
stop
end
programex0436
implicitnone
real(kind=4):
:
a
real(kind=8):
:
b
a=1.0_4!
确定1.0这个数字是使用单精度
b=1.0_8!
确定1.0这个数字是使用双精度
write(*,*)a,b
stop
end
3.属性说明:
EXTERNAL:
当用户过程作为实元时
INTRINSIC:
当内在函数名作为实元时
SAVE:
保存外部过程变量的值
INTENT:
决定虚元值的传递方向
PARAMETER:
符号常量声明
EQUIVALENCE:
等价声明!
EQUIVALENCE(A,B)表示A,B使用同一内存空间
OPTIONAL:
可选择属性的变元
ALLOCATABLE:
动态属性的变元
ASSIGN:
赋值语句
ENTRY:
为函数子程序或子例子程序提供多个入口
4.算术表达式
A.算术运算符:
***、/+、—
注意:
同级运算左结合,乘方运算右结合
B.内在函数:
数值函数:
ABS(x):
对任何类型的数值求绝对值。
类似的有CABS();IABS();DABS()
AIMAG(z):
返回复数Z的虚部。
AINT(a[,kind]):
返回舍去小数后的参数值。
INT()
ANINT(a[,kind]):
返回最接近参数a的整数值。
NINT()
CEILING(a):
返回一个等于或大于a的最小整数。
CMPLX(x):
复数类型转换;当复数赋值时实部或虚部为表达式,则要用该函数
FLOOR(a):
返回等于或小于a的最大整数。
MOD(A,B):
计算a/b的余数。
当参数为浮点数时,返回(a-int(a/b)*b)
SIGN(A,B):
B>=0返回abs(a);B<0返回-abs(a)
数学函数:
三角函数;LOG(X);LOG10(X);EXP(X);SQRT(X);
字符函数:
ACHAR(I);CHAR();
ADJUSTL(string);
ASJUSTR(string);
IACHAR();ICHAR();
INDEX();
LEN_TRIM(string);
TRIM(string);
LEN(string);
LGT();LLT();LLE();LGE()
REPEAT(S,I):
返回一个重复I次S的字符串。
数组约简函数:
ALL(mask[,dim]):
对数组进行逻辑判断,如果每个元素都满足条件则返回真值
ALL(a >5)或ALL(a>b)!
a、b是类型相同的数组,检查a中是否每一个元素都比数组b中任何一个元素大,返回一个逻辑值。
ANY():
对数组进行逻辑判断,只要有一个元素满足条件就返回真值
COUNT():
返回数组中合乎条件的元素数目。
PRODUCT():
返回数组中所有元素的相乘值。
SUM():
计算数组元素的总和。
数组查询函数:
ALLOCATED():
检查一个可变大小的数组是否已经声明大小。
LBOUND():
返回数组声明时的下限值
SHAPE():
返回数组的维数及大小。
如:
integera(2,3,4)
integerb(3)
b=shape(a)
执行结果:
b
(1)=2b
(2)=3b(3)=4
SIZE():
返回数组大小
UBOUND():
返回数组上限
UNPACK(vector,mask,field):
根据逻辑运算的结果,返回一个变形的多维数组。
结果会根据在内存中的顺序,如果逻辑为真,回填入vector的值,否则就回填入field的值。
Integer:
:
a(4)=(/1,2,3,4/)
Integer:
:
b(2,2)
Logical:
:
c(2,2)=reshape((/.true.,.true.,.false.,.false./),(/2,2/))
B=unpack(a,c,0)
执行后B=(/1,2,0,0/)
数组变形函数:
RESHAPE(data,shape):
通过shape的设置,把一串数据“整形”后,再传给一个数组。
例如:
integer:
:
a(3,3)=(/1,2,3,4,5,6,7,8,9/)
integer:
:
b(9)
b=reshape(a,(/9/))
a=reshape(b,(/3,3/))
但是:
integer:
:
a(3,3)
integer:
:
b(9)
a=(/1,2,3,4,5,6,7,8,9/)!
编译出错,形状不同,必须用函数
b=reshape(a,(/9/))
a=reshape(b,(/3,3/))
END
TRANSPOSE():
返回一个转置矩阵
C.算术表达式
书写表达式应注意几点:
(教材41面1、2、3、4)
注意表达式结果的类型和种别。
5.赋值语句
赋值语句的功能:
计算、类型转换、赋值
6.输入输出语句
A.表控格式的输入输出:
READ*,A,B
READ(*,*)A,B
注意:
⒈各数据间有分隔符:
逗号或空格。
⒉类型匹配:
整数:
不得带小数点;
实数:
可以为整数;小数形式;指数形式
复数:
(实部,虚部);实部和虚部可以为整型也可为实型
字符:
‘一串字符’,赋值时长度转化;
一串字符,即‘’可省略。
逻辑:
以T或F作为第一个字母的字符串(点号、空格在前忽略)
如果输入一个整型数,则偶数为假,奇数为真
⒊个数:
1)不得少于变量的个数;
2)可分行输入;
3)多余的数据不起作用
4)每一个READ开始一个新的记录
⒋无效值的输入
⑴,,连续两个逗号,对变量值不影响。
⑵空格可以多个,/表示输入数据结束,后面的数据被取消,
没有输入数据的变量值为0;
Read*,A,B,C
输入:
2,1/3
结果:
A=2B=1C=0
⑶r*[c]:
r为重复数
4*0.5,2*3,2*’AB’,3*(1.0,-1.0)
⒌多个Read语句
每个Read必须从一个新的行输入数据
PRINT*,A,B
WRITE(*,*)A,B
⒈固定的输出宽度
⒉类型:
复型:
带()输出
逻辑型:
T,F输出一个字符
字符型:
‘’丢失,采用左对齐输出
3.一行显示不下,数据自动换行输出
4.多个PRINT语句:
每个开始输出一个新的记录
B.输入输出编辑符
一般形式:
READ(<设备号>,<格式说明>)<输入表>
READ<格式说明>,<输入表>
WRITE(<设备号>,<格式说明>)<输出表>
PRINT<格式说明>,<输出表>
格式说明:
*、格式语句标号、整型变量、格式字符表达式、数组或数组元素
作用:
精确地说明每一个数据应该怎样输入或输出,包括类型、小数点位置、有效位数、输出结果的形式
1、FORMAT语句标号(为提高程序的可读性,F90中一般不用)
WRITE(*,900)INT1,REAL1(3),CHAR1
900FORMAT(I5,3F5.4,A16)
2、整型变量名(使用ASSIGN语句)
ASSIGN900TOMYFMT
900FORMAT(I5,3F5.4,A16)
WRITE(*,MYFMT)IOLIST
3、字符表达式或变量
WRITE(*,’(I5,3F5.4,A16)’)IOLIST
或:
CHARACTER(80)MYLIST
MYLIST=‘(I5,3F5.4,A16)’
WRITE(*,MYLIST)IOLIST
4、数组或数组元素名
CHARACTER(6)array(3)
DATAarray/'(I5',',3F5.2',',A16)'/
WRITE(*,array)iolist
CHARACTER(80)array(5)
array
(2)='(I5,3F5.2,A16)'
WRITE(*,array
(2))iolist
1整型编辑符rIw[.m]
注意:
1.数字在指定的区域内右端对齐,不足w则左边补空格。
2.负数的符号也包含在字段宽度内
3.如果应输出的列数超过了规定的字段宽度,则不输出有效数据,以w个*填充。
4、BN,BZ:
BlankinterpretationSpecifiesinterpretationofblanksinnumericfields(空格是否当0处理)仅用于输入格式语句,如100FORMAT(BN,2I3)
2实型编辑符
[r]Fw.d[r]Ew.d[r]Gw.d
r—重复系数w—字段宽度(总宽度)d—小数部分宽度
F编辑符功能:
用于实数编辑,小数形式的输出(定点数:
单精度实数,4个字节,7个有效数字)
F8.3,F6.2
1不带小数点
1234567890123456
12345.6789012.34
2带小数点
123.4567345.8910
123.4567345.89!
d不起作用,取W个宽度,小数点计入w中
3以表控格式
123.12,456.23
123.12456.23
如果:
123.4562,23.1436
123.45620!
第二个数读入时碰到逗号,表示该数输入结束
指数形式的输入
F8.3
1234E3!
1234.000
0.1234E3!
123.400
E编辑符功能:
格式:
数符+0+小数点+小数部分+E+符号+指数部分2位
3d4
指数部分宽度固定4列,w>=d+3+4
优点:
不必事先估计数的大小,能容纳任意大小的数据。
G编辑符功能:
根据输出实数大小决定用F或E格式输出。
较大或较小,自动按E格式
条件:
abs(A)<0.1.OR.abs(A)>10*d使用E格式输入输出
条件:
10*d>abs(A)>=0.1使用F格式输入输出
注意:
采用F格式,d为全部数字的总位数,且优先满足整数位数
WRITE(*,‘(G9.4)’)123.0!
G9.4=F5.1,4X
WRITE(*,‘(G9.2)’)123.0!
G9.2=E9.2
3逻辑格式编辑符:
rLw
功能:
逻辑值的输入输出
规则:
输出一个字母,在字段最右端,前面补空格
输入时按宽度读取,以第一个字母作为逻辑值,如果第一个字母非T或F,则出错
WRITE(*,‘(L4)’).TRUE.!
输出三个空格和一个T
4字符格式编辑符:
[r]AwA
字符型数据的输入:
字符变量的长度L对格式起一定的作用
若w>L,仅保留右边的L个字符
若w 字符变量的输出: 输出形式要有w个字符 若w 若w>L右对齐,左边补w-L个空格 CHARACTER(LEN=5): : A A=‘AB’! ‘AB’ A=‘ABCDEFG’! ‘ABCDE’ READ*,A‘AB’! ‘AB’ ‘ABCDEFG’! ‘ABCDE’ READ‘(A3)’‘AB’! ‘AB’ ‘ABCDE’! ‘ABC’ READ‘(A7)’‘ABCDEFGH’! ‘CDEFG’ A=‘ABCDE’ PRINT‘(A3)’,A! ABC PRINT‘(A7)’,A! ABCDE 5X编辑符功能: 在输出时产生空格;输入时,表示跳过n个字符 1.不需变量对应2.是不可重复的编辑符 6撇号编辑符功能: 输入所需的字符串,描述字符串常量。 PRINT‘(‘I=’,I3)’,I! 错,应将其中一对引号改为双引号 7H编辑符nH<字符串> 注意: 1.N必定等于字符串长度,否则编译出错 PRINT‘(2HI=,I3)’,I! 正确 PRINT‘(3HI=,I3)’,I! 出错 2.字符串中空格有意义 8斜杠编辑描述符作用: 结束本记录的输出并开始下一个记录的输出(换行输出) 9冒号编辑符作用: 结束前一个编辑符的功能。 注意: 1.用空格式语句来输出一个空行,如: FORMAT() 此时,WRITE,PRINT语句不应有变量输出,否则出现死循环 2.遇到右括号或斜杠‘/‘编辑符,表示结束本记录的输出,但不意味着停止全部输出,只要输出列表中还有未输出变量,将重复使用格式说明或斜杠右边的格式说明组织输出。 PRINT‘(2HI=,/I3)’,I PRINT‘(2HI=,I3)’,I,J I=1 I=2 3.FORMAT语句和WRITE语句的位置可以相邻,也可在程序的任何一个地方 4.用表控格式输出时,在WRITE语句中的输出项可以包含字符串但在输出时用到FORMAT语句,则不能再包含字符串,否则必须加以说明。 PRINT‘(2HI=,I3)’,I PRINT‘(I3)’,‘I=’,I! 出错应改为PRINT‘(A,I3)’,‘I=’,I 三、选择结构程序设计 1.关系表达式和逻辑表达式 1关系运算符: 注意: 相等==不等/= ●复型常量和变量: 只能进行.EQ.、.NE. ●.EQ.(==)或.NE.(/=)要小心使用;实型量一般要改写: 0.1*10.EQ.1为.FALSE.应改为abs(0.1*10-1)<=1E-6 ●两个整型表达式进行逻辑运算结果为整型,而不是逻辑型 ●逻辑运算符之间的空格不能省略。 特别是.NOT.与其他逻辑运算符相连时。 2逻辑表达式和计算: 逻辑运算符: NOTANDOREQV(逻辑等)NEQV(逻辑不等)XOR(异或) 运算优先级: 从左到右依次降低 3运算顺序: ()函数算术关系逻辑 高低 4练习表达式的写法 1、数学式A 不能出现连不等式 2、1 3、M能被N整除! MOD(M,N)==0 4、整数A、B之一为0但不同时为0! A*B==0.AND.A/=B 5、A、B同时为正,或同时为负! A*B>0 6、逻辑型变量A值为真(或为假)! A 7、字符变量A为小写字母! A>=’a’.AND.A<=’z’ 8、字符变量A为字母! A>=’a’.AND.A<=’z’.OR.A>=’A’.AND.A<=’Z’ 2.在任何一种程序设计语言中,都存在三种基本程序结构: 顺序结构、分支结构(条件判断)、循环结构(反复执行某段程序) 子程序 3.逻辑IF语句 语句写法: IF(条件)一个可执行语句 注意: 多个逻辑IF并列,注意它们的顺序 一般在循环跳转中使用 4.IF—THEN—ELSE结构(块IF结构) 书写格式: IF(条件)then: 块IF语句 语句体1(then块): 由若干语句组成 ELSE: ELSE语句 语句体2(else块): 由若干语句组成 ENDIF: ENDIF语句 ●特别注意和IF—THEN—ELSEIF—ELSE结构的区别。 ●等价于多个IF结构嵌套,但只有一个ENDIF语句 5.多分支结构 方法1: 转化为单分支,逻辑IF语句并列 IF(X>=0.AND.X<1)Y=1.0 IF(X>=1.AND.X<2)Y=2.0 方法2: 逐次二分,转化为块IF结构,块IF嵌套 注: 从一头顺序二分 缩进对齐写法或串名写法(结构名) else含义: 条件不要重复 静态调试(阅读技巧) IF(X>=0)THEN IF(X>=1)THEN IF(X<2)THEN Y=2.0 ENDIF ELSE Y=1.0 ENDIF ELSE PRINT*,’数据输入错误! ’ ENDIF 方法3: 将之简写为ElseIF IF(X>=2)THEN PRINT*,‘越界’ ELSEIF(X>=1)THEN Y=2.0 ELSEIF(X>=0)THEN Y=1.0 ELSE PRINT*,’越界’ ENDIF ●举例: 任意输入4个整数,把它们按从小到大输出。 PROGRAMMAIN IMPLICITNONE INTEGER: : A,B,C,D,E READ*,A,B,C,D IF(A>B)THEN E=A;A=B;B=E ENDIF
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- FORTRAN90 指导 汇编