关于PASCAL的一个循环程序PROGRAM ZLX;VARI:INTEGER;BEGINWRITELN;FOR I:=1 TO 100 DOBEGINI:=I+100;WRITELN(' ',I);READLN;END;END.此程序在FREE PASCAL 里边是错的但在TP中则可以运行我知道不能随便改变I的值但奇怪的是
来源:学生作业帮助网 编辑:作业帮 时间:2024/09/02 02:55:36
关于PASCAL的一个循环程序PROGRAM ZLX;VARI:INTEGER;BEGINWRITELN;FOR I:=1 TO 100 DOBEGINI:=I+100;WRITELN(' ',I);READLN;END;END.此程序在FREE PASCAL 里边是错的但在TP中则可以运行我知道不能随便改变I的值但奇怪的是
关于PASCAL的一个循环
程序
PROGRAM ZLX;
VAR
I:INTEGER;
BEGIN
WRITELN;
FOR I:=1 TO 100 DO
BEGIN
I:=I+100;
WRITELN(' ',I);
READLN;
END;
END.
此程序在FREE PASCAL 里边是错的
但在TP中则可以运行
我知道不能随便改变I的值
但奇怪的是 在TP中
当完成第一次循环后 I=101 已经大于了终值100
因此我认为此循环会结束
结果只有一个 101
但结果却是匪夷所思
以及后面一大堆负值
关于PASCAL的一个循环程序PROGRAM ZLX;VARI:INTEGER;BEGINWRITELN;FOR I:=1 TO 100 DOBEGINI:=I+100;WRITELN(' ',I);READLN;END;END.此程序在FREE PASCAL 里边是错的但在TP中则可以运行我知道不能随便改变I的值但奇怪的是
我手头没有TP无法做实验.只能猜测一下
我想这个结果可能说明,TP中for循环的终止条件是:循环变量严格等于终止值时跳出.
也就是说,只有当循环执行完毕之后,i=100,循环才会跳出.
但是你这个写法,导致第一次循环执行完毕之后,i已经是101了,虽然大于100,但是程序发现i不等于100,于是继续执行.相当于说,你已经越过终点了,但是是"瞬移"过去的,编译器只盯着100那条线看,没注意到你跳过去了.
要验证这一点,你可以把终止值设为101,202..试试,应该可以结束循环.