2017-02-18 88 views
-1

我的C程序必須包含一個可以提高利率的循環,以及一個計算利息並顯示每個利率的總和的嵌套循環。任何人都可以將我指向正確的方向嗎?C感興趣的嵌套循環

程序應該輸出10利率及相應的利息總額加上貸款

利率開始0.01(1%)和應在1.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

用戶是否必須輸入任何內容?我不清楚要理解你實際上想要什麼程序。輸出應該是什麼樣子? – 2017-02-18 18:04:22

+0

用戶不輸入任何內容。該計劃應該輸出一張表格顯示費率和利率是在那個速度。所以它應該輸出10行的利息和相應的利息總額 – dreed

回答

0

首先要做的事情是打開警告。 C編譯器通常不會給你警告,通常是-Wall來獲得基礎(不是全部)。一旦我們做到這一點...

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

這告訴我們你傳遞一個浮點數printf而是試圖把它當作一個整數,所以它會被錯誤地翻譯成字符串。它需要。

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

%f一個浮點數,以及.2表示只使用兩位小數喜歡錢。


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

這一次告訴我們,rate永遠不會增加。它被添加到,但從未存儲在任何地方。相反,你想要rate += 0.01


現在運行。一旦。並且它僅在第11年報告。

問題是您的外部do/while循環使用的是year,但for循環將以threshhold的年份結束,因此它會立即停止。很少需要使用do/while循環,而不是使用另一個for循環。

第二個問題是你打印輸出和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