-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

2 つの int 間の除算は、常に別の int になります。2 つの項のうちの 1 つが float または double の場合、もう一方は自動的にその型に昇格され、正しい結果が得られます。

したがって、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 に答える