图解法解阅读程序写结果题一则 |
图解法解阅读程序写结果题一则——顺答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 知,x和y为模块变量,可以被这三个过程所访问;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恰好与黄色块一样。 请按照执行流程,对照这个图,仔细推敲 |