-1

程序:

#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
4

3 回答 3

2

5/9 的整数为零,尝试cel=(fahr-32)*5/9或漂浮整条船。

于 2012-09-14T17:50:02.343 回答
2

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

所以 typeof(5/9) = int 而 typeof(5.0/9) = typeof(5/9.0) = typeof(5.0/9.0) = double。

因此正确的版本是:

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

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

于 2012-09-14T17:54:11.713 回答
0

试试这个:

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);   
  } 
}

5/9 是(作为一种类型)int/int,它将给出一个 int。您可以通过将它们更改为 5.0/9.0 来转换数学,或者您可以只使用 5./9。

于 2012-09-14T17:55:35.943 回答