1年単利金利 0.2% の A銀行と、1年複利金利 0.19% の B銀行に、それぞれ 100万円を預けた時の各年の預金高を、B銀行の預金高が多くなるまで、一覧表にせよ。
ここで,単利とは元金が変わらず,複利は利息分が元金に上乗せされるものである.
というレポート課題が出たのですが、うまく結果がでないので教えてください。
以下が私の書いたプログラムです。
#include<stdio.h>
int main(void)
{
int i = 100;
int j = 100;
int n = 0;
float a = 100*0.0002;
float b = j*0.00019;
do {
i= i + a;
j= j + b;
n++;
printf("i j = %d, %d?n",i, j);
} while (j > i);
printf("%d年でBがAを上回る?n",n);
return 0;
}
実行するとループせずに終わってしまいます。
どこが間違っているのかご教授よろしくお願いします。
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 );
論理構成の手順からプログラムのミスまでとてもわかりやすく教えていただき、ありがとうございます。
これからは、まずしっかりと論理構成をした上でプログラムを書くように練習します。
どうもありがとうございました。
No.3
- 回答日時:
#1です。
利息だから1円単位でいいのか・・・・整数型でよかったのね。
まあキャストすれば動くでしょ。
a+= (int)(a_org*a_rate);
b+= (int)(b*b_rate);
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が見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 銀行・ネットバンキング・信用金庫 【あおぞら銀行の普通預金】の普通預金の金利が年0.2%で半年に1回利子が振り込まれるとS 6 2023/08/12 20:41
- 金融業・保険業 もうすぐ大学の金融論の試験なのですが問題が全然解けません...泣 どなたか分かる方いたら教えてもらえ 1 2023/07/21 22:03
- 外国株 米国FRB議長は急に利上げし過ぎた、だから銀行破綻した、 それでも テキサスインスツルメンツ米国株を 1 2023/05/04 07:56
- 預金・貯金 ネット銀行について 3 2022/06/18 19:49
- 銀行・ネットバンキング・信用金庫 【アメリカの銀行口座】日本人がアメリカの銀行に銀行口座を日本にいながら開設する方法を教え 3 2023/01/05 12:59
- 簿記検定・漢字検定・秘書検定 簿記3級の勘定記入教えてください 2 2022/06/28 10:56
- 銀行・ネットバンキング・信用金庫 auじぶん銀行の金利について 2 2023/04/08 16:49
- その他(資産運用・投資) 日本が株式投資をせずに銀行預金していたのには合理性がある話だった??(´・ω・`) 2 2022/12/20 20:25
- C言語・C++・C# プログラミングペーパーテスト 次の問題の実行結果を答えろ #include int x[ ] = { 1 2022/06/16 21:49
- C言語・C++・C# プログラミングの授業のペーパーテスト 実行結果を答えろ #include int x[ ] = {1 3 2022/06/16 20:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
初心者です。for文、if文を使っ...
-
c言語のwhile文を使った計算で...
-
for文の中にswitch文はいれられ...
-
プログラミングで二番目に大き...
-
getcの改行判定
-
C言語 数字以外を入力させない...
-
for文~break
-
構文エラー";"が型の前にあり...
-
C言語のwhile文を使った素数判...
-
while文について、c言語...
-
C言語のプログラミング (基礎...
-
C言語 マスターマインドゲーム...
-
VHDLで、case文とwhen文のどち...
-
C言語・アルゴリズムの勉強法(...
-
素因数分解のプログラムを作成...
-
C言語で電卓を作成する。
-
C言語:配列の最大値
-
Enterキーを押されたら次の処理...
-
「指定されたキャストは有効で...
-
#define _CRT_SECURE_NO_WARNIN...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
構文エラー";"が型の前にあり...
-
#if 1 #elseの意味について
-
for文の中にswitch文はいれられ...
-
C言語階乗の総和を求める
-
配列を使って魔方陣
-
C言語 数字以外を入力させない...
-
C言語プログラムが理解できなくて…
-
配列を関数に渡す方法
-
初心者です。for文、if文を使っ...
-
scanf関数を用いての加減乗除%...
-
c言語プログラミングで1から100...
-
while文について、c言語...
-
getcの改行判定
-
プログラミングで二番目に大き...
-
VHDLで、case文とwhen文のどち...
-
C言語で電卓を作成する。
-
C言語の二分法のプログラムにつ...
-
プログラミングに関して
-
階乗のプログラム!!
-
C言語についてですfor ifをつか...
おすすめ情報