【问题标题】:C Nested Loop for InterestC 嵌套循环兴趣
【发布时间】:2017-07-08 04:56:54
【问题描述】:

我的 C 程序必须包含一个提高利率的循环,以及一个计算利息并显示每个利率总额的嵌套循环。谁能指出我正确的方向?

程序应该输出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;
}

【问题讨论】:

  • rate + 0.01 没有任何用处
  • 用户是否必须输入任何内容?我不清楚要了解您实际希望程序做什么。输出应该是什么样子?
  • 用户没有输入任何内容。该程序应输出一个表格,显示利率以及该利率的利息。所以它应该有 10 行的利息和相应的利率总额
  • 好的,对于初学者来说,printf 语句应该在 for 循环中。另外,请查看@Schwern 的好答案

标签: c loops for-loop nested


【解决方案1】:

首先,打开警告。 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 循环将在阈值处以年份结束,因此它将立即停止。不要使用很少需要的 do/while 循环,而是使用另一个 for 循环。

第二个问题是您在 year for 循环之外打印输出和年份。所以你只会得到去年的结果。如果你想要所有的岁月,打印在里面。

#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 的这一部分得到了很好的支持。

【讨论】:

  • 谢谢,你解释清楚了。我用多种方式编写了这个程序,但我认为我的主要错误是在尝试使用 printf 时将 float 作为 int 传递。
猜你喜欢
  • 1970-01-01
  • 2014-12-05
  • 2017-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多