例63编程,求:S=∑?22=∑s3=∑ i=100 i=20 分析:上述三个数列的通项不同,求和范围也不同,用一个程序 段难以同时计算三个数列的和,并且,因为无法用一个语句函数 完成数列的求和计算,所以也无法使用语句函数来简化程序设计。 FUNCTION SM(M, N, L) SM=0 DO =MN IF(L>) THEN SM=SM+|*料L ELSE SM=SM+(10*)**L!进行实型运算 END IF ENDDO END FUNCTION SM
例 6.3 编程,求: = = = = = = 5 0 2 0 1 3 140 100 3 2 100 1 2 1 i i i i s i s i s 分析:上述三个数列的通项不同,求和范围也不同,用一个程序 段难以同时计算三个数列的和,并且,因为无法用一个语句函数 完成数列的求和计算,所以也无法使用语句函数来简化程序设计。 FUNCTION SM(M,N,L) SM=0 DO I=M,N IF (L>0) THEN SM=SM+I**L ELSE SM=SM+(1.0*I)**L !进行实型运算 END IF ENDDO END FUNCTION SM
PROGRAM EXAM2 !开始主程序单元定义 WRITE(**)S1=SM(1,100,2)!调用函数子程序SM完成S1的计算 WRTE(*,*)S2=,SM(100,140,3) WRTE(**)S3=,SM(20,50-1) END 程序运行结果如下: S1=338350.000000 S2=7.291440E+07 采用函数子程序设计程序时并没有提高程序的执行效 率,但却可以有效的提高程序的设计效率。当函数子 程序的定义过程和主程序放到一个程序文件中时,存 储顺序是任意的,函数子程序可以放到主程序之前(如 EXAM2),也可以放到主程序之后,但是程序总是从主 程序开始执行。 次函数子程序)
PROGRAM EXAM2 !开始主程序单元定义 WRITE(*,*)'S1=',SM(1,100,2) !调用函数子程序SM完成S1的计算 WRITE(*,*)'S2=',SM(100,140,3) WRITE(*,*)'S3=',SM(20,50,-1) END 程序运行结果如下: S1= 338350.000000 S2= 7.291440E+07 S3= 9.514656E-01 对程序EXAM2作如下说明: 程序的第一部分是函数子程序的定义部分,如前所述,它可以单独存 储为一个程序文件。从保留字PROGRAM开始至END是主程序部分, 一个程序总是从主程序开始运行的,主程序的第2~4个语句都要打印 函数SM的值,这时调用函数定义部分,根据函数的定义描述计算函 数的值并予以打印。三个打印语句分别调用了三次函数子程序(即执 行了三次函数子程序)。 采用函数子程序设计程序时并没有提高程序的执行效 率,但却可以有效的提高程序的设计效率。当函数子 程序的定义过程和主程序放到一个程序文件中时,存 储顺序是任意的,函数子程序可以放到主程序之前(如 EXAM2),也可以放到主程序之后,但是程序总是从主 程序开始执行
例:程序的优化 FUNCTION SMM, N, L) SM=0 REAL FUNCTION SMM, N, L) DO =MN IMPLICIT NONE IF(L>O) THEN INTEGER: M.N. Lj SM=SM+|*料 REAL: I(M: N) ELSE FORALLO=M:N)(J)-」 SM=SM+(1.0*)*料L SM=SUM(|**凵) END F END FUNCTION SM ENDDO END FUNCTION SM 140 ∑?2S2=∑s3=∑ i=1 i=20
REAL FUNCTION SM(M,N,L) IMPLICIT NONE INTEGER::M,N,L, J REAL::I(M:N) FORALL(J=M:N) I(J)=J SM=SUM(I**L) END FUNCTION SM 例:程序的优化 FUNCTION SM(M,N,L) SM=0 DO I=M,N IF (L>0) THEN SM=SM+I**L ELSE SM=SM+(1.0*I)**L END IF ENDDO END FUNCTION SM = = = = = = 5 0 2 0 1 3 140 100 3 2 100 1 2 1 i i i i s i s i s
函数定义部分应注意如下问题: 1.函数值的类型可以在函数定义时予以说明,下面的两种说明 方法是等效的: (1)INTEGER FUNCTION F1(X1, X2.XN) 函数体 END (2)F∪ NCTION F1(X1,X2…XN) INTEGER F1 函数体 END 都说明F1是一个整型函数,当未使用这种显示的类型说明时(如 例6.3),函数值的类型遵守|-N隐含规则
函数定义部分应注意如下问题: 1.函数值的类型可以在函数定义时予以说明,下面的两种说明 方法是等效的: (1)INTEGER FUNCTION F1(X1,X2...XN) 函数体 END (2)FUNCTION F1(X1,X2.....XN) INTEGER F1 函数体 END 都说明F1是一个整型函数,当未使用这种显示的类型说明时(如 例6.3),函数值的类型遵守I—N隐含规则
2.函数不能有同名虚参。虚参的类型可以在函数体中进行说 明方法,当未对虚参类型进行说明时,虚参类型遵守|-N隐含 规则 3.函数定义部分中一定要有一个语句将函数值赋值给函数名 (如例63中的第5句和第7句)。这种赋值语句的格式是 函数名=表达式 注意不要在函数名后带上括弧,写成: 函数名(虚参表)=表达式
2. 函数不能有同名虚参。虚参的类型可以在函数体中进行说 明方法,当未对虚参类型进行说明时,虚参类型遵守I—N隐含 规则。 3. 函数定义部分中一定要有一个语句将函数值赋值给函数名 (如例6.3中的第5句和第7句)。这种赋值语句的格式是: 函数名=表达式 注意不要在函数名后带上括弧,写成: 函数名(虚参表)=表达式