主题:[原创]帮帮忙 急啊
nicholasgu163
[专家分:10] 发布于 2008-08-28 16:45:00
求大家帮帮忙啦 帮我看看
Option Explicit
Dim a As Integer
Private Sub Command1_Click()
Dim b As Integer
a = 1
b = 2
Print fun1(fun1(a, b), b)
Print a
Print b
End Sub
Function fun1(x As Integer, y As Integer) As Integer
Dim i As Integer
For i = 1 To y
y = y + 1
x = x + 1
a = x + y
Next i
fun1 = a + y
End Function
我算不出来正确的结果 结果是第一行34 第二行26 第三行8
回复列表 (共7个回复)
沙发
老大徒伤悲 [专家分:29120] 发布于 2008-08-28 17:27:00
这就是正确的结果啊?
奥,原来不是你想要的结果?
那能不能说说你想要的结果?
板凳
nicholasgu163 [专家分:10] 发布于 2008-08-28 22:15:00
晕倒 上面我给的那个是正确结果 可是我没有算出来 请高手帮帮忙!
3 楼
天天学习 [专家分:4570] 发布于 2008-08-30 15:35:00
估计又是一道二级考试题,考查函数参数传递的
4 楼
老大徒伤悲 [专家分:29120] 发布于 2008-08-30 16:26:00
程序,首先我们得直到它用来干什么
然后,要是到它是怎么想的
然不是说要输出什么!
如果你要输出:第一行34 第二行26 第三行8
那十分简单:
Private Sub Command1_Click()
print “34” & vbcrlf & "26" & vbcrlf & "8"
End Sub
你看看,一定能达到你的目的。
5 楼
nicholasgu163 [专家分:10] 发布于 2008-08-30 23:14:00
谢谢教诲 那麻烦你能告诉这个程序的思路吗 我看不懂 请高手指教
6 楼
老大徒伤悲 [专家分:29120] 发布于 2008-08-31 09:19:00
那你就问写这段程序的人吧
他怎么想的别人怎么知道?
猜测,太费劲(人的想法是最难猜的)。
去问,又不知道他是谁。
7 楼
一江秋水 [专家分:9680] 发布于 2008-08-31 10:17:00
首先你要明确:funl函数采用了传址方式,你在函数中对实参x、y所作的改变也会使调用语句中的a、b改变,反过来讲,a 的改变也会使 x 改变(因为 a 是模块级变量)。
在函数的for循环中,for i=1 to y 就是 for i=1 to 2。这里要注意的是:循环终值变量 y,系统计算出它的值后,就把这个值放在规定的堆栈中,这个值就不会因循环体中 y 值的改变而改变。
第一次调用 funl 函数时,实参 x=1,y=2
第一次循环的结果:y=3,x=5,a=5(注意:x 本来=2,但因为是传值方式,当 a=5 后,x 也跟着=5)
第二次循环的结果:y=4,x=10,a=10(注意事项同上)
函数返回值=14,a=10,b=4
又一次调用 funl 函数时,实参 x=14,y=4
第一次循环的结果:y=5,x=15,a=20(注意:与第一次调用不同,这一次传值给 x 的是表达式,所以
当 a 改变后 x 不会跟着改变)
第二次循环的结果:y=6,x=16,a=22
第三次循环的结果:y=7,x=17,a=24
第四次循环的结果:y=8,x=18,a=26
函数返回值=34,a=26,b=8
建议你在以后的编程中不要采用这种方式,难以理解,容易出错。
我来回复