一道vb题目

Dim x As Integer, y As Integer
Private Sub form_click()
Dim a As Integer, b As Integer
a = 6: b = 4
Call sub1(a, b)
Print a, b
Print x, y
End Sub
Private Sub sub1(m As Integer, n As Integer)
Dim y As Integer
x = m + 2: y = n - 3
m = fun1(x, fun1(y, x))
n = x + y
End Sub

Private Function fun1(a As Integer, ByVal b As Integer) As Integer
x = a + 2: y = b - 3
fun1 = x - y
End Function
求第一二行的输出结果。。。

关键在于这条m = fun1(x, fun1(y, x))语句:
VB会先计算fun1(y, x);然后再计算fun1(x, fun1(y, x)) 所以函数fun1(x, fun1(y, x)) 中的前面的形参X的值是不确定的,因为fun1(y, x)会改变X的值,你不能将fun1(x, fun1(y, x)) = fun1(8, fun1(1, 8)),这是运算顺序,这个你要明白。
第一次运算fun1(y, x), 实际上是fun1(1, 8) =-2,没有问题吧,但是X的值己改变了,x = a + 2=3
,同时Y的值也改变了y = b - 3=5,所以当fun1(1, 8) =-2运行完毕后,函数fun1(x, fun1(y, x)) 己变成了fun1(3, -2) .所以m=fun1(3, -2)=10,第二次运算结束后,x = a + 2=3+2=5, y = b - 3=-2-3=-5,注意函数Function fun1(a As Integer, ByVal b As Integer) As Integer 中的形参ByVal b变量b是ByVal是传递值 ,源数据不会被修改 所以在过程sub1中y的值没有被修改y = n - 3
=4-3=1,n=x+y=5+1=6,注意过程sub1中变量y和全局变量y是两个不同的变量。关于函数形参的传值方式你最好去看C/C++,在VB中我认为是不太好理解的,因为VB隐藏了指针技术。
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-10-11
VB 中运行一下,不就知道了。 懒!!!

第一行:10 6
第二行:5 -5追问

不好意思 我的问题意思是:怎么分析这些代码得到的。。。。我都打得这些代码出来了,你说还能懒到这个地步吗 = =

追答

1:sub1(6, 4)
即x=m+2=6+2=8; y=n-3=4-3=1;
2: m = fun1(x, fun1(y, x))
先计算里面的fun1(y, x)
即fun1(y,x)=fun1(1,8)={x=3: y=5: fun1=-2}=-2
再计算fun1(x, -2)=fun1(3, -2)={x=5, y=-5, fun1=10}=10

sub1里面 x= 8 y= 1
fun1( 1 , 8 ) 里面 x = 3 ; y = 5 ; fun1 = -2
fun1( 5 , -2 ) 里面 x = 5 ; y = -5 ; fun1 = 10

给你个参考:添加了两个调试输出。。。
Dim x As Integer, y As Integer
Private Sub form_click()
Dim a As Integer, b As Integer
a = 6: b = 4
Call sub1(a, b)
Print a, b
Print x, y
End Sub
Private Sub sub1(m As Integer, n As Integer)
Dim y As Integer
x = m + 2: y = n - 3
Debug.Print "sub1里面 x="; x, "y="; y

m = fun1(x, fun1(y, x))
n = x + y
End Sub

Private Function fun1(a As Integer, ByVal b As Integer) As Integer
x = a + 2: y = b - 3
Debug.Print "fun1("; a; ", "; b; ") 里面 x = "; x, "; y = "; y, "; fun1 = "; x - y; ""
fun1 = x - y
End Function

本回答被提问者和网友采纳

一道VB程序设计题
输入行数和列数,程序生成随机矩阵,矩阵的每一行元素之和放在该行最后一个位置。程序通过以下步骤实现:首先接收输入的行数和列数。接着,根据输入的行数和列数创建一个数组,并填充随机数。然后,对矩阵每一行的元素求和,将结果存入最后一列。最后,输出整个矩阵。

一道无敌难的VB!!!
Option Explicit Private Sub Form_Load()VScroll1.Min = 0 VScroll1.Max = 1000 VScroll1.SmallChange = 1 VScroll1.LargeChange = 10 VScroll1.Value = 1000 Call Xi End Sub Private Sub Xi()Dim X As Single, C As Single, F As Single X = 1000 - VScroll1.Value C = X \/ ...

有一道VB题目,没看懂为什么会倒置,希望大虾给个解,指条明路,谢谢~_百 ...
这题的答案为D,即窗体上的输出结果为GFEDCBA。函数Ucase(字符串表达式)是将字符串表达式的值转换为大写字符。函数Fun(字符串)是一个将其参数字符串倒置的自定义函数。为何倒置,是关键提问,原因:Mid(S,i,1)是提取字符串S的第i个字符,Mid(S,i,1)+s1就是把提取的字符串S的第i个字符放在s1...

一道vb 题目 请高手解答
本文提供了一段VB代码,用于解决特定问题。代码采用了直接方法,即逐数检查,筛选出符合条件的数字对,并在主函数Form_Load中进行调用。通过将结果存储在变量result中,最终通过MsgBox展示。代码的核心在于检查数字对中的重复性,通过定义函数noRepeated来实现。在noRepeated函数中,我们首先初始化一个布尔变量...

vb编程中有这样一道题,对于初学者是在不懂,谢谢!
在VB编程中,处理数学运算时,常使用到e和ln这两个符号。e表示自然常数,可以通过exp函数表示,即e的x次方表示为exp(x)。同样,ln表示自然对数,可以通过log函数表示,即ln(x)表示为log(x)。这里的x可以是任何表达式。在进行具体运算时,需要确保使用正确的括号来确保运算顺序。例如,如果我们需要计算...

一道VB二级题目:声明一个变量为局部变量应该用 A)Global B)Private...
正确答案:C 解析:根据变量的定义位置和所使用的定义变量的语句不同,VisualBasic中的变量可以分为局部变量、模块变量和全局变量。模块级变量在模块部分用Private或Dim语句声明;全局变量必须用Public或Global语句声明;局部变量在过程内用Dim或Static语句声明。注意:根据定义变量的关键字不同,变量的作用范围...

问一道VB的基础题
C这就是个交换算法的数学应用。举个简单的例子:a=5,b=3 a=a+b,则a=8,b=3 b=a-b,则,a=8,b=5 a=a-b,则a=3,b=5,交换成功。

一道关于vb常量的问题
B正确 A、 #True#不是常量(正确的应该是True)B、1.34D2相当于1.34E2,即1.34*10^2,也就是134,所以这是个数值常量;25!是个单精度浮点数(Single)C、02-03-2002不是常量,#02-03-2002#才是;D-3也不是常量 D、ABCDE和E-2不是常量 ...

这样一道vb提:x=5,y=15,z=3,计算(y mod10)×10+y\\10
Dim z As Integer Dim a As Integer x = 5 y = 15 z = 3 a = (y Mod 10) * 10 + y \\ 10 Print a End Sub 立即窗口 *MSDN解释:在中断模式时会自动打开,且其内容是空的。1.键入或粘贴一行代码,然后按下 ENTER 键来执行该代码。2.从立即窗口中复制并粘贴一行代码到代码窗口中,...

一道计算机VB题
答案是C。这个问题涉及到两个问题。一是常数计算过程,二是结果是何种类型的问题。先说第一个问题。计算A=16384*2时,先计算16384*2,把计算结果保存在一个临时变量中,再把这个临时变量的值赋给A。再说第二个问题。16384*2的结果是什么类型?是整型。因为16384与2都是整型,计算结果仍是整型。而=...

相似回答