主题:关于QBASIC的二段程序问题
杨333
[专家分:0] 发布于 2008-11-18 16:09:00
1:
ON KEY(3) GOSUB t
KEY(3) ON
DO
LOOP UNTIL INKEY$<>'"'
END
KEY(3) OFF
t: PRINT "time="; TIME$
RETURN
2:
FUNCTION Age(n)
IF n=1 THEN Age=10 ELSE Age=Age(n-1)+2
END FUNCTION
主程序如下:
DECLARE FUNCTION Age(n)
PRINT Age(5)
END
请各位大侠详细解释一下这二段程序的执行过程[em10][em10][em10]
回复列表 (共1个回复)
沙发
moz [专家分:37620] 发布于 2008-11-19 10:25:00
1:
ON KEY(3) GOSUB t '[color=ff00ff]定义功能键<F3>键跳转[/color]
KEY(3) ON '[color=ff00ff]打开功能键捕捉[/color]
DO '[color=ff00ff]运行空循环[/color]
LOOP UNTIL INKEY$<>'"'
END
KEY(3) OFF '[color=ff00ff]关闭功能键捕捉,这里用在END后面无效[/color]
t: PRINT "time="; TIME$ '[color=ff00ff]功能键捕捉后程序[/color]
RETURN
'[color=ff00ff]其实这段程序在DOS机上已经运行得很不稳定了,
我曾经测试过,经常无法按照构想的计划来运行,
功能键捕捉得不是那么的准确,一般情况下,
我都改在DO循环里捕捉键盘扫描码,
那样子才能确保程序运行在掌控之中。
而且上面程序的行标号用了一个字母t
这可不是什么好习惯。[/color]
2:
FUNCTION Age(n) '[color=ff00ff]函数体[/color]
IF n=1 THEN Age=10 ELSE Age=Age(n-1)+2 '[color=ff00ff]递归调用[/color]
END FUNCTION
主程序如下:
DECLARE FUNCTION Age(n)
PRINT Age(5) '[color=ff00ff]调用函数[/color]
END
'[color=ff00ff]运行顺序如下:[/color]
Pring Age(5) 参数值为5,调用函数
If......=Age(n-1) 参数值为n-1=4,调用函数
If......=Age(n-1) 参数值为n-1=3,调用函数
If......=Age(n-1) 参数值为n-1=2,调用函数
If......=Age(n-1) 参数值为n-1=1,调用函数
参数值为1,得函数值为10
函数值为10,退回上一层调用Age=Age(n-1)+2=10+2=12
函数值为12,退回上一层调用Age=Age(n-1)+2=12+2=14
函数值为14,退回上一层调用Age=Age(n-1)+2=14+2=16
函数值为16,退回上一层调用Age=Age(n-1)+2=16+2=18
得最终结果为18
我来回复