使用范围:计数型循环——已知循环次数 一般形式:
[结构名:] DO 循环控制变量V=初值e1, 终值e2 [ , 步长值e3] 循环体 !重复执行的语句 ENDDO [DO结构名]
e1、e2、e3可以是正值,也可以是负值,最好是整型。 例:DO I=1,100,2 S=S+I ENDDO 有关注意事项:
1.e1,e2,e3可为常量、已有值的变量或表达式 e3=1时可省略 2. v与e1,e2,e3类型不一致,按赋值语句转化。 do I=1.5,3.6,1.2 do I=1,3,1 3. 语句执行次数:
do语句:1次(负责赋初值和循环次数的计算) 循环体语句次数:max(int((e2-e1+e3)/e3), 0)
4、 e3不允许为零(可正、可负),否则程序出错
do I=1.5,6.5,-0.5 I的取值为:? 5、循环变量可不在循环体内出现,仅控制循环次数。 do I=1,10
print*,’a’ Enddo
6、DO循环变量在循环体内不能赋以新值,但可以引用。即循环变量在循环体中不能出现在赋值号的左边。 例:
DO I=3,6
I=5 !!错误 J=I+I ;print *,I ENDDO
7、循环变量在循环体内不能被重新赋值,但在循环体外可以被重新赋值。两个并列的DO循环可以使用相同的循环变量 DO I=1,10,2
? ENDDO I=20
? DO I=1,5 ? ENDDO
9、在带循环变量DO 结构中仍可使用EXIT和CYCLE语句。 10、在DO结构中包含的IF结构和CASE结构等必须是完整的结构,不允许出现结构的交叉。 11、循环可以不经ENDDO终止,但是不能从循环体外转入循环体内(GOTO)。
12、给定一个循环,首先要判断循环是否一次也不做。如果循环变量大于终止,循环一次也
不做,直接输出结果。
13、循环正常退出时,v的值超过循环变量的终值;循环非正常退出时,v保持当前值。 DO WHILE 结构
DO WHILE结构的一般形式:
[结构名:] DO WHILE(逻辑表达式) 循环体 END DO [结构名] 相当于: DO
IF(.NOT.逻辑表达式)EXIT 循环体 END DO
DO结构嵌套
DO结构嵌套:一个DO结构循环体内可以包含另一个完整的DO循环结构,这就是DO循环结构的嵌套 注意:
3、执行到EXIT语句,没有指明结构名时,转到当前循环体外;若指定了结构名,则转出该结构名代表的循环体外; 如:II: DO I=3,50
JJ: DO J= 2,I-1 IF (MOD(I,J)==0) EXIT END DO JJ
IF(J>=I) PTINR*,I END DO II
隐含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输出一行 DO I=1,3 PRINT*,1 PRINT*,I PRINT*,2 ENDDO PRINT*,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、子例行子程序分为:内部子例行子程序,外部子例行子程序 外部函数子程序
Visual Fortran90的函数:
1、内在函数(系统函数、标准函数) 如:sin、cos、sqrt、abs、kind??
2、Function语句编写的函数(自定义) 分为内部函数、外部函数 函数子程序的编写方法
[RECURSIVE]FUNCTION 函数名(虚元表)RESULT(结果名) 说明部分 程序体:具体计算 END [FUNCTION [函数名]]
如:FUNCTION FACT(N) RESULT(FACT_RESULT) IMPLICIT NONE INTEGER::N,I,FACT_RESULT FACT_RESULT=1 DO I=1,N FACT_RESULT=FACT_RESULT*I ENDDO
END FUNCTION FACT PROGRAM MAIN INTEGER::FACT,SUM=0,I DO I=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(INOUT):表示虚元既要从实元中获得值,又要向实元传送值,作为子程序的输入输出。
例:REAL,INTENT(IN)::X,Y 子程序程序体的写法
分为说明部分和执行部分。
1、说明部分应对程序体内一切变量、数组等实体(包括虚元)作出说明,同时还要说明函数结果变量名,但不可说明函数名。
2、执行部分中必须对函数结果名至少赋值一次。
外部子例行子程序
外部子例行子程序:过程的另一种形式。用户定义,用于完成复杂计算任务,返回一个或多个值,或用于其它数据处理。 外部子例行子程序的结构
[Recursive]Subroutine 子程序名(虚元表) 说明部分 程序体
End [Subroutine [子程序名]] 与函数子程序的区别 1.没有RESULT关键字。
2、虚元:负责子程序的全部输入和全部输出 3、无虚元时:SUBROUTINT 子程序名 或 SUBROUTINT 子程序名() 4、函数子程序的调用是表达式形式。
而子例子程序必须通过CALL语句来调用。 CALL 子程序名(实元表) 如:
SUBROUTINE FACT(N,FACT_VALUE) IMPLICIT NONE INTEGER,INTENT(IN)::N INTEGER,INTENT(OUT)::FACT_VALUE INTEGER::I FACT_VALUE=1 DO I=1,N FACT_VALUE=FACT_VALUE*I ENDDO
END SUBROUTINE FACT PROGRAM MAIN INTEGER::SUM=0,I,VALUE DO I=1,5 CALL FACT(I,VALUE) SUM=SUM+VALUE ENDDO PRINT*,SUM END
待留
字符型数据基础
字符型常量与变量
说明 (1)字符常量区分字母大小写 (2)空格为有效字符
(3)字符不受fortran90字符集的限制
(4)单撇号为有效字符时,改写为两个单撇号或双撇号 (5)种别参数用前缀法表示 (6)长度>=0 字符型常量长度的计算 长度为字符的个数: 起止界不算
两个单撇号或双撇号算一个 空格为有效字符算一个 字符型变量的类型说明: 1、一般形式:
Character ([len=]n1[,[kind=]n2] )[,属性列表]:: 变量名[=初值] 2、只有长度说明而无种别参数说明时,可采用以下说明: Character(len=7)::A Character(7)::A Character*7::A
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库fortran90 知识点整理(3)在线全文阅读。
相关推荐: