2017-02-18 49 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