在C语言程序里输入了下面程序,但是答案老是负数,求指点。

#include <stdio.h>
void main()
{ int t=0,s=1,m,n;
for(m=1;m<=20;m++)
{
for(n=1;n<=40;n=n+2)
s=s*n;
t=t+s;
}
printf("t=%d\n",t);
}

一般有符号int型常量占两个字节,取值范围0~65535,明显t值超过了最大限度,应该定义为long int型
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-03-26
s永远是n
t永远是n(因为t=0)
第2个回答  2011-03-26
因为你的计算结果溢出了,也就是说你的t计算出来以后很大很大,以至于都没有一种数据类型可以存储,所以结果会是负数。解决的办法是:你可以用一个数组来存放计算结果的“每一位”
例如:假设123已经很大了,那么解决的思想就是:int num[3]; 让num[0] = 1; num[1] = 2; num[3] = 3; 而不是直接定义一个 int i ; 然后把123赋给i 。 这个问题其实就是计算100的阶乘的思想
第3个回答  2011-03-26
结果t数值太大,溢出了,int最大是范围是—32768——32767,吧int改为unsigned long 也不行,还是太小,总之 ,结果太大,放不下了
第4个回答  2019-09-03
实际情况不是输入负数程序不能运行,而是输入负数不做任何处理,要求你继续输入,直到输入10个正数后,才能打印出信息来,你可以在scanf之间增加printf("b:
");来实际测试一下

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网