首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 请教书后一道习题 [已结贴,结贴人:charlie811hanson]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-18 15:05:09 楼主
    书后有一道习题是
    x+a%3*(int)(x+y)%2/4;
    设x=2.5,a=7,y=4.7
    然后求表达式的值,我笔算出来的是2.500000
    然后在dev上面跑了一把,好像结果是2.000000
    程序如下
    #include <stdio.h>
    #include <math.h>
    #include <conio.h>

    int main()
    {int x,a;float y,m;
    x=2.5;
    a=7;
    y=4.7;
    m=x+a%3*(int)(x+y)%2/4;
    printf("%f\n",m);
    getch();

    }
    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-18 15:08:041楼 得分:10
    x=2.5; =〉问题是x是int型的。赋值后x变成了2
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • goodluckyxl
    • 等级:
    发表于:2008-07-18 15:09:432楼 得分:5
    不行的最后你算到
    a%3*(int)(x+y)%2的时候都是int型的计算了
    1/4如果float运算会有0.25
    但是如果是int除法= 0

    你需要最终在除法前面强转类型
    m=x+(float)(a%3*(int)(x+y)%2)/4.0;

    这样看下
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-18 15:11:333楼 得分:0
    那是因为
    int 类型的 x = 2.5 赋值以后x的值是2
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-18 15:12:274楼 得分:0
    飘下....
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • goodluckyxl
    • 等级:
    发表于:2008-07-18 15:12:365楼 得分:5
    你还有类型初始化不对

    一楼说的 那个
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-18 15:12:446楼 得分:0
    应该是int x = 2.5这里从double到int丢失了。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-18 15:33:397楼 得分:0
    正如一楼三楼所说,程序中写错了吧~~
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-18 15:54:358楼 得分:0
    我算出来的也是2.500000
    你的程序把x定义为float
    int 只能接受整数赋值
    你赋值2.5就成了2
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved