程序:

#include<stdio.h>
main()
 {
  int fahr;
   float cel;
   for(fahr=0;fahr<300;fahr=fahr+20)
   {
   cel=(5/9)*(fahr-32);
     printf("\n %d \t %f",fahr,cel);
    }
}


我得到的输出:

   0       0.000000
   20      0.000000
   40      0.000000
   60      0.000000
   80      0.000000
   100     0.000000
   120     0.000000
   140     0.000000
   160     0.000000
   180     0.000000
   200     0.000000
   220     0.000000
   240     0.000000
   260     0.000000
   280     0.000000

最佳答案

两个整数之间的除法总是导致另一个整数。如果两个术语之一是浮点数或双精度数,则另一个会自动promoted变为该类型,从而产生正确的结果。

因此typeof(5/9)= int,而typeof(5.0 / 9)= typeof(5 / 9.0)= typeof(5.0 / 9.0)= double。

因此,正确的版本是:

cel=(5./9.)*(fahr-32);


注意:每当存在具有不同“等级”类型的数学表达式时,就会发生这种情况,较低等级的类型会提升为匹配最高等级。

关于c - 我在mingw中尝试了我的第一个程序。我得到以下输出。我的程序有什么问题?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12429467/

10-15 05:13