为什么我运行出来是个负数?

shaozi1985 2006-08-11 04:49:21

main()
{
int i,j=0,k=0;float l=0;
for(i=1;i<=100;i++) //1+2+3...+100//
j=j+i;
for(i=1;i<=50;i++) //1*1+2*2+3*3....50*50//
k=k+i*i;
for(i=1;i<=10;i++)
l=l+1/i; //1/1+1/2+1/3....1/10//
printf("%8.2f",j+k+l);
}
高手们帮我解决一下!!
...全文
299 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
mgdcs 2006-08-13
  • 打赏
  • 举报
回复
for(i=1;i<=10;i++)
l=l+1/i; //1/1+1/2+1/3....1/10
//可以正确计算,因为语句中有float型变量(l),则语句中所有的变量均转化为double参与运算
橄榄丝 2006-08-13
  • 打赏
  • 举报
回复
很不错啊。
cloudfly0424 2006-08-13
  • 打赏
  • 举报
回复
to xiantongyuan()

改为,for(i=1;i<=10;i++)
L=1+1.0/i;
这是运算符的问题,因为在都是整数时,“/”是求余符号;只有在浮点数时才是我们平时所说的除;
-------------------------------------------------------------------
两个整数相除难道不是用“/”么?
xiantongyuan 2006-08-13
  • 打赏
  • 举报
回复
溢出了,int 的范围是-32768----32767,而1到100的和大于32767,所以不正确,第二个循环一样不正确。
第三个循环本来就不正确,
for(i=1;i<=10;i++)
l=l+1/i;
----------------
改为,for(i=1;i<=10;i++)
L=1+1.0/i;
这是运算符的问题,因为在都是整数时,“/”是求余符号;只有在浮点数时才是我们平时所说的除;
tailzhou 2006-08-13
  • 打赏
  • 举报
回复
l=l+1/i;

确实算不出正确的结果来;

l=l+1.0/i;

当时只考虑溢出,没仔细想精度的问题.
iambtk 2006-08-12
  • 打赏
  • 举报
回复
有收获
cmcmcccm 2006-08-12
  • 打赏
  • 举报
回复
for(i=1;i<=10;i++)
l=l+1/i; //1/1+1/2+1/3....1/10//
这个可以算出来?
kobefly 2006-08-12
  • 打赏
  • 举报
回复
cmcmcccm(cm) ( ) 信誉:100 2006-08-12 11:22:00 得分: 0


for(i=1;i<=10;i++)
l=l+1/i; //1/1+1/2+1/3....1/10//
这个可以算出来?


对亚, 这个能算出来吗?
怀疑中, 1/i, 两个都整数, 结果怎么说也是个整数, i>1的话, 就是0啊

eggqq007 2006-08-11
  • 打赏
  • 举报
回复
果然如此
bombwang 2006-08-11
  • 打赏
  • 举报
回复
显然结果超出int的范围
anyue417 2006-08-11
  • 打赏
  • 举报
回复
to :windindance(风舞轻扬·白首为功名)

标准C并未规定int 为2 个字节,“int类型可以为16位或32位,各编译器可以根据硬件特性自主选择合适的类型长度”--摘处“The C programming language”

一般int 是4个字节 ,比如vc6中。
shaozi1985 2006-08-11
  • 打赏
  • 举报
回复
谢谢高手们帮我解决了这个问题~~~~~
看来我这个菜菜以后有救了~~~
tailzhou 2006-08-11
  • 打赏
  • 举报
回复
main()
{
int i,j=0,k=0;float l=0;
for(i=1;i<=100;i++) //1+2+3...+100//
l+=i;
for(i=1;i<=50;i++) //1*1+2*2+3*3....50*50//
l+=i*i;
for(i=1;i<=10;i++)
l+=1/i; //1/1+1/2+1/3....1/10//
printf("%8.2f",l);
}
chenhu_doc 2006-08-11
  • 打赏
  • 举报
回复
恩,overflow了

用long int代替可以。。

不过随着数的不断增大,可以参考用数组了表示。。
windindance 2006-08-11
  • 打赏
  • 举报
回复
解决方法:使用long 代替 int
windindance 2006-08-11
  • 打赏
  • 举报
回复
你是用标准C吗?
标准C里,int是2个字节,最大为32767
//1*1+2*2+3*3....50*50//
= 42925> 32767
导致溢出。

69,373

社区成员

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

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