不是VIP会员,不能显示答案

题目解答

题目:
共25分(每空五分)
表的操作:设有一个表,记为L=(a1, a2, …, an),其中:
L:表名
a1, a2, …, an为表中的元素
当ai为0~9数字时,表示元素,ai为大写字母时, 表示是另一个表,但不能循环定义。
例如下列表的定义是合法的。(约定L是第一个表的表名)
L=(1,3,K,8,0,4)
K=(3,P,4,H,7)
P=(2,3)
H=(4,0,5,3)
程序要求:当全部表给出之后,求出表中所有元素的最大元素,以及表中全部元素的和。
[算法提要]:表用记录类型定义:
长度(LENGTH)
表体(是元素为字符类型的数组ELEMENT)
队列用数组BASE表示;
队列指针用整型变量 FRONT 与REAR。
为此,设计一个字符入队的过程inqueue,出队函数outqueue,表中最大元素及元素求和均采用递归计算。
程序:
    PROCEDURE INQUEUE(Q,C);     //过程需要二个参数,Q记录类型,C字符类型//
       Q.REAR := (Q.REAR+1) MOD (MAX+1); ;
       Q.BASE[Q.REAR] := C;
END;  //过程结束//

    FUNCTION OUTQUEUE(Q)     //函数需要一个参数,Q记录类型//
       Q.FRONT :=  (Q.FRONT+1) MOD (MAX+1); ;
       OUTQUEUE := Q.BASE[Q.FRONT]
END;  //函数结束//

    FUNCTION MAXNUMBER(C)  //函数需要一个参数,C字符类型//
        Max := CHR(0);
        FOR i:=1 to T[C].LENGTH  DO
          CH := T[C].ELEMENT[i];
          IF  (CH>=’A’)AND (CH<=’Z’)  THEN 
                                M := MAXNUMBER(CH)
                             ELSE 
                                M := CH
         ENDIF;
           IF   MAX < M  THEN  
                   MAX := M
             ENDIF;
        ENDFOR;
            MAXNUMBER:=MAX; 
    END;  //函数结束//

    FUNCTION  TOTAL(C)    //函数需要一个参数,C:字符类型//
       K := 0;
       FOR i:= 1 TO T[C].LENGTH  DO
      CH := T[C].ELELMENT[i];
       IF  (CH>=’A’)AND (CH<=’Z’)  THEN 
                                 M := TOTAL(CH);
                               ELSE
                                  M := ORD(CH)-ORD('0');
        ENDIF
        K := K + M
       ENDFOR;
       TOTAL := K;
END;  //函数结束//

    //主程序//
        MAX := 36;
    FOR TABNO := 'A' TO 'Z' DO
        T[TABNO].LENGTH := 0;
    ENDFOR;
    Q.FRONT := 0;  Q.REAR := 0;
      INQUEUE(Q,'L');
      WHILE (Q.FRONT <>Q .REAR ) DO
       TABNO := OUTQUEUE(Q);
       WRITE(TABNO, '=');
       READLN(S);
       i := 1;
         WHILE S[i] <> '(' DO 
            i := i+ 1;
         ENDWHILE;
         WHILE S[i] <> ')' DO
           IF (S[i]>='A') AND (S[i]<='Z')  THEN
             S[i]:=CHR(ORD(S[i])+ORD('A')-ORD('a'));
             IF (S[i]>='A') AND (S[i]<='Z') THEN 
                 INC(T[TABNO].LENGTH);
           T[TABNO].ELEMENT[T[TABNO].LENGTH] := S[i];
           INQUEUE(Q, S[i]);
             ENDIF;
                ELSE
                  IF (S[i]>='0') ANDN (S[i]<='9') THEN 
       INC(T[TABNO].LENGTH);
       T[TABNO].ELEMENT[T[TABNO].LENGTH] := S[i]
                  ENDIF;
                 INC(i)
              ENDIF;
        ENDWHILE;
       ENDWHILE;
    WRITE('The max number in table L is:', maxnumber('L'));
    WRITE('Total  is:', total('L'))
    END.  //主程序结束//
考点:
分析:
解答:
评论:
老师: