主题:这个判断小数位数的程序错在什么地方呢?
言午
[专家分:0] 发布于 2005-04-08 13:21:00
新近在教学生时要求学生编一道求小数位数的程序, 一位学生编程如下:
var i:real;
j:integer;
begin
readln(i);
repeat
i:=i*10;
j:=j+1;
until i=trunc(i);
writeln(j);
end.
输入:
23.234
输出:
3 ----->正确
输入:
7.98
输出:
15 正确的结果应为2.
请教各位大虾,问题出在什么地方. 是否是I实数有误差???
回复列表 (共7个回复)
沙发
xuzhenyi [专家分:850] 发布于 2005-04-08 17:23:00
var a:char;
b:string;
i,k:integer;
begin
read(a);
while a<>'.' do
begin
read(a);
end;
readln(b);
i:=length(b);
writeln(i);
readln;
end.
板凳
言午 [专家分:0] 发布于 2005-04-08 21:02:00
楼上大虾, 你的程序确实可以解决求小数位数问题, 关键在于没有给我的学生的错误程序开出好药方
3 楼
xuzhenyi [专家分:850] 发布于 2005-04-11 21:23:00
晕了
你的程序
什么数字都不出错
唯独*.98一直出错
相信你的学生用的是Int()函数{即虽然是求整但其依然是real}
结果为11
我也不是大虾
没办法了
4 楼
zhengly [专家分:0] 发布于 2005-05-07 07:40:00
是不是,你把函数打错了,你的学生原来是函数是ROUND。
5 楼
davidw017 [专家分:4170] 发布于 2005-05-08 17:19:00
你每次运行有没有初始化啊……
6 楼
88888wan [专家分:0] 发布于 2005-05-15 15:12:00
这个程序应该没有什么错误,可以求出小数位数.
7 楼
hs3180 [专家分:530] 发布于 2005-05-15 17:29:00
零开头也会出错
我来回复