5
4

6 に答える 6

5
printf("%f",9/5);

引数は type でなければならず、 typeであるため、このステートメントは未定義の動作です。double9 / 5int

9 / 5.0型の引数double(および正しい浮動小数点除算)を持つために使用します。

于 2012-07-28T17:40:02.080 に答える
4

9/5タイプintです。withにint引数を渡すと、未定義の動作になります。printf"%f"

9.0/5.0必要に応じて1.800000、または(double)(9/5)必要に応じて試してください1.000000

于 2012-07-28T17:39:35.597 に答える
3

どうしてこれなの?

したがって、9 / 5 は 2 つの整数を除算することで得られます。2 つの整数を除算すると、整数値 1 になります。しかし、これは int であり、%f指定されたものは float を必要とするため、これは未定義の動作です。

Ps .: おそらく欲しい

9.0 / 5

また

9 / 5.0

また

9.0 / 5.0
于 2012-07-28T17:41:32.710 に答える
2

Re:プログラムの出力が 1.000000 であってはいけませんか?

除算の結果が ではなく float 値になっていましたint。形式を指定intして を印刷しようとしたため、結果は未定義の動作でした。%f

詳細:

ただし、関連する2つの問題があります。

  1. int除算から eger 結果を取得していますが、 float 値のフォーマットを使用して試行しています%f

  2. (あなたの質問は、あなたがこれを認識していることを暗示しているようです)整数除算は整数になるため、%fフォーマット指定子が適切ではありません。書式指定子と引数が一致しない場合の動作はundefinedです。

    整数の結果を避けるには、次を試してください。

    9.0 / 5または9 / 5.0または9.0 / 5.0

    期待していた結果を得るには指定子%fが適切であり、期待どおりに機能します。

    整数除算を行っている場合、結果は別の整数になることに注意してください。ただし、少なくとも 1 つのオペランドが float の場合、もう 1 つのオペランドも float に昇格され、除算の結果は float 値になります。

    整数除算では切り捨てが発生します。つまり、結果の小数部分が破棄されます。

于 2012-07-28T17:38:55.193 に答える
0

答えは簡単です。9 は整数で、5 も整数です。整数が整数で除算されると、結果は 0 になり、printf() で「%f」を使用したため、0.00000 にエスカレートされます。正しい結果が必要な場合は、9.0/5 を実行してください。これで、確実に正しい結果が得られます。答え

于 2012-07-28T17:58:32.083 に答える
0

これは9/5が 1 であり、整数型であるためです。小数部分は単純に切り捨てられます。5.0/9目的を達成するには、または5/9.0または5.0/9.0またはを使用して除算を強制的に浮動小数点演算にします。(float) 5/9

整数引数の型が にバインドされている%f場合、動作は未定義です。

これは、C99 標準のセクション 7.21.6.1 パラグラフ 9 に記載されています。このパラグラフは以下に引用されています。

変換指定が無効な場合、動作は未定義です。対応する変換指定に対して正しい型でない引数がある場合、動作は未定義です。

于 2012-07-28T17:39:05.107 に答える