0

割り当てのために、最後に賞金のパーセンテージを出力する必要がある「ジャンケン トカゲ スポック」ゲームを作成する必要があります。このプログラムでは、プレーヤー A と B が引き分けのゲームを含めて勝ったゲーム数、合計ゲーム数、および各プレーヤーの勝率を計算します。すべての変数は、変数タイプintであるパー​​センテージを除きます。doubleパーセンテージ (勝ったゲーム数 / 総ゲーム数) を計算すると、結果として 0 が得られます。理由はありますか?申し訳ありませんが、コードを提供できませんでした。これは課題であり、オンラインに投稿することは許可されていません。

4

2 に答える 2

6

コードを見ないと 100% 確信は持てませんが、私の推測では、次のように値を分割しています。

int numWins   = /* ... */
int numLosses = /* ... */
double ratio = numWins / numLosses; // <-- Error!

C および C++ では、最後の行は論理エラーです。結果を として格納していますが、double2 つintの を除算しているため、除算は整数除算として行われ、 に格納されdoubleます。C および C++ は、使用する除算を決定するときに、割り当てている変数の型を調べません。2 つの の比率は、int常に整数除算を使用して計算されます。

これを修正するには、キャストを追加できます。

double ratio = (double)numWins / numLosses;

これにより、オペランドの少なくとも 1 つがnumWinsadoubleであるため、除算が浮動小数点除算として行われることが保証されますdouble。これで問題が解決するはずです。

お役に立てれば!

于 2013-10-11T00:27:12.683 に答える
2

ほとんどのプログラミング言語では、2 つの整数の除算は整数です。したがって、と5 / 10が与え0られます。これは結果変数への割り当ての前に行われるため、結果変数が a であるという事実は関係ありません。浮動小数点計算を開始するには、除数または被除数のいずれかを double に変換する必要があります。1 / 109 / 10double

于 2013-10-11T00:27:31.550 に答える