目的是在整数列表中找到最大值。
program findMaximum(input,output);
var
number: integer; Maximum: integer;
begin
writeln('Insert any number except of 0. 0 finishes your input.');
if eof then
writeln('No input!')
else
begin
read(number);
Maximum:= number;
while not eof do
begin
if number>Maximum then
read(number);
Maximum := number
end;
if number<0 then
read(number);
Maximum:= 0;
writeln ('The highest number is 0.')
end.
目标是找到最大值,而0关闭序列并且不包括在输入中。此外,用户不输入任何内容的情况需要计入。有人可以帮忙吗?
答案 0 :(得分:0)
一般建议:
你绝对应该重新阅读复合语句和 if..then..else 的语法。使用 if 语句比较 number 时,您的代码可能与您的预期不符。
然后,请用纸和铅笔手动运行你的代码(你让计算机执行程序的部分),思考一个语句的效果并写下所涉及的变量的任何值和然后继续下一个声明,直到你到达最后结束。这将使您更好地了解代码的作用。要分析代码的特定 misbehavior ,您可能希望使用调试器来学习。
特定于您的代码:
使用给定代码输入的任何负数都会将最大值重置为 0 。这可能是 Maximum 初始化失败的结果,因为您似乎试图确保最大值不会作为负值返回?
此外,您缺少所述的终止条件(输入 0 将结束程序)。
通过修复这些方面,代码将如下所示:
program findMaximum(input,output);
var
number: integer; Maximum: integer;
readOn: boolean;
begin
Maximum:=0;
readOn := true;
writeln('Insert any number except of 0. 0 finishes your input.');
if eof then
writeln('No input!')
else
begin
read(number);
Maximum:= number;
while readOn and not eof do
begin
if number = 0 then
readOn := false
else
begin
if number>Maximum then
Maximum := number;
read(number);
end;
end;
writeln ('The highest number is ',Maximum,'.');
end
end.
但是,在输入期间发生EOF时,您将无法正确处理此情况。 (不仅仅是在读取值时的第一个事件。)
考虑到这一点,你最终可能会使用:
program findMaximum(input,output);
var
number: integer; Maximum: integer;
readOn: boolean;
valuesSeen: boolean;
begin
Maximum:=0;
readOn := true;
valuesSeen := false;
writeln('Insert any number except of 0. 0 finishes your input.');
read(number);
while readOn and not eof do
begin
if not eof then
begin
if number = 0 then
readOn := false
else
begin
valuesSeen := true;
if number>Maximum then
Maximum := number;
read(number);
end
end
end;
if valuesSeen then
writeln ('The highest number is ',Maximum,'.')
else
writeln('No input!')
end
end.