有下列两个过程:Sub S1(By Val x As Integer, By Val y As Integer)Dim t As Integer t=X x=y y=

题目

有下列两个过程: Sub S1(By Val x As Integer, By Val y As Integer) Dim t As Integer t=X x=y y=t End Sub Sub S2(x As Integer, y As Integer) Dim t As Integer t=x x=y y=t End Sub 则下列叙述中正确的是( )。

A.用过程S1可以实现交换两个变量的值的操作,S2不能实现

B.用过程S2可以实现交换两个变量的值的操作,S1不能实现

C.用过程S1和S2都可以实现交换两个变量的值的操作

D.用过程S1和S2都不能实现交换两个变量的值的操作

如果没有搜索结果或未解决您的问题,请直接 联系老师 获取答案。
相似问题和答案

第1题:

(13)单击命令按钮时,下列程度的执行结果是 Private Sub Command1_Click() Dim a As Integer,b As Integer,c As Integer a=2:b=4:c=6 Call S2(a,b) Print"a=";a;"b=";b;"c=";c; End Sub Private Sub S1(x As Integer,y As Integer) Dim c As Integer x=2*x:y=y+2:e=x+y End Sub Sub S2(x As Integer,By Val y As Integer) Dim e As Integer x=2*x:y=y+2:e=x+y End Sub A.a=4 b=6 c=6 B.a=8 b=6 c=6 a=4 b=6 c=6 a=8 b=6 c=6 C.a=4 b=6 c=6 D.a=8 b=6 c=6 a=8 b=6 c=6 a=4 b=6 c=6


正确答案:C
【解析】在定义子过程的参数时,如果在参数前加上ByVal,表示是“传值”参数,主调函数中参数的值不被改变;否则表示是“传地址”参数,参数值会被调用的子过程改变。
题中S1过程的参数是“传地址”,因此调用后a、b、c的值都改变了,分别为4、6、6;S2过程的参数中a是“传地址”参数,b是“传值”参数,因此调用后a值改变,b值不变,因为。是过程变量,所以也没有变化,因此输出的值为8、6、6。

第2题:

(27)有下列函数过程( )。 Function fun1(By Val x As Integer,By Valy As Integer) As Integer Do While y<>0 reminder=x Mody x=y y=reminnder Loop Fun1=x End Function 在下列按钮单击事件中调用该函数,则该程序的运行结果是。 Private Sub Command1_Click() Dim a As Integer Dim b As Integer a=100 b=25 x=funl(a,b) Print x End Sub A.0 B.25 C.50 D.100


正确答案:B
【解析】可以通过两种方式来传递参数,即按值传递参数和按地址传递参数。按值传递参数时,传递的只是变量的副本。如果过程改变了这个值,则所作变动只影响副本而不会影响变量本身。用ByVal关键字指出参数是按值来传递的。按地址传递参数使过程用变量的内存地址去访问实际变量的内容,在将变量传递给过程时,通过过程可永远改变变量值。默认时是按地址传递参数。
  题中fun1函数的参数都是按值传送的,函数使用“过程名=表达式”的形式获得函数的返回值,如题中“fun1=x”语句。调用函数“x=fun1(a,b)”后,x=25。

第3题:

( 27 )要想在过程 Proc 调用后返回形参 x 和 Y 的变化结果,下列定义语句中正确的是

A ) Sub Proc ( x as Integer,y as Integer )

B ) Sub Proc ( ByVal x as Integer, y as Integer )

C ) Sub Proc ( x as Integer,Byval y as Integer )

D ) Sub Proc ( Byval x as Integer, Byval y as Integer )


正确答案:A


 

第4题:

单击命令按钮时,下列程序段的执行结果为( )。 Private Sub Command1_Click() Dim a As Integer, b As Integer, c As Integer a-2:b=4:c=6 Call S1(a,b)Print "a="; a; "b="; b; "c="; c Call S2(a,b)Print "a ="; a; "b="; b; "c="; c; End Sub Private Sub S1(x As Integer, y As Integer) Dim c As Integer x=2*x:y=y+2:c=x+y End Sub Sub S2(x As Integer, ByVal y As Integer) Dim e As Integer x=2*x:y=y+2:e=x+y End Sub

A.a=4 b=6 c=6 a=4 b=6 c=6

B.a=8 b=6 c=6 a=8 b=6 c=6

C.a=4 b=6 c=6 a=8 b=6 c=6

D.a=8 b=6 c=6 a=4 b=6 c=6


正确答案:C
解析:在定义子过程的参数时,如果在参数前加上ByVal,表示是“传值”参数,主调函数中参数的值不被改变,否则表示是“传地址”参数,参数值会被调用的子过程改变。题中S1过程的参数是“传地址”,因此调用后a、b、c的值都改变了,分别为4、6、6;S2过程的参数中a是“传地址”参数,b是“传值”参数,因此调用后:值改变,b值不变,因为c是过程变量,所以也没有变化,因此输出的值为8、6、6。

第5题:

有以下函数过程: Function Gys (ByVal x As Integer, ByVal y As Integer) As Integer Do While y<>0 Reminder = x Mod y x = y y= Reminder Loop Gys=x End Function 以下是调用该函数的事件过程,该程序的运行结果是 Private Sub Command1_Click() Dim a As Integer Dim b As Integer a = 50 b = 10 x=Gys (a,B)Print x End Sub

A.0

B.10

C.50

D.100


正确答案:B
解析:本首先要读懂Gys函数过程的意思,Gys函数过程返回参数y的值,具体过程是先令参数x的值为y的值,y的值为xMody的值,再令Gys值为x的值,据此本题的正确结果为10,选B。

第6题:

(27)有下列两个过程: Sub S1(ByVal x As Integer,ByVal y As Integer) Dim t As Integer t=x x=y y=t End Sub Sub S2(x As Integer,y As Integer) Dim t As Integer t=x x=y y=t End Sub 则下列叙述中正确的是 A.用过程S1可以实现交换两个变量的值的操作,S2不能实现B.用过程S2可以实现交换两个变量的值的操作,S1不能实现 C.用过程S1和S2可以实现交换两个变量的值的操作 D.用过程S1和S2不能实现交换两个变量的值的操作


正确答案:B
【解析】在S2过程中,参数的传递是以“按地址”形式传递的,这种形式在参数传递后,形参的改变可以影响实参的改变;而S1过程中,参数的传递是以“传值”形式传递的,这种形式在参数传递后,形参的变化不会影响实参的变化。

第7题:

要想在过程Proc调用后返回形参x和y的变化结果,下列定义语句中正确的是______。

A.Sub Proc(x as Integer, y as Integer)

B.Sub Proc(By Val x as Integer, y as Integer)

C.Sub Proc(x as Integer, By Val y as Integer)

D.Sub Proc(By Val x as Integer, By Val y as Integer)


正确答案:A
解析:过程定义时,如果形式参数被声明为传值(ByVal项),则过程调用只是相应位置实参的值“单向”传送给形参处理,而被调用过程内部对形参的任何操作引起的形参值的变化均不会反馈、影响实参的值。由于这个过程中数据的传递只是单向性,故称为“传值调用”的“单向”作用形式。反之,如果形式参数被声明为传址(ByRef项),则过程调用是将相应位置实参的地址传送给形参处理,而被调用过程内部对形参的任何操作引起的形参值的变化又会反向影响实参的值。在这个过程中,数据的传递具有双向性,故称为“传址调用”的“双向”作用形式。在过程定义时,如果未做参数说明,则默认为传址调用。本题要在过程Proc调用后返回形参x和y的变化结果,所以本题的参数x和y的说明方式都需要采用传址(ByRef项),所有B、C、D选项不符合要求,由于未做参数说明,则默认为传址调用,则A选项正确。

第8题:

在窗体上画一个命令按钮,然后编写如下程序: Sub S1(ByVal x As Integer,ByVal y As Integer) Dim t As Integer t=x x=y y=t End Sub Private Sub Command1_Click() Dim a As Integer,b As Integer a=10 b=30 S1 a,b Print"a=";a;"b=";b End Sub 程序运行后,单击命令按钮,输出结果是 ______。

A.a=30 b=10

B.a=30 b=30

C.a=10 b=30

D.a=10 b=10


正确答案:C
解析:过程S1似乎是要将两个变量的值进行交换,但由于参数是用传值的方式来传递变量值的,所以执行完该过程后,a和b的值并未被交换,保持原来的值不变。

第9题:

在窗体上画一个命令按钮,然后编写如下程序:Sub S1(ByVal x As Integer, By Val y As Integer) Dim t As Integer t=x x=y y=tEnd SubPrivate Sub Command1_ Click() Dim a As Integer, b As Integer a=10 b=30 S1 a,b Print "a=";a="b=";bEnd Sub 程序运行后,单击命令按钮,输出结果是______。

A.a=30 b=10

B.a=30 b=30

C.a=10 b=30

D.a=10 b=10


正确答案:C
解析:过程S1似乎是要将两个变量的值进行交换,但由于参数是用传值的方式来传递变量值的,所以执行完该过程后,a和b的值并未被交换,保持原来的值不变。

第10题:

假定有以下两个过程: Sub S1(ByVal x As Integer, ByVal y As Integer) Dim t As Integer t=K x=y y=t End Sub Sub S2(x As Integer, y As Integer) Dim t As Integer t=K x=y y=t End Sub 则以下说法中正确的是 ( )

A.用过程S1可以实现交换两个变量值的操作,S2不能实现

B.用过程S2可以实现交换两个变量值的操作,S1不能实现

C.用过程S1和S2都可以实现交换两个变量值的操作

D.用过程S1和S2都不能实现交换两个变量值的操作


正确答案:B
解析:本题主要是对调用方式的考查。在S1中实现的是传值调用,故不影响实际参数值。S2过程中实现的是传址调用,影响到实际参数。故用过程S2可以实现两个变量值的操作,而S1不能实现。选项B正确。

更多相关问题