江苏省高校计算机等级考试命题研究院 江苏省高校计算机等级考试辅导
图解法解阅读程序写结果题一则

图解法解阅读程序写结果题一则——顺答yiyibushe提问

                                       曹苏群 http://caosuqun.bokee.com

题目(By yiyibushe):

Dim x As Integer, y As Integer

Private Sub form_click()

    Dim a As Integer, b As Integer

    a = 5: b = 3

    Call sub1(a, b)

    Print x, y

End Sub

Private Sub sub1(ByVal m As Integer, n As Integer)

    Dim y As Integer

    x = m + n: y = m - n

    m = fun1(x, y)

    n = fun1(y, x)

End Sub

Private Function fun1(a As Integer, b As Integer)

    x = a + b: y = a - b

    Print x, y

    fun1 = x + y

End Function

解答:

  本题主要考察过程调用、参数传递以及变量作用域等知识点,对于此类题型,建议使用图解法来解。

  由第一句:Dim x As Integer, y As Integer 知,xy为模块变量,可以被这三个过程所访问;sub1过程中,有:Dim y As Integer,此处y为过程级变量,因此,在sub1过程中,访问的是过程级变量y而非模块变量y;而在fun1中访问的y是模块变量y而非过程级变量y

  为此,我们可以图解如下:

    1 将模块变量用单列的图来表示,以表示可以为该模块中各个过程所访问,而将过程级变量图示限定在对应过程中。

    2 留意参数传递方式,若按地址传递,则形参和实参图示时指向同一内存单元,若按值传递,则形参和实参图示时各有各的内存单元,仅仅复制值而已。

  给出如下图解图示:

 图解法

 

  图中蓝色线条说明该内存单元均指向sub1中过程级变量y;绿色线条说明该内存单元均指向模块变量x;红色块表示第一次输出结果,即第一次调用fun1执行Print x, y;黄色块表示第二次输出结果,即第二次调用fun1执行Print x, y;最后一次输出结果,即form_click中执行Print x, y恰好与黄色块一样。

  请按照执行流程,对照这个图,仔细推敲