割り当てのために、最後に賞金のパーセンテージを出力する必要がある「ジャンケン トカゲ スポック」ゲームを作成する必要があります。このプログラムでは、プレーヤー A と B が引き分けのゲームを含めて勝ったゲーム数、合計ゲーム数、および各プレーヤーの勝率を計算します。すべての変数は、変数タイプint
であるパーセンテージを除きます。double
パーセンテージ (勝ったゲーム数 / 総ゲーム数) を計算すると、結果として 0 が得られます。理由はありますか?申し訳ありませんが、コードを提供できませんでした。これは課題であり、オンラインに投稿することは許可されていません。
質問する
2109 次
2 に答える
6
コードを見ないと 100% 確信は持てませんが、私の推測では、次のように値を分割しています。
int numWins = /* ... */
int numLosses = /* ... */
double ratio = numWins / numLosses; // <-- Error!
C および C++ では、最後の行は論理エラーです。結果を として格納していますが、double
2 つint
の を除算しているため、除算は整数除算として行われ、 に格納されdouble
ます。C および C++ は、使用する除算を決定するときに、割り当てている変数の型を調べません。2 つの の比率は、int
常に整数除算を使用して計算されます。
これを修正するには、キャストを追加できます。
double ratio = (double)numWins / numLosses;
これにより、オペランドの少なくとも 1 つがnumWins
adouble
であるため、除算が浮動小数点除算として行われることが保証されますdouble
。これで問題が解決するはずです。
お役に立てれば!
于 2013-10-11T00:27:12.683 に答える
2
ほとんどのプログラミング言語では、2 つの整数の除算は整数です。したがって、と5 / 10
が与え0
られます。これは結果変数への割り当ての前に行われるため、結果変数が a であるという事実は関係ありません。浮動小数点計算を開始するには、除数または被除数のいずれかを double に変換する必要があります。1 / 10
9 / 10
double
于 2013-10-11T00:27:31.550 に答える