关于c语言的 为什么会出现负数呢?而且个数也不对.还有输入很长的数时什么运行的for就不动了!

#include<stdio.h>#include<stdlib.h>intmain(void){longinti;longintcnt1=0,cnt2=0,s=0,su... # include <stdio.h>
# include <stdlib.h>
int main (void)

{
long int i;
long int cnt1=0,cnt2=0,s=0,sum1=0,sum2=0;
double average1=0, average2=0;

printf ("请输入0到多少的整数(包含0):");
scanf ("%d",&s);

for (i=0; i<=s; ++i)
{
if (i%2 == 0)
{
++cnt1;
sum1 += i;
average1 = 1.0*sum1/cnt1;
}
else
{
++cnt2;
sum2 += i ;
average2 = 1.0*sum2/cnt2;
}

}

printf ("奇数有%ld个\n 偶数有%ld个\n 奇数和为%ld\n 偶数和为%ld\n 奇数平均值为%lf\n 偶数平均值为%lf\n ", cnt2, cnt1, sum2, sum1, average2, average1);

system ("pause");
return 0;
}
/*
为什么会出现负数呢?而且个数也不对.还有输入很长的数时什么运行的for就不动了!
---------------------------------------------------------------
请输入0到多少的整数(包含0):151554545
奇数有75777273个
偶数有75777273个
奇数和为-77776335
偶数和为-153553608
奇数平均值为-1.026381
偶数平均值为-2.026381
请按任意键继续. . .
--------------------------------------------------------------
*/
展开
 我来答
濸海月明
2015-08-15 · 超过38用户采纳过TA的回答
知道小有建树答主
回答量:62
采纳率:100%
帮助的人:51.3万
展开全部

出现负数,是因为奇数、偶数的和太大,超过了long(长整型)类型的最大值了。

个数是对的,0-151554545共有151554546个数,其中奇数偶数各有75777273个。

至于for不动了,是for循环进入死循环了,你的编译器中int是2bytes,最大值为32768,当i加到32769的时候,就越界了,成为负数,所以i永远不会大于你输入的151554545这个数值,所以死循环。


推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式