【问题标题】:Why do these parentheses give different answers in C?为什么这些括号在 C 语言中给出不同的答案?
【发布时间】:2020-08-21 17:49:57
【问题描述】:

我正在研究 CS50 PS 2 的可读性,但在年级水平上得到了不正确的输出。

调试显示输入值正确,但输出错误。使用输入的手工计算给出了正确的答案。

我简化了方程式的第一部分并发现:

214 的值用于L56 用于W,表达式:

float R = (0.0588 * (L / W) * 100);

输出17.64,这是错误的。

当我使用时:

float R = (0.0588 * L / W * 100);

它输出22.47,这是正确的。

我不知道为什么。

【问题讨论】:

    标签: c cs50 parentheses arithmetic-expressions integer-division


    【解决方案1】:

    表达式

    float R = (0.0588 * (L / W) * 100);
    

    会发展到

    float R = 0,0588 * 3 * 100;
    

    这是17.64,四舍五入到小数点后两位。

    L / Winteger division 的结果是int,因此结果3.8... 将被截断为3

    要更正此问题,WL 变量中的至少一个必须是 floatdouble 类型。

    表达式

    float R = (0.0588 * L / W * 100);
    

    会发展到

    float R = ((0,0588 * 214) / 24) * 100 //parenthesis to illustrate the sequence 
    

    当四舍五入到小数点后两位时输出正确的结果22.47

    【讨论】:

      【解决方案2】:

      LW 都被声明为 int 的可能性很大。那么在第一种情况下,(L/W) 也将被视为int,因此被地板化,从而导致错误。

      旁注:即使它们被声明为floatdouble,浮点算术也意味着乘法和除法不是关联的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-01-08
        • 2011-02-10
        • 1970-01-01
        • 2023-03-11
        • 2020-12-31
        • 2018-03-05
        • 1970-01-01
        • 2014-02-24
        相关资源
        最近更新 更多