2017-02-18 10 views
-1

マイCプログラムには、金利を上昇させるループと、金利を計算し、金利ごとに合計を表示するネストループが含まれている必要があります。誰かが私を正しい方向に向けることができますか?Cネストループfor

プログラムすべき出力10の金利および対応する総関心プラスローン

利率が0.01を開始する(1パーセント)及び0.10(10パーセント)で終了すべきです。

#include <stdio.h> 

int main(void) 
{ 
    double loan = 1000.00, rate = 0.01, output; 
    int year = 1; 

    do { 
     rate + 0.01; 

     for (year = 1; year < 11; year++) { 

      output = rate * loan + loan; 

     } 

     printf("%d $%d\n", year, output); 

    } while (year < 11); 

    return 0; 
} 
+0

'rate + 0.01'は役に立ちません –

+0

ユーザは何かを入力する必要がありますか?私はあなたが実際にプログラムがしたいことを理解することは明らかではありません。出力はどのように表示されるべきですか? –

+0

ユーザーは何も入力しません。プログラムは、レートを表示してテーブルに出力し、そのレートで関心が何であるかを表示する必要があります。したがって、関心のある10行と、その金利での対応する合計を出力する必要があります。 – dreed

答えて

0

最初にまず警告をオンにします。 Cのコンパイラは通常、警告を出すことはありませんが、基本的に(すべてではありません)基本的には-Wallです。私たちはやるたらあなたがprintfに浮動小数点数を渡すが、整数として扱いしようとしているので、間違って文字列に変換することになるだろうしているを教えてくれる

test.c:17:36: warning: format specifies type 'int' but the argument has type 'double' [-Wformat] 
     printf("%d $%d\n", year, output); 
         ~~   ^~~~~~ 
         %f 

...という。それが必要です。浮動小数点数、およびお金だけのような小数点以下を使用する.2手段のための

 printf("%d $%.2f\n", year, output); 

%f


test.c:9:14: warning: expression result unused [-Wunused-value] 
     rate + 0.01; 
     ~~~~^~~~~ 
2 warnings generated. 

この1つはrateがインクリメントされることはありませんことを教えてくれる。これは追加されましたが、どこにも保存されませんでした。代わりにrate += 0.01が必要です。


これが実行されます。一度。

問題は外側のdo/whileループがyearを使用していますが、forのループはしきい値で終了しますので、すぐに終了します。まれに必要なdo/whileループを使用する代わりに、forループをもう1つ使用してください。

第2の問題は、出力と年をループyearforの外側に印刷していることです。だから、昨年の結果しか得られません。すべての年が欲しいなら、印刷物は中に入る。

#include <stdio.h> 

int main(void) 
{ 
    const double initial_loan = 1000.00; 

    for(double rate = 0.01; rate <= 0.10; rate += 0.01) { 
     double loan = initial_loan; 

     for (int year = 1; year <= 10; year++) { 
      loan += rate*loan; 
      printf("%d @ %.2f%% $%.2f\n", year, rate * 100, loan); 
     } 
    } 

    return 0; 
} 

可能な限り狭い範囲で変数を宣言しています。これは、使用するのが適切であることを通知し、外側のループにyearを使用しようとするようなものを避けます。

多くのCマテリアルは非常に控えめで、関数の開始時にすべての変数を宣言するように指示します。これは必要ではなく、長い間ずっと続いています。 forループ内の変数を宣言することはC99のことですが、C99のその部分は非常にうまくサポートされています。

+1

ありがとう、あなたはすべてをはっきりと説明しました。私はこのプログラムを複数の方法で書いていましたが、printfを使用しようとしたときに私の主なエラーがfloatをintとして渡していたと思います。 – dreed