FORTRAN90指导Word文档下载推荐.docx
《FORTRAN90指导Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《FORTRAN90指导Word文档下载推荐.docx(79页珍藏版)》请在冰豆网上搜索。
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值
short_int=selected_int_kind(3)
判断可以有10个有效位数,指数可以记录到50的浮点数kind值
long_real=selected_real_kind(10,50)
判断可以有3个有效位数,指数可以记录到3的浮点数kind值
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
)short_int,b
(I3,1X,E10.5)"
)long_real,c
)short_real,d
stop
end
programex0436
real(kind=4):
a
real(kind=8):
b
a=1.0_4!
确定1.0这个数字是使用单精度
b=1.0_8!
确定1.0这个数字是使用双精度
write(*,*)a,b
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/)
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/)
b(9)
b=reshape(a,(/9/))
a=reshape(b,(/3,3/))
但是:
a(3,3)
a=(/1,2,3,4,5,6,7,8,9/)!
编译出错,形状不同,必须用函数
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<
L,右边加L-w个空格
字符变量的输出:
输出形式要有w个字符
若w<
L输出左边w个字符
若w>
L右对齐,左边补w-L个空格
CHARACTER(LEN=5):
A=‘AB’!
‘AB’
A=‘ABCDEFG’!
‘ABCDE’
READ*,A‘AB’!
‘ABCDEFG’!
READ‘(A3)’‘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<
C<
D!
不能出现连不等式
2、1<
x2+y2<
2
3、M能被N整除!
MOD(M,N)==0
4、整数A、B之一为0但不同时为0!
A*B==0.AND.A/=B
5、A、B同时为正,或同时为负!
A*B>
6、逻辑型变量A值为真(或为假)!
7、字符变量A为小写字母!
A>
=’a’.AND.A<
=’z’
8、字符变量A为字母!
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
=1)THEN
IF(X<
2)THEN
Y=2.0
ENDIF
ELSE
Y=1.0
PRINT*,’数据输入错误!
’
方法3:
将之简写为ElseIF
=2)THEN
PRINT*,‘越界’
ELSEIF(X>
PRINT*,’越界’
●举例:
任意输入4个整数,把它们按从小到大输出。
PROGRAMMAIN
INTEGER:
A,B,C,D,E
READ*,A,B,C,D
IF(A>
B)THEN
E=A;
A=B;
B=E
ENDIF
IF(C<
A)THEN
A=C;
C=B;
ELSEIF(C<
E=B;
B=C;
C=E
IF(D<
A)THEN
PRINT*,D,A,B,C
ELSEIF(D<
B)THEN
PRINT*,A,D,B,C
C)THEN
PRINT*,A,B,D,C
ELSE
PRINT*,A,B,C,D
6.多重同级选择判断(CASE结构)
写法:
SELECTCASE(表达式)
CASE(表达式列表1)
block1(块1)
CASE(表达式列表2)
block(块2)
--------
CASE(表达式n)
blockn
[CASEdefault
默认块]
ENDSelect
1.表达式:
整型变量、逻辑变量、长度为1的字符型变量或相应的表达式
2.表达式列表:
(1)用,(逗号)分隔符单个值的列表。
例:
case(3,5,7)值不能重复
(2)用冒号分隔的值的范围
case(5:
10,20);
case(‘i’:
‘n’)
类型与Setectcase中的一致,值范围下界、上界可省略。
(3)Casedefault:
只有一个,它不是必须的
7.练习:
4-3、4-8、4-13
4-3
REAL:
X,Y
READ*,X
=15)THEN
=30)THEN
=45)THEN
=75)THEN
90)THEN
Y=