鱼C论坛

 找回密码
 立即注册
查看: 3201|回复: 8

一个小东西不懂? 新手

[复制链接]
发表于 2013-10-28 11:14:37 | 显示全部楼层 |阅读模式
2鱼币
#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);
} QB7II0WRYBW3P4Q8C45HXW4.jpg

最佳答案

查看完整内容

(1)处是对的,但是(2)应该是声明的时候同时定义。。你这样是错的,都没有将每个阶乘数累加起来。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-10-28 12:17:39 | 显示全部楼层
第一、这个1.#INF表示无穷大,意思是你的结果超过了计算机所能表示的范围。不信你可以把m改成5试试,肯定能出结果。
第二、t不能放在double哪里的声明之后,t放在哪里是错误的。就是因为t放在哪里才导致的溢出,s放在哪里是没有问题的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-10-28 14:18:26 | 显示全部楼层
看我写的,没错……
QQ图片20131028142005.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-10-28 15:00:33 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-10-28 15:05:54 | 显示全部楼层
peterboboo 发表于 2013-10-28 15:00
6当然没错了,你改成100试试

100也是一样,结果出来了……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-10-28 19:15:50 | 显示全部楼层
真的一百不可以,是不是超出了double的范围
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-10-29 11:17:59 | 显示全部楼层
流云93 发表于 2013-10-28 19:15
真的一百不可以,是不是超出了double的范围

说的没错,超过了double表示的范围,就成了1#inf了,表示无穷大。当然有些64位的机器不一定超过。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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);       
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-22 09:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表