batcj1 发表于 2013-10-28 11:14:37

一个小东西不懂? 新手

#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);
}

my_angel 发表于 2013-10-28 11:14:38

(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);
}

peterboboo 发表于 2013-10-28 12:17:39

第一、这个1.#INF表示无穷大,意思是你的结果超过了计算机所能表示的范围。不信你可以把m改成5试试,肯定能出结果。
第二、t不能放在double哪里的声明之后,t放在哪里是错误的。就是因为t放在哪里才导致的溢出,s放在哪里是没有问题的

CL0419 发表于 2013-10-28 14:18:26

看我写的,没错……

peterboboo 发表于 2013-10-28 15:00:33

CL0419 发表于 2013-10-28 14:18 static/image/common/back.gif
看我写的,没错……

6当然没错了,你改成100试试

CL0419 发表于 2013-10-28 15:05:54

peterboboo 发表于 2013-10-28 15:00 static/image/common/back.gif
6当然没错了,你改成100试试

100也是一样,结果出来了……

流云93 发表于 2013-10-28 19:15:50

真的一百不可以,是不是超出了double的范围

peterboboo 发表于 2013-10-29 11:17:59

流云93 发表于 2013-10-28 19:15 static/image/common/back.gif
真的一百不可以,是不是超出了double的范围

说的没错,超过了double表示的范围,就成了1#inf了,表示无穷大。当然有些64位的机器不一定超过。

1138199401 发表于 2013-10-29 11:22:15

看看这样写可能容易理解些:
#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]
查看完整版本: 一个小东西不懂? 新手