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

题目解答

题目:
共32分(每空四分)
设有一个实数,以字符串形式存放于数组x中,用x:array[1..N]of char表示。其中x[1]若为'-',表示负数;若为'+'、'.'或' ',则表示正数。若为数字,也认为是正数。
例如 x=(' ','2','0',' ','3','.','5','%') 则表示203.5
x=('-','1','.',' ','2','0','%') 则表示-1.2
约定:在字符串x中,除x[1]外,其后可以包含有若干个'.'与' ',但仅以第一次出现的为准,空格不起任何作用,并以字符'%'作为结束标志。
程序要求:将输入的字符串还原成实数输出(小数点后无用的0应除去),还原的结果以下列形式存放(不需要输出)。
F:数符。正数放0,负数放1。
A:array[1..N] of integer; 存放数字,不放小数点。
K:表示A中有效数字的个数。
J:表示小数点后的位数。
例如:数203.24,还原后结果的存放是:
F=0
A=(2, 0, 3, 2, 4)
K=5
J=2
又如:数-33.0740,还原后结果的存放是:
F=1
A=(3, 3, 0, 7, 4)
K=5
J=3
[算法提要]:x : array[1..10] of char;可放长度定为10;首先读入字符串,然后处理数的符号,在还原的过程中,需要判定整数部分与小数部分,同时去除多余的空格和小数点,并约定输入是正确的,不用作出错检查。
程序:
    FOR I := 1 TO 10 DO A[I] := 0;       ENDFOR;
   FOR I := 1 TO 10 DO READ(X[I]);    ENDFOR;
   J := 0; F := 0; K := 0; B := 0;
   IF X[1] = '-' THEN BEGIN
                    F:=1;
                    I:=2;
                   END
             ELSE IF X[1] := '  '  THEN I := 2
                                ELSE I := 1;
                   ENDIF;
   ENDIF;
   WHILE   (X[I]<>' ')AND (I<10)  DO
         I := I + 1;
   ENDWHILE
   WHILE  X[I] <> '%'  DO
       IF  (X[I] >= '0')  AND  (X[I] <= '9')   THEN 
                                             K := K + 1;
                                             A[K]:=ORD(X[I]-ORD('0');;
                                          IF   B = 1  THEN                                                          J:=J+1;
                                          ENDIF
         ELSE  IF (X[I]='.') AND (B=0) THEN 
                                       B := 1;
               ENDIF
         I := I + 1
       ENDIF;
    ENDWHILE;
    IF   J > 0   THEN  WHILE A[K]=0  DO 
                                 J:=J-1;
                                 K:=K-1;
                       ENDWHILE;
    ENDIF.
END.   //程序结束//
考点:
分析:
解答:
评论:
老师: