C言語の強制型変換
C言語では、実際のアプリケーションでは、異なるタイプのデータが一緒に演算されますが、タイプによっては、自分が望んでいる結果ではない可能性が高いです.以下の例のように、
1+1/2+1/3を求めます... 1/100
考え方に沿って以下の手順を書きます.
しかし、実行結果は次のとおりです.
sum = 1.000000
明らかに結果が間違っていますが、上記の理由で実行結果が間違っていますか?
問題は、タイプ強制変換をしていないことです.プログラムではiはintタイプであるが,C言語では他のタイプのデータと整数(int)を除算し,最終的に得られる結果も整数(int)の結果である.
したがって,上記のプログラムでは,1/i,i=1の場合,結果は1に等しく,i>1の場合,結果は0に等しい.実行結果を正しくするには、次の手順でタイプの強制変換が必要です.
実行結果は次のとおりです.
sum = 5.187378
1+1/2+1/3を求めます... 1/100
考え方に沿って以下の手順を書きます.
- #include <stdio.h>
-
- int main()
- {
- int i;
- # , float
- float sum = 0;
-
- for(i = 1;i <= 100;i++)
- {
- sum = sum + 1 / i;
- }
- printf("sum = %f
",sum);
-
- return 0;
- }
しかし、実行結果は次のとおりです.
sum = 1.000000
明らかに結果が間違っていますが、上記の理由で実行結果が間違っていますか?
問題は、タイプ強制変換をしていないことです.プログラムではiはintタイプであるが,C言語では他のタイプのデータと整数(int)を除算し,最終的に得られる結果も整数(int)の結果である.
したがって,上記のプログラムでは,1/i,i=1の場合,結果は1に等しく,i>1の場合,結果は0に等しい.実行結果を正しくするには、次の手順でタイプの強制変換が必要です.
- #include <stdio.h>
-
- int main()
- {
- int i;
- float sum = 0;
-
- for(i = 1;i <= 100;i++)
- {
- # i
- sum = sum + 1 / (float)(i);
- }
- printf("sum = %f
",sum);
-
- return 0;
- }
実行結果は次のとおりです.
sum = 5.187378