| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 709 人关注过本帖, 1 人收藏
标题:WHY不同的循环语句,结果不过?
只看楼主 加入收藏
abigbadboy
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2010-4-17
结帖率:0
收藏(1)
已结贴  问题点数:20 回复次数:6 
WHY不同的循环语句,结果不过?
今天我在学C语言的时候发现不同的循环语句,得出的结果缺是不同,高手帮忙解决下,如果我的程序有问题,也请麻烦指出来,这是问题1.问题2是为什么得出的结果的过程中出现过负数?
题目是这样的,求1的阶乘+2的阶乘+3的阶乘+~~~~+18的阶乘
我都是在C-FREE软件下编写的
程序1
#include"stdio.h"
void main()
{
    int a=1,sum=0,s=1;
    while(a<18)
    {
        s=s*a;
        sum=sum+s;
        a++;
        printf("sum=sum+s=%d\n",sum=sum+s);
    }
}
程序2
#include"stdio.h"
void main()
{
    double sum=0,s=1;
    int i=1;
    for(i=1;i<=18;i++)
    {
        s=s*i;
        sum=sum+s;
    }
    printf("SUM=%.01f",sum);
}
搜索更多相关主题的帖子: WHY 语句 结果 
2010-07-22 21:43
vs_inzaghi
Rank: 5Rank: 5
来 自:湖北
等 级:职业侠客
威 望:1
帖 子:303
专家分:364
注 册:2009-8-17
收藏
得分:4 
看了一眼,就发现问题了:
18的阶乘是个很大的数,好像要大于int的上限32767吧?那么结果肯定是溢出了……所以会出现负数,定义成long型就可以了……
你第二个循环不知道为什么要定义成double型?根据题目很显然你的所有中间值和结果都是整数……
你第二个循环的算法是对的……问题在printf语句上……
第一个循环中,你在printf的时候输出时应该直接写成sum就行了,你写成sum=sum+s的话,就会发现是在你将要输出的正确的sum值的基础上又+了s一次,那么结果就不对了……更何况,printf应该是在while语句的括号外面,不然你会输出17次,除非题目特别要求,一般这种题没人会这样输出……另外你的循环条件也有问题,你是求的一直加到18的阶乘,那么你应该a<=18,不然你只能加到17的阶乘……因为你用的是while循环而不是do……while循环……

我很懒,但我讨厌别人说我懒……
2010-07-23 07:11
菜鸟auto
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:58
专家分:100
注 册:2010-7-23
收藏
得分:4 
学习了
2010-07-23 08:06
Alar30
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:10
帖 子:988
专家分:1627
注 册:2009-9-8
收藏
得分:4 
向2#学习
并感叹
基础知识的掌握很重要
呵呵
2010-07-23 08:28
a151937404
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:46
专家分:117
注 册:2010-6-11
收藏
得分:4 
支持2楼。
2010-07-23 10:00
骐骥
Rank: 1
等 级:新手上路
帖 子:2
专家分:4
注 册:2010-7-23
收藏
得分:4 
2楼好眼力
2010-07-23 11:28
vs_inzaghi
Rank: 5Rank: 5
来 自:湖北
等 级:职业侠客
威 望:1
帖 子:303
专家分:364
注 册:2009-8-17
收藏
得分:0 
多谢大家捧场……欢迎指正……

我很懒,但我讨厌别人说我懒……
2010-07-23 12:01
快速回复:WHY不同的循环语句,结果不过?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025840 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved