一、实验目的
1. 掌握用户自定义函数、过程的定义。
2. 掌握用户自定义函数及过程的建立方法。
3. 掌握子程序的建立和调用方法。
4. 理解在调用过程和函数时参数传递的意义和功能。
二、实验内容及上机步骤
【上机题一】
编写自定义函数求一自然数x的阶乘。在主程序中调用函数,计算s=a!+b!+c!
操作要求:
1. 由键盘输入3个数,分别存放在变量a,b,c中。
2. 设计一个自定义函数FAC(),用它来求x!
3. 由主程序调用3次函数,即求得结果。
【上机步骤】
本题的知识点是用户自定义函数的建立及调用方法,程序代码如下:
CLEAR
SET TALK OFF
INPUT “请输入a” TO a
INPUT “请输入b” TO b
INPUT “请输入c” TO c
s=FAC(a)+FAC(b)+FAC(c)
? “三个数的阶乘之和为”,s
SET TALK ON
RETURN
FUNCTION FAC()
PARAMETERS n
f=1
FOR i=1 to n
f=f*i
ENDFOR
RETURN f
【上机题二】
用过程的方法来求1000内的素数的个数。
【上机步骤】
本题的知识点是过程的建立方法。素数的算法需要用到双重循环,外层循环用来循环1到1000每个数,内层循环进行素数的判断。
用过程的方法来解决,则把内层循环的内容用过程来描述,程序代码如下:
CLEAR
SET TALK OFF
sum=0
For i=1 to 1000
prime=.T.
DO SUB1 WITH i
IF prime
sum=sum+1
ENDIF
ENDFOR
? “1000内素数的个数为:”,sum
SET TALK ON
RETURN
PROCEDURE SUB1
PARAMETERS x
FOR j=2 TO INT(SQRT(x))
IF MOD(x,j)=0
prime=.F.
EXIT
ENDIF
ENDFOR
RETURN
【上机题三】
验证以下过程程序,并检查输出结果。
【上机步骤】
本题的知识点是理解在调用过程或函数时参数传递的意义和功能。
(1)建立一个程序文件,程序代码如下:
SET TALK OFF
x=15
y=7
DO SUB WITH x,(y)
? x,y
SET TALK ON
RETURN
PROCEDURE SUB
PARAMETERS a,b
a=a+b
b=a-b
RETURN
保存该程序文件并运行程序,输出结果为22,7。因为x为按地址传递,其值会随着形参的变化而变化。y为值传递,不管形参如何变化,实参y的值不变。
把x,y都改成地址传递,再次运行程序,观察程序运行结果有没有变化?
(2) 建立一个程序文件,程序代码如下:
SET TALK OFF
x=9
y=13
z=FU(x,y)
? z
SET TALK ON
RETURN
FUNCTION FU
PARAMETERS a,b
a=a*b
RETURN (a)
保存该程序文件并运行程序,输出结果为117。
把自定义函数中的RETURN(a)语句改为RETURN(b-a),再次运行程序,观察返回结果是多少?