小程序求助,为什么输出的值不同(厘米转化为英尺)

AdaMeta 2017-09-29 09:40:06


#include <stdio.h>

int main(){

int cmlen;

scanf("%d",&cmlen);

int foot= cmlen/100.0/0.3048;

int inch = (cmlen/100.0/0.3048-foot)*12;

printf("%d %d\n",foot,inch);

return 0;}
//该代码输出正确





#include<stdio.h>
int main()
{
int cm;//声明一个变量cm

scanf("%d",&cm);//输入一个整数

cm = cm/100.0;//将米转化为厘米

int foot= cm/0.3048;

int inch= (cm/0.3048-foot)*12;

printf("%d %d\n",foot,inch);// 输出

return 0;
}
//该代码输出错误



...全文
276 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
自信男孩 2017-09-30
  • 打赏
  • 举报
回复
#include <stdio.h>

int main()
{

    int cmlen;

    scanf("%d",&cmlen);

    int foot= cmlen/100.0/0.3048;

    printf("foot: %d\n", foot);
    int inch = (cmlen/100.0/0.3048-foot)*12;
    printf("%lf\n", cmlen/100.0/0.3048);

    printf("%d %d\n",foot,inch);

    return 0;
}
A程序中(cmlen/100.0/0.3048-foot)*12这个表达式是会隐式转换为double类型,计算出的结果为double类型,赋值给inch,即又强制转换为int类型,取整。 B程序呢,如下,由于cm为整型数,所以cm = cm/ 100.0强制转为int,170/100.0= 1.70,转整型为1,可以发现在这儿已经减少了很多,0.7;所以分开计算会导致丢掉小数部分。使其精度降低。程序A不会在计算中丢失小数部分,因为在赋值inch之前一直是隐式转换为double类型了,foot一样,cmlen/100.0/0.3048;这个表达式按照double类型计算;
#include<stdio.h>
int main()
{
    int cm;

    scanf("%d",&cm);

    cm = cm/100.0;
    printf("cm = %d\n", cm);

    int foot= cm/0.3048;

    printf("foot = %d\n", foot);

    int inch= (cm/0.3048 - foot)*12;

    printf("%d %d\n",foot,inch);// 输出

    return 0;
}
大米粥哥哥 2017-09-29
  • 打赏
  • 举报
回复
int会丢失好多数据 你用double啊
kugeniha 2017-09-29
  • 打赏
  • 举报
回复
cm = cm/100.0 这里你输入170 结果为1

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧