某人编写了下面的程序:
Private Sub Command1_Click()
Dim a As Integer,b As Integer
a=InputBox("请输入整数")
b=InputBox("请输入整数")
pro a
pro b
Call pro(a+b)
End Sub
Private Sub pro(n As Integer)
While(n>0)
Print n Mod 10;
n=n\10
Wend
Print
End Sub
此程序功能是输入2个正整数,反序输出这2个数的每一位数字,再反序输出这2个数之和的每一位数字。例如若输入123和234,则应该输出:
3 2 1
4 3 2
7 5 3
但调试时发现只输出了前2行(即2个数的反序),而未输出第3行(即2个数之和的反序),程序需要修改。下面的修改方案中正确的是( )
A.把过程pro的形式参数n As Integer改为ByVal n As Integer
B.把Call pro(a+b)改为pro a+b
C.把n=n\10改为n=n/10
D.在pro b语句之后增加语句c%=a+b,再把Call pro(a+b)改为pro C
参考答案:A
解析: 在Visual Basic中调用过程时,参数传递有两种传递形式:按值传递(Byval)和按址传递(Byref),默认为按址传递。其中,当参数按址传递时,如果在引用该参数的过程中改变了形参的值,同时也就改变了传递参数时实参变量的值。
在本题中,通用过程pro的功能是将形参(为整数)中的每一位数反序输出显示,该过程默认按址传递参数。因此,当执行语句pro a后,a=0。当执行语句pro b后,b=0。
解决问题的方法可以是:将过程pro的形式参数的传递方式由传址改为传值或是在调用过程pro a和pro b之前,先将a+b的值存入另一个变量中。本题提供的选项中只有选项A是正确的。