回 帖 发 新 帖 刷新版面

主题:一个程序问题

Program exp3(input,output);
label xx;
VAR I,J,S:INTEGER;
B :ARRAY[0..5] OF INTEGER;
BEGIN
  S:=1;
   FOR I:=1 TO 5 DO   B[I]:=I;
   J:=1;
   WHILE J>0 DO
   BEGIN
   J:=5;
    WHILE (J>0) AND (B[J]=10+J-5) DO goto xx; J:=J-1;
    IF J>0 THEN
     BEGIN
     S:=S+1;  B[J]:=B[J]+1;
     FOR i:=J+1 TO 5 DO  B[i]:=B[J]+i-J
     END;
     END;
     xx:writeln(j,' ',b[j]);
     END.
为什么输出5 10 而不是5 5呢

回复列表 (共2个回复)

沙发

goto语句是我加进去的,之后可以看成这样
Program exp3(input,output);
label xx;
VAR I,J,S:INTEGER;
B :ARRAY[0..5] OF INTEGER;
BEGIN
  S:=1;
   FOR I:=1 TO 5 DO   B[I]:=I;
   J:=1;
   WHILE J>0 DO
   BEGIN
   J:=5;
    WHILE (J>0) AND (B[J]=10+J-5) DO goto xx;
xx:writeln(j,' ',b[j]);
     END.

板凳

你没发现吗,从头到尾j始终是大于0吗,你的if z》0或是whie j》0有必要吗,而且你的B[j]=10+j-5你有没有算过,根本就是不可能成立的,所以你的这个语句根本就没有,也不用用goto语句,pascal中是最好不用goto和while语句的,因为那样容易产生死循环的

我来回复

您尚未登录,请登录后再回复。点此登录或注册