C嵌套循环的兴趣

时间:2017-02-18 17:57:57

标签: c loops for-loop nested

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

该计划应输出10个利率和相应的总利息加上贷款

利率从.01(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;
}

1 个答案:

答案 0 :(得分: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循环将以阈值处的年份结束,因此它将立即停止。而不是使用很少需要的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的那部分得到了很好的支持。