这段程序为什么错?(pascal)

来源:百度知道 编辑:UC知道 时间:2024/05/27 10:53:49
program jiaogu;
var n:integer;
begin
write('n=');readln(n);
while n<>1 do
if n mod 2=1
then n:=n*3+1
else n:=n/2;
if n=1
then writeln('right')
else writeln('wrong');
readln;
end.

类型不匹配。
你定义的n是整型,
但else n:=n/2;这里结果n为实型。。
把else n:=n/2改成else n:=n div 2;就可以了,因为你前面已经判断了n 是偶数,执行到这里肯定是整除的。。

如果输入了负数不得了,无法跳出循环啊。

program jiaogu;
var n:real;
begin
write('n=');
readln(n);
while n<>1 do
begin
if n mod 2=1
then n:=n*3+1
else n:=n/2;
end;
if n=1
then writeln('right')
else writeln('wrong');
readln;
end.