新生活を充実させるための「こだわり」を取材!!

C言語で以下の問題で困っています。

「年複利の定期預金を始める。満期時の残高を計算せよ。
・満期時の残高 = 元金×(1+年利率)^年数
・whileを、使う。」

という問題です。そこで、以下のようにプログラムを書きましたが、うまく動きません。どこが、間違っているのでしょうか?分かる方、お願いします。

#include <stdio.h>
main()
{

/*初期化*/
int a=1, m, t;
float b=1, n;

/*値の入力*/
printf ("元金を入力してください。\n");
printf ("元金 =");
scanf ("%d", &m);
printf ("年利率を入力してください。\n");
printf ("年利率 =");
scanf ("%f", &n);
printf ("定期の年数を入力してください。\n");
printf ("定期の年数 =");
scanf ("%d", &t);
while (a <= t){
b = b *(1 + n);
a = a + 1;
}

/*出力*/
printf ("満期時の残高は、%fです。", m*b);
}

教えて!goo グレード

A 回答 (5件)

No1、No2 の sunasearch さんの回答に補足します。



scanf() の書式指定は float型⇒%f、double型⇒%lf です。
つまり、husigikazetukai さんのサンプルソースであれば、float型を使っているようですので、%f で問題ありません。

ちなみに、printf() の書式指定は float型、double型に関わらず %f のみで、%lf は未定義だったはずです。
# でも、たいていのコンパイラはこのあたりを無難に処理してくれる
# ようですけどねぇ。
# scanf() の仕様に引きずられて、printf() の場合も double 型に %lf を
# 使ってしまう人が多いせいなんだと思います。

ま、こちらはご参考までに。。。
    • good
    • 0
この回答へのお礼

補足をありがとうございました。

お礼日時:2005/07/04 21:41

あ、ちょっと意味不明なので補足



誤:
7.2%の複利10年で約2倍になってるよ?
正:
7.2%の複利10年でちゃんと約2倍になってるよ?
計算自体はあってるね
    • good
    • 1
この回答へのお礼

補足をありがとうございます。参考になりました。

お礼日時:2005/07/04 21:26

ちゃんと動いているようだが…



元金を入力してください。
元金 =10000
年利率を入力してください。
年利率 =0.072
定期の年数を入力してください。
定期の年数 =10
満期時の残高は、20042.312145です。

7.2%の複利10年で約2倍になってるよ?

…おかしいトコ気づいた?
    • good
    • 0
この回答へのお礼

複利計算について少しわからない部分がありまして、少し不安でした。やはり、このソースで良かったのですね。
ご回答ありがとうござしました。

お礼日時:2005/06/20 22:38

あと補足ですが、floatは誤差が大きいので、doubleを使ってください。

    • good
    • 0
この回答へのお礼

ちょっと条件がありまして、double型ではなくfloat型を使わなければいけなかったのでfloat型にしました。
補足をありがとうございました。

お礼日時:2005/07/04 21:31

>scanf ("%f", &n);



実数型では、
%fではなく、%lfを使ってください。
    • good
    • 0
この回答へのお礼

とても参考になりました。ご回答ありがとうございました。

お礼日時:2005/06/20 22:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

教えて!goo グレード

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング