一道FoxBASE考题的分析

Author: 刘寅斌 Date: 1997-01-01

#3  题目:以下是用FoxBASE表示计算1~10阶乘的程序。请在空格处填上合适的语句,以使程序完整,并能正确地实现该功能。
  (提示: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  作者语:
  此题的算法较繁琐,还有更简洁的算法。请读者朋友考虑一下如何简化算法。