第6章过程习题及答案一、选择题1.Sub过程与Function过程最根本的区别是:(A)前者可以使用Call或直接使用过程名调用,后者不可以(B)后者可以有参数,前者不可以(C)两种过程参数的传递方式不同(D)前者无返回值,但后者有返回值答案:D知识点:Sub过程、Function过程难度:1提示:无题解:无2.在定义函数过程时,不可能用到的关键字是:(A)Exit(B)As(C)Sub(D)End答案:C知识点:Function过程难度:1提示:无题解:无3.在定义通用过程时,下列关键字中不能用来修饰形参的是:(A)ByVal(B)ByRef(C)Optional(D)Static答案:D知识点:Sub过程、Function过程难度:1提示:无4.在同一模块中定义了两个同名的过程,以下哪一项可以让它们实现重载:(A)返回值类型不同(B)参数类型不同(C)参数名称(D)参数传递方式不同答案:B知识点:过程重载难度:1提示:无题解:无5.以下关于递归的说明中正确的是:(A)递归有直接递归和间接递归(B)递归过程可以无限次调用自己(C)递归过程的形参必须是按地址传递(D)递归过程必须有返回值答案:A知识点:递归难度:1提示:无题解:无6.下列定义一个Function过程的首部,语法正确的是()。
(A)FunctionMyFunc(ByValiAsInteger)AsInteger(B)FunctionMyFunc(vari:Integer):Integer(C)FunctionMyFunc(DimiAsInteger)AsInteger(D)FunctionIntegerMyFunc()答案:A知识点:Function过程难度:1提示:无题解:无(A)EndSub(B)EndMySub(C)ExitSub(D)ExitMySub答案:C知识点:Sub过程难度:1提示:无题解:无8.Function过程MyFunc返回整型值,过程中不等到执行结束就将控制权立即返回调用者的语句为()。
(A)End(B)Return(C)Exit(D)MyFunc答案:B知识点:Function过程难度:1提示:无题解:无9.对于通用过程,下列叙述中正确的是()。
(A)过程的定义不能嵌套,但过程调用可以嵌套(B)过程的定义可以嵌套,但过程调用不能嵌套(C)过程的定义和调用都不能嵌套(D)过程的定义和调用都可以嵌套答案:A知识点:调用过程难度:1提示:无题解:无10.有过程定义如下:PrivateSubFun(xAsInteger,yAsInteger,zAsInteger)则下列调用语句不正确的是()。
(A)CallFun(a,b,c)(C)Funa,,5(D)Fun(a,b,c)答案:C知识点:Function过程难度:1提示:无题解:无11.在过程中定义的变量,如果希望在离开该过程后,还能保存过程中局部变量的值就应该使用()关键字在过程中定义变量。
(A)Dim(B)Private(C)Public(D)Static答案:D知识点:定义变量难度:1提示:无题解:无12.在过程内定义的变量(不在控制结构语句块中)也称为()。
(A)全局变量(B)模块级变量(C)局部变量(D)静态变量答案:C知识点:定义变量难度:1提示:无题解:无13.在过程定义中用_____________关键字表示形参是按地址传递的。
(A)Var(B)ByDef(C)ByVal(D)ByRef答案:D难度:1提示:无题解:无7.下面过程运行后显示的结果是_____________。
SubMain()Dimx,yAsIntegerx=12:y=34Callf(x,y)Console.WriteLine(x&","&y)Console.Read()EndSubPublicSubf(ByRefnAsInteger,mAsInteger)n=nMod10m=m\10EndSub(A)2,34(B)12,34(C)2,3(D)12,3答案:A知识点:参数传递方式难度:2提示:无题解:无二、判断题1.如果过程的一个形参使用了ByRef关键字修饰,且调用时相应的实参是一个变量,则实参变量的数据类型必须与形参相同。
答案:√知识点:参数传递方式难度:1提示:无题解:无2.因为函数过程有返回值,所以只能用在表达式中,不能使用Call语句调用。
知识点:调用过程难度:1提示:无题解:无3.事件过程只能在事件发生时由系统调用,不能在程序中使用代码直接调用。
答案:×知识点:调用过程难度:1提示:无题解:无4.可以使用Static关键字修饰过程的形式参数,使之可以用作静态过程级变量。
答案:×知识点:形式参数难度:1提示:无题解:无5.在窗体模块中,不能定义全局通用过程。
答案:×知识点:Sub过程、Function过程难度:1提示:无题解:无6.对于函数过程,如果不给函数名赋值,则函数不返回任何值。
答案:×知识点:Function过程难度:1提示:无题解:无*.定义通用过程时有几个形参,则调用该过程时必须提供几个实参。
7答案:×知识点:可选参数难度:1提示:无8.过程参数的默认传递方式是按值传递。
答案:√知识点:参数传递方式难度:1提示:无题解:无9.因为Sub过程没有返回值,所以Return语句不能用在Sub过程中。
答案:×知识点:Sub过程难度:1提示:无题解:无*.使用命名参数调用通用过程时,实参的顺序可以不与相应的形参相同。
10答案:√知识点:命名参数难度:1提示:无题解:无三、读程序题9.运行下面控制台程序,输出的内容是()。
1SubMain()2Console.WriteLine(f(3.0,7))3Console.Read()4EndSub5PublicFunctionf(xAsSingle,nAsInteger)AsSingle6Ifn=0Then7f=18Else9IfnMod2=1Then10f=x*f(x,n\2)11Else12f=f(x,n\2)\x14EndIf15EndFunction答案:27知识点:递归难度:4提示:无题解:无*.以下是一个按钮的Click事件过程与一个函数过程,当单击此按钮时,文本框中显示的2是。
1PrivateSubButton1_Click()HandlesButton1.Click2DimiAsInteger3i=84TextBox1.Text=f1(i,11)+i5EndSub6PrivateFunctionf1(intVar1AsInteger,OptionalintVar2As_7Integer=10)AsInteger8IfintVar2>10ThenintVar1=intVar29f1=intVar1+intVar210EndFunction答案:30知识点:可选参数难度:2提示:无题解:无3.阅读下面控制台程序,当Value过程形参前有ByVal关键字时,运行程序,在窗口中显示的第一行内容是(1),第二行内容是(2)。
若将形参表中的ByVal关键字改为ByRef,再执行本程序,窗口中显示的第一行内容是(3),第二行内容是(4)。
1SubMain()2Dimx,yAsInteger3x=10:y=154CallValue(x,y)5Console.WriteLine(x&""&y)6Console.Read()7EndSub8PrivateSubValue(ByValmAsInteger,ByValnAsInteger)9m=m*2:n=n-510Console.WriteLine(m&""&n)11EndSub答案:(1)2010;(2)1015;(3)2010;(4)2010难度:3提示:无题解:无4.下面是一个控制台程序,窗口中输出的结果第一行是(1),第五行是(2)。
1SubMain()2Dimx,yAsInteger3Dimn,zAsInteger4x=1:y=15Forn=1To66z=f1(x,y)7Console.WriteLine(n&""&z)8Next9Console.Read()10EndSub11PrivateFunctionf1(ByRefxAsInteger,ByRefyAsInteger)AsInteger12DimnAsInteger13DoWhilen<=414x=x+y15n=n+116Loop17Returnx18EndFunction答案:(1)16;(2)526知识点:参数传递方式难度:3提示:无题解:无5.窗体上有一个按钮Button1和两个文本框TextBox1、TextBox2。
下面是这个窗体模块的全部代码。
运行程序,第一次单击按钮时,两个文本框中的内容分别是(1)和(2);第二次单击按钮,两个文本框中的内容又分别是(3)和(4)。
1DimyAsInteger'模块级变量2PrivateSubButton1_Click()HandlesButton1.Click3DimxAsInteger4x=25TextBox1.Text=f2(f1(x),y)6TextBox2.Text=f1(x)7EndSub89PrivateFunctionf1(ByRefxAsInteger)AsInteger11f1=x+y12EndFunction1314PrivateFunctionf2(ByRefxAsInteger,ByRefyAsInteger)AsInteger15f2=2*x+y16EndFunction答案:(1)10;(2)10;(3)58;(13)58知识点:参数传递方式难度:4提示:无题解:无6.运行如下程序,控制台窗口中显示内容的第一行是(1);第二行是(2)。
1SubMain()2CallTest(2)3Console.Read()4EndSub56PrivateSubTest(ByRefxAsInteger)7x=x*2+18Ifx<6Then9CallTest(x)10EndIf11x=x*2+112Console.WriteLine(x)13EndSub答案:(1)23;(2)47知识点:递归难度:4提示:无题解:无7.下面控制台程序在窗口中显示的两行内容分别是(1)与(2)。
如果将sub1 过程的第二个形参y前的ByRef删除,则在窗体上显示的内容是(3)与(4)。
1SubMain()2DimxAsInteger,yAsInteger,zAsInteger3x=1:y=2:z=34Callsub1(x,x,z)5Callsub1(x,y,y)6Console.Read()8PrivateSubsub1(ByRefxAsInteger,ByRefyAsInteger,ByRefzAsInteger)9x=3*z10y=2*z11z=x+y12Console.WriteLine(x&""&y&""&z)13EndSub答案:(1)6612;(2)61010;(3)9615;(4)6410知识点:参数传递方式难度:5提示:无题解:无8.假设下面控制台程序中的4条语句:语句①~语句④,每次只使用其中的一条语句。