指点迷津(运行结果为和不同)

coder2lee 2004-03-23 04:15:58

此题是谭浩强的<<C语言程序设计教程>>中的一个例题(求圆周率的近似值)
运行环境为VC++ 6.0
1:

#include <stdio.h>
#include <math.h>
main()
{
int s;
float i,sum,t; /*i的类型为实型*/
s=1,i=1,sum=0,t=1;
while ((fabs(t))>1e-6)
{sum=sum+t;
s=-s;
i+=2;
t=s/i;
}
sum=sum*4;
printf("%10.6f\n",sum);
}
运行结果为 3.141594

2:

#include <stdio.h>
#include <math.h>
main()
{
int s,i; /* i的类型为整型*/
float sum,t;
s=1,i=1,sum=0,t=1;
while ((fabs(t))>1e-6)
{sum=sum+t;
s=-s;
i+=2;
t=s/i;
}
sum=sum*4;
printf("%10.6f\n",sum);
}
运行结果为 4.000000


...全文
37 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
szlhm 2004-03-23
  • 打赏
  • 举报
回复
没错啦,两个整型数相除得出的结果是整型数的,这一点需要很注意,你即使用(float)t=s/i;得出的结果还是一样的,正确的是:t=s/(float)i;t=(float)s/i;这样就可以向精度最高的类型看齐.
  • 打赏
  • 举报
回复
第二段代码,使用 t = s / (float) i; 就行了。
  • 打赏
  • 举报
回复
这是 “/”捣的鬼。:)
“/”用在两个整型量之间,为“整除”,丢弃了小数点后的部分。

69,381

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧