回 帖 发 新 帖 刷新版面

主题:[原创]帮帮忙  急啊

求大家帮帮忙啦 帮我看看
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个回复)

沙发

这就是正确的结果啊?

奥,原来不是你想要的结果?
那能不能说说你想要的结果?

板凳

晕倒 上面我给的那个是正确结果 可是我没有算出来 请高手帮帮忙!

3 楼

估计又是一道二级考试题,考查函数参数传递的

4 楼

程序,首先我们得直到它用来干什么
然后,要是到它是怎么想的
然不是说要输出什么!

如果你要输出:第一行34 第二行26 第三行8
那十分简单:
Private Sub Command1_Click()
    print “34” & vbcrlf & "26" & vbcrlf & "8"
End Sub
你看看,一定能达到你的目的。

5 楼


谢谢教诲 那麻烦你能告诉这个程序的思路吗 我看不懂 请高手指教

6 楼

那你就问写这段程序的人吧
他怎么想的别人怎么知道?
猜测,太费劲(人的想法是最难猜的)。
去问,又不知道他是谁。

7 楼

首先你要明确: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

建议你在以后的编程中不要采用这种方式,难以理解,容易出错。

我来回复

您尚未登录,请登录后再回复。点此登录或注册