6.2.2函数子程序的调用 定义函数子程序的目的是为了调用。不仅主程序可以调用一个函 数子程序,函数子程序也可以调用其它的函数子程序,甚至于还 可以调用本身(递归调用)。调用程序称为主调程序单元,而被调 用的函数子程序称为被调程序单元。调用一个函数子程序的方法 和调用内在函数和语句函数的方法基本相同: 1.调用时应该用实参代替函数子程序定义部分的虚参,实参和 虚参的类型要相同。和语句函数一样,实参可以是常量、变量、 表达式等 2.调用程序单位中的变量不能与函数子程序同名。函数值的类 型由函数定义程序单元决定,与调用程序单元无关。 3.当函数名的类型不满足|N隐含规则时,在调用程序单元中 要对函数名的类型给出说明(如例84中的主程序EXAM3的第2句。) 4.不能调用一个没有定义的函数子程序(这一点和内在函数是不 同的。)
6.2.2 函数子程序的调用 定义函数子程序的目的是为了调用。不仅主程序可以调用一个函 数子程序,函数子程序也可以调用其它的函数子程序,甚至于还 可以调用本身(递归调用)。调用程序称为主调程序单元,而被调 用的函数子程序称为被调程序单元。调用一个函数子程序的方法 和调用内在函数和语句函数的方法基本相同: 1. 调用时应该用实参代替函数子程序定义部分的虚参,实参和 虚参的类型要相同。 和语句函数一样,实参可以是常量、变量、 表达式等。 2. 调用程序单位中的变量不能与函数子程序同名。函数值的类 型由函数定义程序单元决定,与调用程序单元无关。 3. 当函数名的类型不满足I—N隐含规则时,在调用程序单元中 要对函数名的类型给出说明(如例 8.4 中的主程序EXAM3的第2句。) 4. 不能调用一个没有定义的函数子程序(这一点和内在函数是不 同的。)
例64用函数子程序的方法设计一个程序,求50~100内的所有 素数及其和。 分析:设计一个函数子程序PRME(N),函数PRME的值定义如 下: 当n是素数时 prime(n) 1o当n非素数时 主程序的任务是应用PRME函数子程序在50~100 之间使用枚举法求出那些使PRME函数值为1的 自然数并求这些数的和
例 6.4 用函数子程序的方法设计一个程序,求50~100内的所有 素数及其和。 分析:设计一个函数子程序 PRIME(N),函数PRIME的值定义如 下: = 当 非素数时 当 是素数时 n n prime n 0 1 ( ) 主程序的任务是应用PRIME函数子程序在50~100 之间使用枚举法求出那些使PRIME函数值为1的 自然数并求这些数的和
函数子程序如下: FUNCTION PRIME(N) INTEGER PRIME *定义PRME是整型函数 PRIME=O Do|=2,N-1 F(MOD(N)=0)GOT10*参数N有因子1,非素数,退出循环 ENDDO PRIME=1 参数N无任何因子,函数值为1 10 END
函数子程序如下: FUNCTION PRIME(N) INTEGER PRIME * 定义PRIME是整型函数 PRIME=0 DO I=2,N-1 IF (MOD(N,I)==0) GOTO 10 * 参数N有因子I,非素数,退出循环 ENDDO PRIME=1 * 参数N无任何因子,函数值为1 10 END
主程序如下: PROGRAM EXAM3 INTEGER PRIME*说明要调用的函数PRME为整型 Do|=50100 IF PRIME(==1) THEN S=S+l WRTE(*,*川 END IF END DO WRTE(*,米)S=S END 运行结果如下: 83 89 97 732.000000
主程序如下: PROGRAM EXAM3 INTEGER PRIME * 说明要调用的函数PRIME 为整型 DO I=50,100 IF (PRIME(I)==1) THEN S=S+I WRITE(*,*)I END IF END DO WRITE(*,*)'S=',S END 运行结果如下: ........ 83 89 97 S= 732.000000
例:程序的优化 PROGRAM EXAM3 INTEGER PRIME PROGRAM EXAM3 DO|=50,100 INTEGER: PRIME, index 50: 100 IF(PRIME(0==1)THEN Do|=50,100 S=S+ index(i=PRIme(* WRTE(*,米 END DO END IF WRITE(,)'S= Sum(index) END DO END WRITE()'S=S END
PROGRAM EXAM3 INTEGER:: PRIME, index(50:100) DO I=50,100 index(i)=PRIME(I)*i END DO WRITE(*,*)'S=',Sum(index) END 例:程序的优化 PROGRAM EXAM3 INTEGER PRIME DO I=50,100 IF (PRIME(I)==1) THEN S=S+I WRITE(*,*)I END IF END DO WRITE(*,*)'S=',S END