一道FoxBASE考题的分析
(提示:X的阶乘=1*2*3*....*X)
CLEAR (1)
SET TALK OFF (2)
I=1 (3)
DO WHILE .T. (4)
K=1 (5)
(1) (6)
DO WHILE J<I+1 (7)
(2) (8)
J=J+1 (9)
ENDDO (10)
?K (11)
I=I+1 (12)
IF I>10 (13)
(3) (14)
ENDIF (15)
ENDDO (16)
RETURN (17)
#3 分析:
类似题目被参加等级考试的考生视为难点,很多时候感到无从下手。其实,解这类题目,也有一定的方法。首先要正确理解题意,弄清楚程序要实现的目的和功能,要做到有的放矢,心中有数,不能一上来就写程序;其次是要通读程序,在对程序有了大致了解后,再着重研究需填写的语句,以及其前后的程序段,必要时可画出流程图进行仔细分析,最后给出正确的答案。
该题目的是求1~10的阶乘,题意很清晰。通读程序,核心部分在于两个DO WHILE循环,这是实现程序功能的主要部分。既然是求1~10的阶乘,所求的结果放在哪里呢?怎样显示呢?程序中第(11)行?K明显地表示用K显示运算结果。注意第(7)行,出现了一个前面未曾赋值的变量J,显然(1)应是给J赋值的语句。第(11)句显示K的结果,则(2)处必然是涉及K的运算。至于(3),很显然是在超出所需范围以后的一个退出循环处理语句,即应填EXIT。仔细分析(还可画出流程图),可得出答案为:
(1)J=1
(2)K=K*J
(3)EXIT
#3 作者语:
此题的算法较繁琐,还有更简洁的算法。请读者朋友考虑一下如何简化算法。