fortran子程序【精选】

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1. 变量作虚参
(1)对应实参可以是同一类型的常量、变量、数组元 素和表达式。
(2)如果实参是常量或表 达式时,对应的虚参 变量值不应当改变。
3. 调用不一样。函数子程序一般在表达式中调用,子例 行程序通过call调用。
4. 用途不一样。只需得到一个计算值,一般采用函数子 程序的形式;希望通过子程序的运算得到一批数据, 应采用子例行程序。另外,使用子例行程序来完成一 些特定的操作。
10
三、 虚参实参数据传递
子程序中的虚参可以是变量名、数组名、函数名、 子例行程序名以及星号。
一行打印20个 “*”号,打两行。
8
subroutine opp(a,s1,s2) real a(5,5) s1=0
求矩阵两对角 线元素之和
do 10 i=1,5 s1=s1+a(i,i) 10 continue s2=0 do 20 i=1,5 j=5-i+1 s2=s2+a(i,j)
subroutine readin(a) real a(5,5) do 10 i=1,5 read(*,*) (a(i,j),j=1,5) 10 continue end
3
4
5
call sum(5,y3) call sum(6,y4) call sum(7,y5)
i i i
y i1
i1
i1
6
7
y=(y1+y2+y3)/(y4+y5)
i i
write(*,100) 'y=',y
i1
i1
format(1x,a,e13.6)
end
subroutine sum(n,s) integer n
1 (x 0)
else
y=-1.0
函数子程序必须以function
end if end
语句开头,end语句结束。
2
说明: 1. 函数名的取名方法与变量
名同,遵循I—N隐含约定, 否则需采用类型说明语句。
function myabs(x)
real myabs 定义法. 二
2. 函数名后的虚参可以是变量名、数组名和子程序名。 如没有虚参,一对圆括号不能省。
6. 同一源程序文件中,主程序和子程序先后次序无关紧要。
7. 函数子程序的调用形式与语句函数完全相同。 必须在调用程序中使外部函数名与函数子程序定义中函
数名的类型完全一致。必须保证函数名的类型、虚参的类 型与调用处的函数名以及实参类型一一对应。
4
function mye调用, 不代表某个值。
real s
s=0 do 10 i=1,n
子例行子程序必须以
s=s+i continue end
subroutine语句开头, 以end语句结束。
6
说明: 1. 子例行子程序取名法则与变量名同。 2. 如果没有虚参,程序名后的一对括号必须省略不写。
3. 子例行子程序也是独立的程序单位,return语句、 语句标号、变量的定义和使用与函数子程序相同。
第 九 章 数组 第 十 章 语句函数 第十一章 子程序 第十二章 数据共用存储单元
和数据块子程序 第十三章 文件
1
Fortran程序往往由一个主程序和若干个子程序组成。
Fortran的子程序有函数子程序、子例行子程序和数 据块子程序三种。
子程序可以被主程序调用,也可以被其他子程序调 用。Fortran77中的子程序不能递归调用。
4,5,1,2,3 5,1,2,3,4
$ /1x,'x1=',f8.2,' x2=',f8.2) end
9
主要区别:
1. 形式不一样(function、subroutine、call),无虚参 时括号使用不一样。
2. 子程序名的意义不一样。函数子程序名代表函数值, 通过其传递数据,需要类型说明;而子例行程序名仅 为了调用使用,通过虚实参传递数据。
n=0
t=1
s=1 do 10 while(abs(t).gt.1e-5)
n=n+1 t=t*x/n
ex 1 x x2 x3 2! 3!
s=s+t
10 continue
myexp=s
end
real myexp
write(*,*) 'Enter x:'
read(*,*) x
sinh(x) ex ex 2
y=(myexp(x)-myexp(-x))/2.0 write(*,100) 'sinh(',x,')=',y
100 format(1x,a,f5.2,a,e13.6)
end
5
二、 子例行子程序
主程序
100
子例行 子程序标志
子例行子程序
10
call sum(3,y1)
call sum(4,y2)
20 continue end
real w(5,5) call readin(w)
输入矩阵 1,2,3,4,5 2,3,4,5,1
call opp(w,x1,x2) write(*,100) x1,x2 100 format(1x,'The two sum of',
3,4,5,1,2
$ ' oppusite angles elements:',
4. 子例行子程序靠形参实参虚实结合传递数据,可返 回两个以上的数值。(优点)
7
5. 子例行子程序必须用独立的call语句调用。而函数子 程序的调用总是出现在表达式中,参与运算。
subroutine astar write(*,100) 100 format(1x,20('*')) end
call astar call astar end
一、 函数子程序
主程序 类型说明 子程序标志 函数名(虚参)
函数子程序 (外部函数)
write(*,*) y(5.0),y(0.0),y(-6.0) end
real function y(x) if(x.gt.0.0) then
y=1.0
1 (x 0)
y


0
(x 0)
else if(x.eq.0.0) then y=0.0
3. 在函数子程序流程返回调用单位之前,必须把所求得 的函数值赋给函数名(不带括号和虚参)。
4. 函数子程序流程执行到return或end语句时,立即返回 到调用单位。return语句在子程序中可以有多处,如 果紧邻end 可以省去。
3
5. 函数子程序中除虚参外的任何变量都不与其他程序单 位有关系,语句标号也是独立的。
相关文档
最新文档