哪位高人帮着解释下这个程序选择题答案,看不懂.下列程序的输出结果clear store 10 to a store 20 to b set udfparms to reference do swap with a,(B)?a,b procedure swapparemeters x1,x2temp=x1x1=x2x2=tempendproc A ,10 20 B,20 20 C 20 10 D 10 10答案是B 能每步都解释下吗 不知道答案怎么出来的,谢谢!

问题描述:

哪位高人帮着解释下这个程序选择题答案,看不懂.
下列程序的输出结果
clear
store 10 to a
store 20 to b
set udfparms to reference
do swap with a,(B)
?a,b
procedure swap
paremeters x1,x2
temp=x1
x1=x2
x2=temp
endproc
A ,10 20 B,20 20 C 20 10 D 10 10
答案是B 能每步都解释下吗 不知道答案怎么出来的,谢谢!

这个程序分为两段,下面是第一段:
1、clear
2、store 10 to a
3、store 20 to b
4、set udfparms to reference
5、do swap with a,(B)
6、?a,b
上述语句的含义为:
1、清除屏幕内容
2、将10存入变量a
3、将20存入变量b
4、设置调用过程的传参数方式为传地址,这样在过程中可以修改参数的值
5、调用swap过程交换a与b中的值
6、在屏幕上输出a与b的值
第二段定义了一个过程swap,用于交换两个参数中的值
7、procedure swap
8、paremeters x1,x2
9、temp=x1
10、x1=x2
11、x2=temp
12、endproc
7、声明过程swap
8、为过程swap声明两个参数 x1,x2
9、将x1中的值存入临时变量temp中
10、用x2的值替换x1中的值,此时x1中存放的值与x2中的值相同
11、用临时变量temp中的值替换x2中的值,此时x2的值变为x1的初始值,从而完成交换x1与x2中的值的操作
12、过程定义结束
在这里最迷惑人的部分是第5句:
do swap with a,(B)
看起来,应该是交换a与b中的值,最后的输入应为20,10,即C
但这里B外面加了一个括号,在运行时,这个(B)被认为是一个表达式,被进行了计算,传入swap的实际上计算后的值的地址,而不是变量B的地址,所以执行swap后的实际效果是将B中的值赋给了A,而B的值没有变化.
如果你将第5句改为:
do swap with a,B
那么答案就变为了C
祝你好运.