wedy1234 2021-10-19 19:08 采纳率: 90%
浏览 45
已结题

两个算式顺序不同,为什么结果不同呢?如下

给定一个华氏温度F,本题要求编写程序,计算对应的摄氏温度C。计算公式:C=5×(F−32)/9。题目保证输入与输出均在整型范围内。

输入格式:
输入在一行中给出一个华氏温度。

输出格式:
在一行中按照格式“Celsius = C”输出对应的摄氏温度C的整数值。

输入样例:
150
输出样例:
Celsius = 65

img

img

5* 的位置不同,判定节点12的结果就不一样,怎么回事呢?

  • 写回答

4条回答 默认 最新

  • include_iostream_ 2021-10-19 19:25
    关注

    这与C++的除法特性有关。(顺带一提,看来你在写C,为什么用了.cpp后缀?C和C++早就不再完全兼容了,如果要写C就不要用.cpp后缀。认为无所谓的家伙都是不懂现代C++的,这样的老师很多,不要听他们误导。)
    C++的除法行为与参与运算的类型有关。如果是两个整数相除,就会进行向零取整的操作。如果先除以9再做乘法,余数会被抛弃。举例而言,如果F是142,则F-32是110。如果先除以9,得到的是12(即带余除法的整商,注意,不是12.2循环!余数2被舍去了),再乘5是60。如果先乘再除,得到的是550除以9,也就是61(同样,余数1被舍去了)。二者显然是不等价的。
    计算机所做的,永远是符合指令顺序的操作,它是不会像人类一样进行简算优化的(有时候编译器会这么做,但C++语法规定你这两个写法不等价,自然也不会做出调整)。
    数学中,这种操作相当于给除法结果带个取整函数。乘法的操作数能从取整函数内取出吗?显然不满足(即,int(a*b) != int(a) * b,这个结论的正确性是显然的),因此不能交换位置。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 10月27日
  • 已采纳回答 10月19日
  • 创建了问题 10月19日

悬赏问题

  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 unity第一人称射击小游戏,有demo,在原脚本的基础上进行修改以达到要求
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line