• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:1年単利金利 0.2% の A銀行と、1年複利金利 0.19% の B)

A銀行とB銀行の預金比較

このQ&Aのポイント
  • A銀行とB銀行に、それぞれ100万円を預けた時の各年の預金高を比較する。
  • 求められるのは、B銀行の預金高がA銀行を上回るまでの年数。
  • しかし、このプログラムでは結果が出ないので修正が必要。

質問者が選んだベストアンサー

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.4

論理構成を建てずに、闇雲にプログラムしてもダメです。 【前提】 (1)利率は単利は年利0.2%、複利は01.19%とする。 (2)利金は1円単位で、端数切り捨てとする。 【処理】 (1)単利側をI、複利側をJとし、初期値100万円から開始 (2)単利側の計算 I += 1000000 * 0.002 (3)複利側の計算 J += J * 0.0019 (4)JがIより大きくなるまで(2)と(3)を繰り返す (5)繰り返した回数(年)を表示する 【間違えている点】 (1)金額が100円である。 (2)複利側で利金が初期元本の利金を繰り入れている。 (3)whileは条件を満たす間、ループする。   本件では最初はJ=Iなので、条件を満たさない。   何故なら、100に0.002を掛けても0.2で、切り捨てにより   0になるので、I+=aとしてもIの値は変化しない。Jも同じ。 C言語ではUntil条件のループ制御文はありません。 日本語で、「~になるまで繰り返す」という表現は表せません。 これは「~になったら繰返しを止める」ということなので、 代わりに、「~でない間、繰り返す」と考えるのが正しい。 以上を修正すると、以下の通り。 (1)初期値     long i = 1000000; 念のためlong型を使う。     long j = 1000000; (2)利渡り     j += j * 0.0019; (3)繰り返し条件     while ( j <= i );

dyebe011
質問者

お礼

論理構成の手順からプログラムのミスまでとてもわかりやすく教えていただき、ありがとうございます。 これからは、まずしっかりと論理構成をした上でプログラムを書くように練習します。 どうもありがとうございました。

その他の回答 (3)

回答No.3

#1です。 利息だから1円単位でいいのか・・・・整数型でよかったのね。 まあキャストすれば動くでしょ。 a+= (int)(a_org*a_rate); b+= (int)(b*b_rate);

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

いろいろと間違っているし, 表示を見れば理由はわかると思うんだけど.... とりあえず, 1万円単位でいいの? 普通は, 少なくとも 1円単位で考えるものじゃない?

回答No.1

まず i= i + a; j= j + b; の結果がint型なので小数点が消えてなくなる。 Bは利息の掛け算がループに入っていないので単利になってる。 double a_org = 1000000; double b_org = 1000000; double a_rate = 0.002; double b_rate = 0.0019; int n=0; double a=a_org; double b=b_org; do { printf("[%d];i, j = %lf, %lf\n", n, a, b) a+= a_org*a_rate; b+= b*b_rate; n++; } while (a > b); printf("[%d];a, b = %lf, %lf\n", n, a, b); printf("%d年でBがAを上回る\n",n);

関連するQ&A