第6章 过程 2.docx
《第6章 过程 2.docx》由会员分享,可在线阅读,更多相关《第6章 过程 2.docx(14页珍藏版)》请在冰豆网上搜索。
第6章过程2
习题6(过程)
一、选择题
1.Sub过程与Function过程最根本的区别是:
(A)前者可以使用Call或直接使用过程名调用,后者不可以
(B)后者可以有参数,前者不可以
(C)两种过程参数的传递方式不同
(D)前者无返回值,但后者有返回值
2.在定义函数过程时,不可能用到的关键字是:
(A)Exit
(B)As
(C)Sub
(D)End
3.在定义通用过程时,下列关键字中不能用来修饰形参的是:
(A)ByVal
(B)ByRef
(C)Optional
(D)Static
二、判断题
1.如果过程的一个形参使用了ByRef修饰,且调用时相应的实参是一个变量,则实参变量的数据类型必须与形参相同。
√
2.因为函数过程有返回值,所以只能用在表达式中,不能使用Call语句调用。
×
3.事件过程只能在事件发生时由系统调用,不能在程序中使用代码直接调用。
×
4.使用Static关键字定义的通用过程中过程级变量都为静态变量。
√
5.在窗体模块中,不能定义全局通用过程。
×
6.在函数过程中,如果不给函数名赋值,则函数不返回任何值。
×
7.定义通用过程时有几个形参,则调用该过程时必须提供几个实参。
×
8.使用命名参数调用通用过程时,实参的顺序可以不与相应的形参相同。
√
三、填空题
1.在过程调用中,参数的传递方式可分为按值传递和按地址传递两种,其中按地址传递是默认方式。
使用ByVal关键字来修饰形式参数,可以使之按值传递。
2.以下是一个按钮的Click事件过程与一个函数过程,当单击此按钮时,窗体上显示的是33。
1PrivateSubCommand1_Click()
2Dimint1AsInteger
3int1=8
4PrintSub1(int1,11)+int1
5EndSub
6
7PrivateFunctionSub1(intVar1AsInteger,_
8OptionalintVar2AsInteger=10)AsInteger
9IfintVar2>10ThenintVar1=intVar2
10Sub1=intVar1+intVar2
11EndFunction
知识点:
●默认情况下,参数按引用传递ByRef
●表达式中对函数的调用
●函数的返回值
●Print语句中表达式的求值顺序
3.阅读下面程序,当Value过程形参前有ByVal关键字时,单击窗体,在窗体上显示的第一行内容是2010,第二行内容是1015。
若将形参表中的ByVal关键字删除,再执行本程序,单击窗体后在窗体上显示的第一行内容是2010,第二行内容是2010。
1PrivateSubValue(ByValmAsInteger,ByValnAsInteger)
2m=m*2:
n=n-5
3Printm,n
4EndSub
5
6PrivateSubForm_Click()
7DimxAsInteger,yAsInteger
8x=10:
y=15
9CallValue(x,y)
10Printx,y
11EndSub
知识点:
●参数的按值传递ByVal
●通用Sub过程的调用
4.下面是一个按钮的事件过程,过程中调用了自定义函数。
单击按钮在窗体上输出的结果第一行是16,第五行是
526。
1PrivateSubCommand1_Click()
2DimxAsInteger,yAsInteger
3DimnAsInteger,zAsInteger
4x=1:
y=1
5Forn=1To6
6z=f1(x,y)
7Printn,z‘此语句改成Printn,x效果一样
8Next
9EndSub
10
11PrivateFunctionf1(xAsInteger,yAsInteger)AsInteger
12DimnAsInteger
13DoWhilen<=4‘该循环执行了5次
14x=x+y
15n=n+1‘确保不会形成死循环
16Loop
17f1=x
18EndFunction
知识点:
●参数的按值传递ByVal
●数值型变量(n)的默认值
●过程级动态局部变量(n)
●DoLoop循环和For循环
●作为形参的变量与过程级动态局部变量同名的情况(x,y)
5.窗体上有一个按钮Command1和两个文本框Text1、Text2。
下面是这个窗体模块的全部代码。
运行程序,第一次单击按钮时,两个文本框中的内容分别是10和10;第二次单击按钮,两个文本框中的内容又分别是58和58。
1DimyAsInteger'模块级变量
2PrivateSubCommand1_Click()
3DimxAsInteger
4x=2
5Text1.Text=f2(f1(x),y)
6Text2.Text=f1(x)
7EndSub
8
9PrivateFunctionf1(xAsInteger)AsInteger
10x=x+y:
y=x+y
11f1=x+y
12EndFunction
13
14PrivateFunctionf2(xAsInteger,yAsInteger)AsInteger
15f2=2*x+y
16EndFunction
知识点:
●参数的按引用传递ByRef
●模块级变量与形参同名
●函数的嵌套调用
6.阅读下面程序,当单击窗体时,窗体上显示内容的第一行是
23;第二行是47。
1PrivateSubForm_Click()
2Test2
3EndSub
4
5PrivateSubTest(xAsInteger)
6x=x*2+1
7Ifx<6Then
8CallTest(x)
9EndIf
10x=x*2+1
11Form1.Printx
12EndSub
知识点:
●函数的递归调用
7.下面程序在窗体上显示的两行内容分别是6612与
61010。
如果在sub1过程的第二个形参y前加byVal,则在窗体上显示的内容是9615与6410。
1PrivateSubForm_click()
2DimxAsInteger,yAsInteger,zAsInteger
3x=1:
y=2:
z=3
4Callsub1(x,x,z)
5Callsub1(x,y,y)
6EndSub
7
8PrivateSubsub1(xAsInteger,yAsInteger,zAsInteger)
9x=3*z
10y=2*z
11z=x+y
12Printx,y,z
13EndSub
知识点:
●参数按引用传递ByRef
●参数按值传递ByRef
8.假设下面程序中的4条语句:
语句①~语句④,每次只使用其中的一条语句。
运行程序并点击按钮Command1,则当使用语句①时,输出的内容是4;当使用语句②时,输出的内容是
5;当使用语句③时,输出的内容是7;当使用语句④时,输出的内容是5。
1PrivateSubCommand1_Click()
2DimxAsInteger
3Printa(x)*2'语句①
4Printx+a(x)*2'语句②
5Printx+a(x)+a(x)'语句③
6Printx+a(a(x))'语句④
7EndSub
8
9PrivateFunctiona(yAsInteger)AsInteger
10y=y+1
11a=y+1
12EndFunction
知识点:
●参数按引用传递ByRef
●Print语句中表达式的求值顺序(从右往左)
9.弦截法求方程x-2sinx=0的根。
如图6.8所示,弦截法的原理为:
对于方程,找一个单调有根区间[x1,x2],连接和两点,连线与横轴交点的横坐标为:
反复使用r取代x1或x2来缩小有根区间。
当或时(e为给定的精度),即认为r是方程的数值解。
完善下面程序。
1PrivateSubCommand1_Click()
2Dimx1AsSingle,x2AsSingle
3DimeAsSingle:
DimrAsSingle
4e=0.000001
5x1=Val(Text1.Text)
6x2=Val(Text2.Text)
7Iff(x1)*f(x2)>0Then
8Text3.Text="请重新选取两点"
9ExitSub
10EndIf
11Do
12r=(24)
13IfAbs(f(r))14(25)
15ElseIff(r)*f(x1)<0Then
16(26)
17ElseIff(r)*f(x2)<0Then
18(27)
19EndIf
20Loop
21Text3.Text=r
22EndSub
23
24PrivateFunctionf(xAsSingle)AsSingle
25(28)
26EndFunction
四、编程题
1.编写递归函数求1+2+3+……+n的值。
2.编写判断某年是否为闰年的函数。
该函数有一个整型参数表示年份,返回值为逻辑型,当该年份是闰年时,函数返回值为True,否则返回False。
3.编写程序调用例6.4中的函数过程Fib,计算Fibonacci数列中从第几项开始起数列项的值超过10000。
4.编写一个首部为C(mAsInteger,nAsInteger)AsInteger的函数,函数的返回值为:
(其中n≥0,m≥n,m>0,设0!
=1)
5.编写函数S(mAsInteger,nAsInteger)AsLong,此函数返回m+mm+mmm+…+m…m(n个m)的值。
比如S(2,5)的返回值为2+22+222+2222+22222的值。
6.一小球从100米高处自由落下,落到水平面上后又反弹,每次反弹的高度是前一次高度的一半。
编写函数T(nAsInteger)AsSingle,返回值为第n次反弹到