使用cygwin在C中的基本数学问题

时间:2016-07-10 00:42:32

标签: c math

我不确定这里发生了什么,但是我有一个代码示例,它没有产生我期望的,这里有一部分问题(只是一个部分):

printf("Now enter a Fahrenheit to convert to Centigrade\n");
fflush(stdout);
scanf("%f",&c);
d = (c-32)*(5/9);
printf("%f\n",c);
printf("Your result in Centigrade is %f\n",d);

输入212输入的结果是:您的摄氏度结果为0.000000

当我做一个小改动时:

printf("Now enter a Fahrenheit to convert to Centigrade\n");
fflush(stdout);
scanf("%f",&c);
d = (c-32)*5/9;
printf("%f\n",c);
printf("Your result in Centigrade is %f\n",d);

当我输入212输入时的结果是:你的摄氏度结果是100.00000,这是正确的。

在数学中(a + b)*(c / d)与(a + b)* c / d相同;那么只有额外的括号,零结果会发生什么?

2 个答案:

答案 0 :(得分:3)

由于两个操作数都是整数,5/9因为执行整数除法而得到0。请改用5./9

答案 1 :(得分:0)

在这里,你需要注意两件事。

  1. 运营商优先级
  2. 自动类型转换
  3. 首先,()运算符的优先级高于*/运算符。

    其次,如果表达式包含floatintint将自动转换为float

    现在你的第一种情况是:

      计算
    1. (c - 32),(此处32转换为32.0并完成计算)。 (比如说这等于x
    2. 计算
    3. (5/9)。这两个表达式都是int,因此没有任何内容转换为float。对于int计算,5/9等于0。假设这等于y
    4. 您的最终答案计算为x * y,由于y0,您的答案为0.0
    5. 然而,在你的第二种情况下会发生什么:

        计算
      1. (c - 32),(此处32转换为32.0并完成计算)。
      2. (c - 32) * 5已计算完毕。这里5转换为5.0并完成计算。 (说这等于xx是浮动的)
      3. 计算
      4. x / 9。此处9转换为9.0并完成计算。
      5. 所以,你可以在第二种情况下看到,没有与0相乘 - 就像第一种情况一样 - 因此你得到一个非零(希望是正确的)答案。