fortran90 知识点整理.docx
- 文档编号:25719135
- 上传时间:2023-06-11
- 格式:DOCX
- 页数:29
- 大小:63.84KB
fortran90 知识点整理.docx
《fortran90 知识点整理.docx》由会员分享,可在线阅读,更多相关《fortran90 知识点整理.docx(29页珍藏版)》请在冰豆网上搜索。
fortran90知识点整理
Fortran90关于变量说明得新功能:
1、在变量说明得同时,可以给变量赋初值。
INTEGER:
:
I=5,J=126
REAL:
:
X=7、2,Z,W=774、2
2、在说明变量得同时也可说明其种别
REAL(KIND=4):
:
X,Y或REAL(4):
:
X,Y
3、在说明变量得同时,还可说明变量得属性
INTEGER,PARAMETER:
:
I=5,J=123
Ps:
PARAMETER属性
(1)功能:
用一个符号代表一个常量,称为符号常量(常数)
(2)写法:
Real,Parameter:
:
G=9、8&&说明类型时赋值
(3)位置:
位于可执行语句之前
REAL,DIMENSION(1:
10):
:
A
2、3、6派生数据类型
根据需要而由基本数据类型定义新得数据类型。
在一个派生类型中可包含多个基本类型。
如:
TYPESTUDENT(定义开始)
CHARACTER(LEN=20):
:
DEPARTMENT
CHARACTER(LEN=10):
:
CLASS
CHARACTER(LEN=15):
:
NAME
INTEGER:
:
NUMBER(成员定义)
ENDTYPESTUDENT(定义结束)
派生类型变量得定义:
TYPE(STUDENT):
:
PERSON
变量得赋值:
PERSON=(”PUTER”,”92_2”,”LILIN”,21)
成员得表示:
PERSON%CLASS=“92_2”
PERSON%NAME=“LILIN”
主程序其她限制
主程序得可执行部分不能包含有RETURN语句或者ENTRY语句。
程序名对可执行程序就是全局得,而且不得于该可执行程序中得任何其它程序单元名、外部过程名或公用块名相同,也不得于主程序内得任何局部名相同。
在主程序得作用范围内得说明不得包含OPTIONAL语句、INTENT语句、PUBLIC语句或它们得等价属性,在主程序内SAVE语句不起作用。
主程序内得任何内部过程得定义必须跟在CONTAINS语句之后。
2、3、2子程序
子程序就是可以完成某一独立算法或功能得程序单元,但它功能得具体体现要通过主程序(或子程序)得调用来实现。
按子程序与主程序得位置关系分为内部过程与外部过程。
2、4、3模块
模块也就是一种在程序单元之外独立编写得程序单元。
它有独特得形式,即模块程序单元内没有可执行语句,除了说明语句外,最多包含内部过程。
模块得主要作用就是供其它程序单元引用。
程序单元引用模块,实际就是将模块内得全部语句复制到本程序单元。
因此模块起共享及复制得作用。
模块得引用采用语句:
USE模块1,模块2,…
基本语句概述
程序得最基本得语句主要有四种:
类型说明语句、赋值语句、输入语句、输出语句。
运用这些基本得语句,就可以编写一些简单得程序。
内在函数
FORTRAN90配置得函数称为内在函数。
内在函数分为三种:
基本函数:
SIGN符号
函数值:
|A1|(若A2>0)
|A1|(若A2<0)SIGN(A1,A2)
Eg:
SIGN(3、0,2、0)=3、0
SIGN(3、0,2、0)=3、0
某些函数参数只能为实型
如:
log(2、0)(loG
(2)错)
转换函数
函数名
含义
FORTRAN举例
INT(X)
实型转换整型、
复型得实部转换整型
INT(2、3)=2
INT((1、2,3、5))=1
REAL(X)
整型转换实型、
复型得实部转换实型
REAL(8)=8、0
REAL((1、2,3、5))=1、2
PLEX(X,Y)
将X,Y合成为复型
PLEX(2、3,1、5)= (2、3,1、5)
INT(X,KIND):
将X值转换为整型,以KIND得值作为种别参数
REAL(X,KIND):
将X值转换为实型,以KIND得值作为种别参数
PLEX(X,Y,KIND):
将X,Y转换为复型,以KIND得值作为种别参数
查询函数
KIND
SELECTED_INT_KIND
SELECTED_REAL_KIND
PRECISION
RANGE
……
不轻易使用整型量除整型量1、0/22、0**
(1)
运算对象类型相同时,运算结果得类型为同一类型
注意:
5/2=21/2=0!
!
运算对象类型不同时,系统一般先转换成相同类型后再运算
转换规则就是:
较低级得类型转换为较高级得类型
数据类型隐含得高低次序为(由低到高):
整型→实型→双精度→复型
例:
8/5+2、0*5/2=6、0(逐步转化)
赋值语句
1、类型要求
逻辑型、字符型得赋值语句要求“=”两边类型相同
数值型赋值,不区别整型、实型与复型
2、种别方面
字符型要求种别相同
其余类型得e、V种别允许不同
输入输出语句
1、I/O得对象——列在中
I/O就是相对于内存而言得,
键盘属于输入设备,
显示器属于输出设备,
优盘、硬盘既就是输入设备,又就是输出设备。
2、I/O得方向及语句
READ(U,f)U:
设备(部件)f:
格式
WRITE
其中:
输入READ语句
输出PRINT语句,只输出到显示器
WRITE语句,适合任何输出设备
U(部件)*:
系统约定设备
某个值:
指定通道号(设备逻辑号、文件号)
表控格式I/O(*):
系统约定得格式。
f(格式)基本格式(自定格式)I/O:
按用户要求得格式组织I/0。
带控制信息表得I/O:
I:
碰到回车(ENTER)为一个记录。
O:
一行为一个记录。
程序执行过程中按表控格式输入数据
各数据间有分隔符:
或空格
类型匹配:
整型:
带小数点只取整数部分;
复数:
(实部,虚部);
字符:
‘一串字符’:
赋值时长度转化或一串字符即‘’可省略。
逻辑:
以T或F作为第一个字母得字符串(点号1个、空格多个在前忽略)
3、输入得数据必须就是常数,不能就是变量与表达式
如输入2+1,则出错。
4、输入数据个数:
1)不得少于变量得个数;
2)可分行输入;
3)多余得数据不起作用
5、空格可以多个,/表示输入数据结束,后面得数据被取消,没有输入数据得变量值为原值;
Read*,A,B,C
输入:
2,1/3
结果:
A=2B=1C=0
6、如果几个连续变量需要赋同一个值,可以使用重复因子r,即r*[c]:
r为重复数
4*0、5,2*3,2*’AB’,3*(1、0,1、0)
输入输出得三种不同得格式:
1.表控格式得输入输出
2.有格式得输入输出
3.带控制信息表得输入输出
整型编辑符:
Iw[、m]
1.I编辑符控制输出:
功能:
用于整型数据得输入输出
格式:
IwIw、mrIw
w—输入输出数据字段总宽度
m—至少m位数字
r—为重复系数
例1.设 J=10,K=12,L=12
WRITE(*,”(I3,I5,I7)”)J,K,L
□10□□12□□□□123
注意:
1.数字在指定得区域内右端对齐,不足w则左边补空格。
2.负数得符号也包含在字段宽度内
3.如果应输出得列数超过了规定得字段宽度,则不输出有效数据,以w个*填充。
4、BN,BZ:
Blankinterpretation
Specifiesinterpretationofblanksinnumericfields(空格就是否当0处理)仅用于输入格式语句,如
read“(BN,2I3)”,I,J
例2.如果将格式串改为:
“(I3,I5、4,I7、5)”
则输出:
□100012□□00123
例3.如果L=123456
□100012□123456
!
!
Iw、m:
m<位数,则按照实际数输出
实型编辑符
1.编辑符格式
[r]Fw、d将数据按小数形式输出
[r]Ew、d将数据按指数形式输出
[r]Gw、d根据数据大小决定采用E或F格式
r—重复系数
w—字段宽度(总宽度)
d—小数部分宽度
F编辑符
功能:
用于实数编辑,小数形式得输出(定点数:
单精度实数,4个字节,7个有效数字)
当实型数值小于0、0(负数)时,则w>=n+d+2
当实型数值大于或等于0、0时,则w>=n+d+1
用此来确定w得宽度
注意:
1. w包括数符与小数点两位
2. 若数据小于w位,则左边补空格
3. 输出值时舍入,而不就是截断
4、如果就是科学计数法则转换小数形式
字符型编辑A
A用来编辑字符型变量,它不关心该字符串得长短如何。
例:
CHARATER*5A,B,C
READ(*,’(A,A,A)’)A,B,C
WRITE(*,’(A,2X,A,2X,A)’)A,B,C
END
输入:
ABC□DBASICFORMAT
结果:
ABC□D□□BASIC□□FORMA
!
!
!
2X表示□□
X编辑描述符
功能1:
在输出时产生空格,它得一般形式为:
nX
关系表达式与逻辑表达式
关系运算符:
>、>=、<、<=、==(等于)、/=(不等于)(常用)
、GT、、、GE、、、LT、、、LE、、、EQ、、、NE、
注意
1、每个关系表达式中得关系运算符只准出现1次,运算符两侧都就是表达式;
错例:
2 2、运算对象: 关系运算符两边得运算对象类型应相容: 错例: A==、TRUE、2<‘A’ 复型: 只能进行==、/=。 不能比较大小 字符型: 可以进行各种关系运算 逻辑运算符(5个) 、NOT、a: 求反运算, a、AND、b: a与b同时为真,表达式值才为真 a、OR、b: a与b有一个为真,表达式值就为真 a、EQV、b: a与b值相等,表达式值为真 a、NEQV、b: a与b值不相等,表达式值为真 类型运算符优先级 括号()1 算术运算**2 *,/3 +,4 关系运算>,>=,<,<=,==,/=5 逻辑运算、NOT、6 、AND、7 、OR、8 、EQV、,、NEQV、9 IF语句 使用范围: 特殊单分支 语句写法: IF(条件)一条语句 例: IF(X>0)PRINT*,X 执行过程: 1、计算条件表达式得值 2、真右边语句IF得下一个语句 3、假IF得下一个语句 注意: 1、右边通常为一条且只一条可执行语句。 错例: IF(A 2、不能为以下语句: END、另一个逻辑IF、块IF、ELSIF、ENDIF、DO 错例: IF(X<2)END 3、常应用于简单得条件赋值或条件转移(在循环结构中) 4、不论条件真假都执行IF得下一个语句 IF结构 使用范围: 二分支结构 书写格式: IF(条件)THEN! 块IF语句 语句体1(then块)! 由若干语句组成 ELSE! ELSE语句 语句体2(else块)! 由若干语句组成 ENDIF! ENDIF语句 IF结构执行过程: 计算条件得值 真THEN块ENDIF得下一个语句 假ELSE块ENDIF得下一个语句 注意: 1、IF—then标记语句得开始,ENDIF与之匹配,标记语句块结束 2、条件表达式写法 IF结构得缺省形式: 缺省ELSE块: IF(lexp)THEN 语句体1 ENDIF 缺省THEN块: IF(lexp)THEN ELSE 语句体2 ENDIF 多分支结构 方法1: 转化为单分支,逻辑IF语句并列 方法2: 逐次二分,转化为块IF结构嵌套 嵌套过多容易出错,也不易维护,因此应尽量减少嵌套得层次; 方法就是把条件分细,列成多条ELSEIF语句,ELSEIF结构为: Elseif结构: IF(e1)THEN block1 ELSEIF(e2)then block2 ELSEIF(e3)then block3 ELSE blockn ENDIF IF结构得取名 IF结构可: 无名或有名 IF结构得取名与变量得取名方法相同 IF结构名: IF(e1)THEN 块1 ELSEIF(e2)THEN[IF结构名] 块2 … ELSEIF(en)THEN[IF结构名] 块n ELSE[IF结构名] 块n+1 ENDIFIF结构名 同一IF结构中得结构名一定要一致! CASE结构 使用范围: 多分支结构 SELECTCASE(情况表达式) CASE(情况选择器1) block1(块1) CASE(情况选择器2) block(块2) CASE(情况选择器n) blockn [CASEDEFAULT 默认块] ENDSELECT 执行过程: 1、计算情况表达式得值 2、顺序匹配各情况选择器,执行相应得block1,再到ENDSelect下一个语句 3、如果均不匹配,则执行默认块 4、执行ENDSelect得下一个语句 情况表达式: 整型变量、逻辑变量、字符型变量或相应得表达式 不能就是实型或复型表达式 表达式列表(情况选择器): 只能就是常量,不能为变量,可有多条语句; 类型与情况表达式类型应一致,尤其字符型时种别参数必须一致,但长度可以不同; (逗号)分隔符表示分隔单个值得列表。 例: case(3,5,7)值不能重复 : (冒号)分隔符表示值得范围,连续得值 例: case(5: 10);case(‘i’: ‘n’) 下界、上界可省略 Casedefault: 最多出现一次 例48输入一个数,判断能否被3整除,打印相关信息注意输出得格式为(*,’(I6,2X,A)’) 循环结构程序设计 循环得分类: 1、已知循环次数2、已知循环条件 循环得表示及适用范围: 循环均由Do结构表示,其Do结构共有三种形式: 1.不带循环变量得DO结构 2.带循环变量得DO结构 3.DoWHILE循环结构 不带循环变量得DO结构 一般形式 [结构名: ]DO! 循环开始语句 循环体! 循环体 ENDDO[结构名]! 循环结束语句 说明: 1、结构名可以省略,多层嵌套时,为使结构清晰才用; 2、循环体可以为0~n条语句或结构,包含以下语句: 重复语句,循环变量得变化,循环控制语句等; 3、DO循环入口语句,只能从该语句进入循环; 4、ENDDO循环终止语句,可以不经过该语句退出循环 使用范围: 循环次数未知,仅给定了循环终止条件 无循环变量得DO结构执行过程: 进入DO结构后,从DO语句下面第一句执行起顺次执行到ENDDO前得最后一句, 再返上来从DO语句下面第一句执行起,重复执行整个DO块。 对于不带控制变量得DO结构,DO块中必须有EXIT语句,使它停止循环,退出循环,转向执行ENDDO下面得语句。 EXIT与CYCLE语句 EXIT语句 循环出口语句,一般形式为: EXIT 作用: 停止循环,将控制转移到当前循环(或指定do结构)之外。 一般用法 IF(逻辑表达式)EXIT[DO结构名] CYCLE语句 短路语句,一般形式为: CYCLE[DO结构名] 作用: 在循环执行到该语句时,跳过循环体在它后面得那些语句。 再从循环体得第一条语句开始执行。 一般用法: IF(逻辑表达式)CYCLE[DO结构名] 带循环变量得DO结构 使用范围: 计数型循环——已知循环次数 一般形式: [结构名: ]DO循环控制变量V=初值e1,终值e2[,步长值e3] 循环体! 重复执行得语句 ENDDO[DO结构名] e1、e2、e3可以就是正值,也可以就是负值,最好就是整型。 例: DOI=1,100,2 S=S+I ENDDO 有关注意事项: 1、e1,e2,e3可为常量、已有值得变量或表达式e3=1时可省略 2、v与e1,e2,e3类型不一致,按赋值语句转化。 doI=1、5,3、6,1、2doI=1,3,1 3、语句执行次数: do语句: 1次(负责赋初值与循环次数得计算) 循环体语句次数: max(int((e2e1+e3)/e3),0) 4、e3不允许为零(可正、可负),否则程序出错 doI=1、5,6、5,0、5I得取值为: ? 5、循环变量可不在循环体内出现,仅控制循环次数。 doI=1,10 print*,’a’ Enddo 6、DO循环变量在循环体内不能赋以新值,但可以引用。 即循环变量在循环体中不能出现在赋值号得左边。 例: DOI=3,6 I=5! ! 错误 J=I+I;print*,I ENDDO 7、循环变量在循环体内不能被重新赋值,但在循环体外可以被重新赋值。 两个并列得DO循环可以使用相同得循环变量 DOI=1,10,2 … ENDDO I=20 … DOI=1,5 … ENDDO 9、在带循环变量DO结构中仍可使用EXIT与CYCLE语句。 10、在DO结构中包含得IF结构与CASE结构等必须就是完整得结构,不允许出现结构得交叉。 11、循环可以不经ENDDO终止,但就是不能从循环体外转入循环体内(GOTO)。 12、给定一个循环,首先要判断循环就是否一次也不做。 如果循环变量大于终止,循环一次也不做,直接输出结果。 13、循环正常退出时,v得值超过循环变量得终值;循环非正常退出时,v保持当前值。 DOWHILE结构 DOWHILE结构得一般形式: [结构名: ]DOWHILE(逻辑表达式) 循环体 ENDDO[结构名] 相当于: DO IF(、NOT、逻辑表达式)EXIT 循环体 ENDDO DO结构嵌套 DO结构嵌套: 一个DO结构循环体内可以包含另一个完整得DO循环结构,这就就是DO循环结构得嵌套 注意: 3、执行到EXIT语句,没有指明结构名时,转到当前循环体外;若指定了结构名,则转出该结构名代表得循环体外; 如: II: DOI=3,50 JJ: DOJ=2,I1 IF(MOD(I,J)==0)EXIT ENDDOJJ IF(J>=I)PTINR*,I ENDDOII 隐含DO循环 隐含DO循环实际上就是带控制变量得DO结构。 但简化成只有DO结构得第一句,且把DO关键字隐去。 隐含DO循环得形式为: (list,v=u1,u2,u3) 说明: 1、左括号相当于DO,右括号相当于ENDDO; 2、List可以就是一个或多个常量、变量、数组元素等,甚至可以就是另外得隐含DO循环(隐含DO循环嵌套) 不能独立存在,主要用于输入输出语句,常用于数组得输入输出。 如: READ*,(A(I),I=1,5) READ*,A (1),A (2),A(3),A(4),A(5) 隐DO、显DO执行过程得区别 1、输入、输出格式得区别: PRINT*,(I,I=1,3)PRINT*,1,2,3输出一行 DOI=1,3PRINT*,1 PRINT*,IPRINT*,2 ENDDOPRINT*,3 输出三行 几种常见得隐含DO循环得形式 1、按指定步长读写。 例如 PRINT*,(J,J=1,7,2) 2、隐含DO循环与普通变量混合使用。 例如 PRINT*,A,B,(X(I),I=1,3),C 3、用于输出一些特殊符号。 例如 PRINT*,(’’,I=1,80) 4、隐含DO循环可以并列出现。 例如 print*,(I,I=1,2),(J,J=1,2) 程序单元与过程 子程序单元不能独立存在,只能被主程序单元或被其它子程序单元调用,甚至可以递归调用(调用本身) 子程序(又称过程)得分类 1、函数子程序分为: 内部函数子程序,外部函数子程序 2、子例行子程序分为: 内部子例行子程序,外部子例行子程序 外部函数子程序 VisualFortran90得函数: 1、内在函数(系统函数、标准函数) 如: sin、cos、sqrt、abs、kind…… 2、Function语句编写得函数(自定义) 分为内部函数、外部函数 函数子程序得编写方法 [RECURSIVE]FUNCTION函数名(虚元表)RESULT(结果名) 说明部分 程序体: 具体计算 END[FUNCTION[函数名]] 如: FUNCTIONFACT(N)RESULT(FACT_RESULT) IMPLICITNONE INTEGER: : N,I,FACT_RESULT FACT_RESULT=1 DOI=1,N FACT_RESULT=FACT_RESULT*I ENDDO ENDFUNCTIONFACT PROGRAMMAIN INTEGER: : FACT,SUM=0,I DOI=1,5 SUM=SUM+FACT(I) ENDDO PRINT*,SUM END 说明: 子程序END语句写法: END[FUNCTION[函数名]] 子程序END语句功能: 1、函数单位得结束标志 2、将控制返回到主调程序。 子程序开始语句得写法 [RECURSIVE]FUNCTION函数名(虚元表)RESULT(结果名) 1、作为函数子程序得第一行(注释行除外)。 2、如果函数就是递归得,则应以RECURSIVE开头。 3、函数名与普通变量名得取法相同,且为全局名,即作用域为整个程序,不得与已有得全局名同名。 4、主调程序与被调程序两个单位之间得数据传递: ①RESULT(结果名): 子程序得一个输出结果 一般写法: 函数名_RESULT,用于保存一个计算结果,称为函数值。 且结果名有类型,必须在子程序说明部分说明类型。 ②虚元表: 子程序得所有输入,及除函数值之外得其她计算结果得输出。 虚元之间用逗号分隔,都要在说明语句中说明类型。 如果没有虚元,函数名后就是一对空括号。 5、虚元得含义: 编写子程序时没有具体值(调用时或调用结束后才获得数值),因此只就是一个符号,表示输入、输出,名字可随便用户取。 6、虚元可以就是变量名、数组名、过程名、指针等。 7、虚元得可选属性INTENT: INTENT(IN): 表示函数开始时,虚元从实元中获得值,作为子程序得输入(不得再改变其值) INTENT(OUT): 表示函数结束时,把虚元得值传送给实元,作为子程序得输出(对应得实元不能就是表达式) INTENT(INO
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- fortran90 知识点整理 知识点 整理