文本版|topic 高级搜索
   名人堂 帮助 论坛制度 意见反馈 | 首页 博客 周新贴 招聘 专题 新闻
RSS 底部
 
社区导航: 专家门诊   网络技术   操作系统   数据库   程序设计   系统应用   考试认证   CIO及信息化   站长交流   综合交流   下载基地  51CTO产品服务 设为首页 | 收藏本站
51CTO技术论坛» C/C++ » 新人求助:分子和分母不能同时定义成int型吗?       [ 打印]  [ 订阅]  [ 收藏]  [ 推荐给朋友]   [ 本帖文本页]

论坛跳转:
     
标题: 新人求助:分子和分母不能同时定义成int型吗?  ( 查看:259  回复:3 )   
 该主题悬赏的20无忧币已被全部领完 
 
kitten8449
新新人类  点击可查看详细



帖子 1
精华 0
无忧币 5
积分 5
阅读权限 20
注册日期 2008-4-21
最后登录 2008-4-22 离线

[查看资料]  [发短消息]  [Blog
       
发表于:2008-4-21 11:54   标题:新人求助:分子和分母不能同时定义成int型吗?
上一帖 |
程式如下
求1-1/2+1/3-1/4......+1/99-1/100


#include
void main()
{
float sum=1;
int a=1,i=2;
while(i<=100)
{
a=-a;
sum=sum+a/i;
i=i+1;
}
cout<<sum<<endl;
}


程式看上去没有错,可执行的结果始终等于1,
但是如果我把 a 或者 i 定义成float,执行的结果就是对的
难道分子分母不能同时定义成int型吗??
谢谢大家了



网络工程师到底该不该去考CCIE认证?
2008-4-21 11:541楼
[ 顶部 ]
 
675508756
新新人类  点击可查看详细



帖子 39
精华 0
无忧币 52
积分 63
阅读权限 20
注册日期 2008-3-3
最后登录 2008-6-17 离线

[查看资料]  [发短消息]  [Blog
       
发表于:2008-4-21 19:46  该回复被 kitten8449 奖励 20 点无忧币
此回复于2008-04-22 08:53被 kitten8449 评为最佳答案

分子分母同时定义成int型时
它们相除的结果肯定是整型啊!
所以结果除了第一个为1
其余的都是0 啊
所以结果就是1了
但是你把 a 或者 i 定义成float时
系统会自动将另一个转换为float型
因此执行的结果就是对的了



网络工程师到底该不该去考CCIE认证?
2008-4-21 19:462楼
[ 顶部 ]
 
hagejid
副版主  点击可查看详细


十二生肖之猴   金牛座   行业勋章   技术勋章   诚信兄弟  
帖子 377
精华 0
无忧币 1944
积分 464
阅读权限 140
注册日期 2007-4-3
最后登录 2008-7-24 离线

[查看资料]  [发短消息]  [Blog
       
发表于:2008-4-21 19:46 
对于你这个问题我也碰到过,我用DEV-C++的时候也碰到了这个问题.
有时候编译器不像书上说的先把所有的int转为double再运算,这可能是编译优化的问题吧.
sum=sum+a/i;
你尝试这样吧
sum=sum+(double)a/i;
把一些整型进行强制转换,我的编译器强制一个就行了,如果想保险点就全强制转换.



C到底该不该学,看看这个就明白
2008-4-21 19:463楼
[ 顶部 ]
 
ribut9225
主版主  点击可查看详细


诚信兄弟   巨蟹座   专家门诊活动纪念勋章  
帖子 2919
精华 1
无忧币 5292
积分 3864
阅读权限 150
来自 (保密)
注册日期 2006-6-22
最后登录 2008-7-24 离线

[查看资料]  [发短消息]  [Blog
  QQ       
发表于:2008-4-22 08:42 
楼上的正解



用户必读,51CTO积分系统调整通知
2008-4-22 08:424楼
[ 顶部 ]
     
论坛跳转:  

| | |

| | |

| | |

标记已读 · 删除论坛Cookies · 文本版 · WAP
 
| 诚征版主 | 版主堂 | 意见建议 | 大史记 | 论坛地图
Copyright©2005-2008 51CTO.COM  Powered by Discuz!
本论坛言论纯属发布者个人意见,不代表51CTO网站立场!如有疑义,请与管理员联系。
京ICP备05051492号