實(shí)驗(yàn)七 子程序、過程與函數(shù)的使用
一、實(shí)驗(yàn)?zāi)康?
1. 掌握用戶自定義函數(shù)、過程的定義。
2. 掌握用戶自定義函數(shù)及過程的建立方法。
3. 掌握子程序的建立和調(diào)用方法。
4. 理解在調(diào)用過程和函數(shù)時(shí)參數(shù)傳遞的意義和功能。
二、實(shí)驗(yàn)內(nèi)容及上機(jī)步驟
【上機(jī)題一】
編寫自定義函數(shù)求一自然數(shù)x的階乘。在主程序中調(diào)用函數(shù),計(jì)算s=a!+b!+c!
操作要求:
1. 由鍵盤輸入3個(gè)數(shù),分別存放在變量a,b,c中。
2. 設(shè)計(jì)一個(gè)自定義函數(shù)FAC(),用它來求x!
3. 由主程序調(diào)用3次函數(shù),即求得結(jié)果。
【上機(jī)步驟】
本題的知識(shí)點(diǎn)是用戶自定義函數(shù)的建立及調(diào)用方法,程序代碼如下:
CLEAR
SET TALK OFF
INPUT “請(qǐng)輸入a” TO a
INPUT “請(qǐng)輸入b” TO b
INPUT “請(qǐng)輸入c” TO c
s=FAC(a)+FAC(b)+FAC(c)
? “三個(gè)數(shù)的階乘之和為”,s
SET TALK ON
RETURN
FUNCTION FAC()
PARAMETERS n
f=1
FOR i=1 to n
f=f*i
ENDFOR
RETURN f
【上機(jī)題二】
用過程的方法來求1000內(nèi)的素?cái)?shù)的個(gè)數(shù)。
【上機(jī)步驟】
本題的知識(shí)點(diǎn)是過程的建立方法。素?cái)?shù)的算法需要用到雙重循環(huán),外層循環(huán)用來循環(huán)1到1000每個(gè)數(shù),內(nèi)層循環(huán)進(jìn)行素?cái)?shù)的判斷。
用過程的方法來解決,則把內(nèi)層循環(huán)的內(nèi)容用過程來描述,程序代碼如下:
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內(nèi)素?cái)?shù)的個(gè)數(shù)為:”,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
【上機(jī)題三】
驗(yàn)證以下過程程序,并檢查輸出結(jié)果。
【上機(jī)步驟】
本題的知識(shí)點(diǎn)是理解在調(diào)用過程或函數(shù)時(shí)參數(shù)傳遞的意義和功能。
(1)建立一個(gè)程序文件,程序代碼如下:
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
保存該程序文件并運(yùn)行程序,輸出結(jié)果為22,7。因?yàn)閤為按地址傳遞,其值會(huì)隨著形參的變化而變化。y為值傳遞,不管形參如何變化,實(shí)參y的值不變。
把x,y都改成地址傳遞,再次運(yùn)行程序,觀察程序運(yùn)行結(jié)果有沒有變化?
(2) 建立一個(gè)程序文件,程序代碼如下:
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)
保存該程序文件并運(yùn)行程序,輸出結(jié)果為117。
把自定義函數(shù)中的RETURN(a)語句改為RETURN(b-a),再次運(yùn)行程序,觀察返回結(jié)果是多少?