今天在csdn论坛中,看到几个题目。分析并解答。
原贴是:http://topic.youkuaiyun.com/u/20080116/20/4eed1feb-a5a5-4080-87b5-aaded56e723d.html
(3)指出下面程序的运行结果
主程序:MAIN.RPG 过程文件:PROGC.PRG
SET TALK OFF PROCEDURE PROC1
CLEAR A=A*2+1
SET PROCEDURE TO PROGC RETURN
PUBLICA, B PROCEDURE PROC2
A=5 PRIVATE B
DO PROC1 B=A*2+1
? A C=C*2+1
STORE 2 TO B, C DO PROC3
DO PROC2 PROCEDURE PROC3
SET TALK ON C=C*C
RETURN RETURN
现具体分析如下:
首先,SET PROCEDURE TO的作用是打开过程文件PROGC,以便于直接调用其中的过程。
第二,要理解PUBLIC和PRIVATE的用法。
public 定义全局内存变量或数组。
private 在当前程序中隐藏指定的、在调用程序中定义的内存变量或数组。
将高层程序中创建的、与私有变量同名的变量隐藏起来,可以在当前程序中操作这些私有变量,
而不影响被隐藏变量的值。一旦包含 private 命令的程序执行完毕,所有声明为私有的内存
变量和数组就可恢复使用。
第三,程序执行过程是:
①PUBLIC a, b 定义两个全局变量
②a=5 给a赋值为5后,调用 proc1
③由于a是全局变量,从proc1计算后,返回a的值是11
④所以,? a 时,显示出11
⑤STORE 2 TO b, c 给b和c都赋值为2 ,调用proc2
注意尽管没有指定变量c的范围,但由于是在主程序中定义的,则在其所有的子程序中都有效
⑥执行proc2,语句 PRIVATE b 将变量b指定为私有变量。这样
执行b=a*2+1后,b的值是23;执行c=c*2+1后,c的值是5
⑦然后再调用proc3,变量c的值是25
⑧从proc2返回到主程序后,
由于c是在主程序中定义的,在所有的程序中效(相当于全局变量),故其值仍然是25
然而由于b在proc2中被指定为私有变量,故b的值被恢复到其原来在主程序中的值,即2
将上述程序稍稍更改如下
*main.prg
SET TALK OFF
CLEAR
SET PROCEDURE TO progc
PUBLIC a, b
a=5
DO proc1
? a
STORE 2 TO b, c
DO proc2
? "proc2 后 b= ",b
? "proc2 后 c= ",c
SET TALK ON
RETURN
*progc过程
PROCEDURE proc1
a=a*2+1
RETURN
PROCEDURE proc2
PRIVATE b
b=a*2+1
c=c*2+1
? "proc2中 b=",b
? "proc2中 c=",c
DO proc3
? "proc3后 c=",c
PROCEDURE proc3
c=c*c
**其中,红色的是我加的
运行结果是:
11
proc2中 b= 23
proc2中 c= 5
proc3后 c= 25
proc2 后 b= 2
proc2 后 c= 25
最后,仔细想想,我给大家分析的程序执行过程,不正是上面显示的结果吗?