C言語の強制型変換


C言語では、実際のアプリケーションでは、異なるタイプのデータが一緒に演算されますが、タイプによっては、自分が望んでいる結果ではない可能性が高いです.以下の例のように、
1+1/2+1/3を求めます... 1/100
考え方に沿って以下の手順を書きます.

  
  
  
  
  1. #include <stdio.h> 
  2.  
  3. int main() 
  4.   int i; 
  5. # , float  
  6.   float sum = 0; 
  7.  
  8.   for(i = 1;i <= 100;i++) 
  9.   { 
  10.     sum = sum + 1 / i; 
  11.    } 
  12.   printf("sum = %f
    "
    ,sum); 
  13.  
  14.   return  0; 

しかし、実行結果は次のとおりです.
    sum = 1.000000
明らかに結果が間違っていますが、上記の理由で実行結果が間違っていますか?
問題は、タイプ強制変換をしていないことです.プログラムではiはintタイプであるが,C言語では他のタイプのデータと整数(int)を除算し,最終的に得られる結果も整数(int)の結果である.
したがって,上記のプログラムでは,1/i,i=1の場合,結果は1に等しく,i>1の場合,結果は0に等しい.実行結果を正しくするには、次の手順でタイプの強制変換が必要です.

  
  
  
  
  1. #include <stdio.h> 
  2.  
  3. int main() 
  4.   int i; 
  5.   float sum = 0; 
  6.  
  7.   for(i = 1;i <= 100;i++) 
  8.   { 
  9.    # i  
  10.    sum = sum + 1 / (float)(i); 
  11.    } 
  12.   printf("sum = %f
    "
    ,sum); 
  13.  
  14.   return  0; 

実行結果は次のとおりです.
sum = 5.187378