[单项选择题] 某人编写了下面的程序 Private Sub Command1_Click()Dim a As Integer,b As Integera=InputBox("请输入整数")b=InputBox("请输入整数")pro apro bCall pro(a+b) End Sub Private Sub pro(n As Integer)While(n>0) Print n Mod 10; n=n10WendPrint 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+改为pro a+b
C.把n=n10改为n=n/lO
D.在pro b语句之后增加语句c%=a+b,再把Call pro(a+改为pro c
参考解析:[知识点] 参数的传递[评析] 形参名前面缺省修饰词,或有“ByRef”关键字时,则指定它是一个按地址传递的参数。按地址传递参数时,形参和实参共用内存的“同一”地址,即共享同一个存储单元,形参值在过程中一旦被改变,相应的实参值也跟着改变。按值传递参数(ByVal),传递的只是实参变量的副本。当采用按值传递时,过程对参数的任何改变实际上都是对栈中值的改变,仅在过程内部有效,而不影响实参变量本身。换句话说,一旦过程运行结束,控制返回调用程序时,对应的实参变量保持调用前的值不变。本题中,过程Sub pro(n As Integer)的形参变量n按地址传递参数。程序执行pro a、pro b、Call pro(a+b)语句的过程如下: pro a n Print n Mod 10 n=n10 123 3 12 12 2 1 1 1 0 程序结束时形参n的值变为0,则实参a的值也变为0。 pro b n Print n Mod 10 n=n10 234 4 23 23 3 2 2 2 0 程序结束时形参n的值变为0,则实参b的值也变为0 Call pro(a+b)此时表达式a+b的值为0,过程pro()没有执行循环,所以不会反序输出变量a+b之和753。要想输出变量a+b的实际输入的值的和,则变量a和b在过程的运行期间必须保持不变,因此形参必须采用传值的方式,故选项A正确。