一个小东西不懂? 新手
#include<stdio.h>void main()
{
int i,m;
double sum,t;
printf("下面我们将输出1-100之间的阶乘之和!\n");
for(m=1 ; m<=100 ; m++)
{ t=1; (1)
for(i=1 ; i<=m ; i++)
{
t*=i;
}
sum=0; (2) /*如果我把红色标记的的这两处赋值放在声明数据类型的double之后运行出来就有问题,运行如下*/
sum+=t;
}
printf("1!+2!+3!+……+100!=%g\n",sum);
}
(1)处是对的,但是(2)应该是声明的时候同时定义。。你这样是错的,都没有将每个阶乘数累加起来。。。#include <stdio.h>
void main()
{
int i,k;
double t=1,sum=0;
for(i=1;i<=100;i++,t=1){
for(k=1;k<=i;k++)
t=t*k;
printf("%d! = %e\n",i,t);
sum+=t;
}
printf("sum = %e\n",sum);
} 第一、这个1.#INF表示无穷大,意思是你的结果超过了计算机所能表示的范围。不信你可以把m改成5试试,肯定能出结果。
第二、t不能放在double哪里的声明之后,t放在哪里是错误的。就是因为t放在哪里才导致的溢出,s放在哪里是没有问题的 看我写的,没错…… CL0419 发表于 2013-10-28 14:18 static/image/common/back.gif
看我写的,没错……
6当然没错了,你改成100试试 peterboboo 发表于 2013-10-28 15:00 static/image/common/back.gif
6当然没错了,你改成100试试
100也是一样,结果出来了…… 真的一百不可以,是不是超出了double的范围
流云93 发表于 2013-10-28 19:15 static/image/common/back.gif
真的一百不可以,是不是超出了double的范围
说的没错,超过了double表示的范围,就成了1#inf了,表示无穷大。当然有些64位的机器不一定超过。 看看这样写可能容易理解些:
#include <stdio.h>
void main()
{
int i,k;
double b,sum=0;
for(i=1;i<=100;i++)
{
b=i;
for(k=1;k<i;k++)
{
b=b*k;
}
printf("%d!=%g\n\n",i,b);
sum+=b;
}
printf("阶乘总和:\n");
printf("sum = %g\n",sum);
}
页:
[1]