| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 590 人关注过本帖
标题:菜鸟问一个关于数据类型问题
只看楼主 加入收藏
ahjszll
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2007-5-17
收藏
 问题点数:0 回复次数:8 
菜鸟问一个关于数据类型问题

#include<stdio.h>
main()
{
int i,sum,s1,d;
scanf("%ld",d);
sum=0; 输入给d的值为20,但结果为什么和下面的不一样.
s1=1;
for(i=1;i<=d;i++)
{
s1=s1*i;
sum=sum+s1;
}
printf("The sum is %ld\n",sum);
}

#include<stdio.h>
main()
{
int i,s1=1,sum=0;
for(i=1;i<=20;i++)
{
s1*=i;
sum+=s1;
}
printf("%ld",sum);
}

请问这是不是因为数据类型的错误?还是其他的错误,我确实找不出错误,请指教.

搜索更多相关主题的帖子: 类型 数据 
2007-05-20 18:32
liuhaigang
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2007-5-20
收藏
得分:0 


scanf("%ld",d);者具有错误,在d 前应给加&号。
循环中不同导致了结果的不同,可能是第二个多了一次循环!!

2007-05-20 19:09
ahjszll
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2007-5-17
收藏
得分:0 

谢谢


scanf("%ld",d);
改成
scanf("%ld",&d);
两者的结果还是不同.而且这两个循环语句好象没什么不同.

2007-05-20 21:51
死了都要C
Rank: 4
来 自:四川成都
等 级:贵宾
威 望:13
帖 子:1582
专家分:116
注 册:2006-12-7
收藏
得分:0 
```就是````两个程序没有什么不一样的啊```


答案应该都是一样的啊``
尽管``答案不是我们要的```


你的sum是INT的```

在sum+=s1;
语句里```sum是回益出的```它装不完我们要的值```


女施主``我给你``送茶来了```师太``你就从了老衲吧``
代码本天成~~~妙头偶得之```
2007-05-20 22:10
china008
Rank: 1
等 级:新手上路
帖 子:76
专家分:0
注 册:2007-5-8
收藏
得分:0 
都改成这样

for(i=1;i<=20;i++)
{
s1*=i; printf("%ld ",s1);
sum+=s1; printf("%ld ",sum);
}
你自己看看它们的值

2007-05-20 22:15
shuaiye
Rank: 1
等 级:新手上路
帖 子:445
专家分:0
注 册:2006-5-15
收藏
得分:0 
用int类型 计算阶乘在15左右就会溢出。

由于工作,N久都没来了!
2007-05-20 22:20
死了都要C
Rank: 4
来 自:四川成都
等 级:贵宾
威 望:13
帖 子:1582
专家分:116
注 册:2006-12-7
收藏
得分:0 
`~~啊``我大概想了下```

这样的 :

第一个里面```d是以%ld输入的``那么d就由INT变成了LONG```

在for(i=1;i<=d;i++)里的比较里``i为INT```d为LONG``就要进行数据类型转换```

i回变为``LONG```

然后看s1=s1*i;```s1也回跟着i变为LONG``` 继续看sum=sum+s1``sum也回变成LONG``



而for(i=1;i<=20;i++)里的20为INT``所以i就不用转换``

那么这里的 i 还是INT``后面的s1和SUM也是INT```


着下好办了```

你是SUM应该要装的是```;1!+2!+3!+....20!吧``对吗?

这个数很大```第一个程序的 LONG sum 可能装的下`
但是``第二个程序的``` ` INT sum 就装不下了(要益出```)``

所值就不一样了```

把int i,s1=1,sum=0;``的INT 该为LONG``运行以下``

2个程序应该回一样吧```



我自己没运行过``不知道我说错没有``

女施主``我给你``送茶来了```师太``你就从了老衲吧``
代码本天成~~~妙头偶得之```
2007-05-20 22:23
yinlenc
Rank: 1
等 级:新手上路
帖 子:147
专家分:0
注 册:2007-5-17
收藏
得分:0 
#include<stdio.h>
main()
{
int i,sum,s1,d;
scanf("%ld",d);//加上&d
sum=0; 输入给d的值为20,但结果为什么和下面的不一样.
s1=1;
for(i=1;i<=d;i++)
{
s1=s1*i;
sum=sum+s1;
}
printf("The sum is %ld\n",sum);
}

2007-05-20 22:59
ahjszll
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2007-5-17
收藏
得分:0 
谢谢大家



把int i,s1=1,sum=0;``的INT 该为LONG``运行的结果为:268040729
没改之前的为:135526937
而我上面黑色代码的结果为:121872409
这好像和scanf("%ld",d);中的"%ld"无关,因为我试了一下,他们的结果是一样的 ,我用的是Win-Tc.

问题依然不明白

[此贴子已经被作者于2007-5-21 22:54:37编辑过]

2007-05-21 22:48
快速回复:菜鸟问一个关于数据类型问题
数据加载中...
 
   



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

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