社区
C语言
帖子详情
为什么我运行出来是个负数?
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
打赏
收藏
为什么我运行出来是个负数?
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); } 高手们帮我解决一下!!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
导致溢出。
Math.abs 竟然返回了
负数
???
事情是这样的。 某一天扯扯群里发来一段代码: 读者提问道,为啥这个 pos 还要判断一下? 这代码一看我就熟悉,RocketMQ 的源码,如果你看过源码你会发现到处都有这样的判断。 想着已经取绝对值了,然后再取余,肯定是正数啊,这 if(pos<0) 不就是多余的判断吗? 那我们先看一下 Math.abs 的源码: 可以看到,十分简单粗暴,再结合一下 int ,不知道大家是否已经发现了问题? 不卖关子了。 int 的最大值是(2^31) -1,而最小值是-2^31,所以按照 abs 的逻辑,如果a
ascii码值为
负数
_C语言字符型数据的ASCII码值为何是
负数
?
有如下一段C语言程序:#include "stdio.h"int main(void){char a = 0xC8;printf ("字符a的ASCII码值的10进制是%d\n", a);return 0;}程序定义了一个字符‘a’,并且赋予了初始值“0xC8”,这是一个16进制的数。最后,通过printf函数输出字符a的值。程序不难,光看程序,也应该知道最终的结果。16进制“0xC8”的10进制...
c语言怎么判断int16_t类型的数据是正数还是
负数
?
总结:由表格看出,int16_t 十六进制 首字节≥8是
负数
, 首字节<8是正数。 原因很简单,上面说到了int16_t占用2字节,我们知道每8比特一个字节,也就是16比特的二进制数,通俗的说只能存储16比特数据,超出部分自动抹掉了。所以十进制-32768 = 十六进制 FFFF FFFF FFFF 8000 = int16_t十六进制 0x8000,而程序在
运行
的时候,只要定义是int16_t类型,就会自动补齐前面的FFFF FFFF FFFF,无需程序员做额外处理,这就是int16_t类型的巧妙之处。
Sizeof取的长度小于
负数
?
char array[10]="ABCDEFG"; int len=sizeof(array); int num=-1; if(len
负数比较,
运行
结果是“Ture”。why? 因为sizeof的返回值是size_t型,同于unsigned int。 当与一个signed int 做比较的同时,signed in
两个正数相乘或相加,为什么结果是
负数
。/Java基本数据类型介绍
两个正数相乘或相加,为什么结果是
负数
。 首先 1.Java基本数据类型 分为四大类,共八小类 整数型 :byte、short、int、long 分别占 1、 2、 4、 8 个字节 浮点型: float、double 4、 8 个字节 字符型 :char 2 个字节 布尔型: boolean ...
C语言
69,373
社区成员
243,080
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章