为什么这个循环在第二次运行期间不会迭代?

时间:2015-07-29 10:36:51

标签: c loops

我是C新手并且遇到了以下问题。有人可以解释循环计算利息和总和的问题吗?这是代码:

#include <stdio.h>

/*simple interest rate calculator */

int main()
{
    int year, y;
    float sum, interest, i; // i = interest after iteration
    y = 0; 
    i = 0;

    printf("Provide a sum you want to invest(in pence):\n");
    scanf("%f", &sum);
    printf("Provide interest rate:\n");
    scanf("%f", &interest);
    printf("For how long would you like to save(in years):\n");
    scanf("%d", &year);

    /*for(y = 1; y <= year; y++)
    i = sum * interest/100;
    sum += i; */ 

    do
    {   
      i = sum * interest/100;
      sum += i;
    }   
    while (y == 1 && y<= year);

    printf("Original sum %0.0f at %0.1f rate for %d years:\n\n", sum,    interest, year);
    printf("   Year  Interest  Sum\n");
    printf("--------+--------+--------\n");
   for(y = 1; y<= year; y++)
       printf("%5d %11.2f %5.2f\n", y, i, sum);

   return 0;

  } 

输出是: 原始金额为33750,年利率为12.5,为期10年:

年度利息总和
-------- + -------- + --------
    1 3750.00 33750.00
    2 3750.00 33750.00
    3 3750.00 33750.00
    4 3750.00 33750.00
    5 3750.00 33750.00
    6 3750.00 33750.00
    7 3750.00 33750.00
    8 3750.00 33750.00
    9 3750.00 33750.00
   10 3750.00 33750.00

并且每行应该采用新的总和并相应地计算。

非常感谢任何提示。

3 个答案:

答案 0 :(得分:2)

 do
{   
  i = sum * interest/100;
  sum += i;
}   
while (y == 1 && y<= year);

在此循环中,y的值不会更改,因此第二次条件为false,因为y初始化为0。因此sum的值保持不变在1st迭代之后。在此循环中递增y并将条件更改为

while ( y<year);// y<year because y is initialized to 0

修改

我真的不明白你使用这个循环的原因 -

for(y = 1; y<= year; y++)
printf("%5d %11.2f %5.2f\n", y, i, sum);

它将在每次迭代中打印相同的值。如果您想每年打印interstsum值,您应该使用上面printf中的while loop语句。

答案 1 :(得分:0)

你的do while()循环只运行一次,因为其中一个条件是&#34; y == 1&#34;在递增y后将评估为false,因此循环停止。 你也不会在任何地方增加y,因为它被初始化为0,它也不能满足条件。

答案 2 :(得分:0)

我认为你需要这样的东西。

int y = 1;  // initialize with 1
printf("   Year  Interest  Sum\n");
printf("--------+--------+--------\n");
do
{   
    i = (sum * interest)/100; // it will calculate sum+interest for 1 year.
    sum += i;
    y++;
    printf("%5d %11.2f %5.2f\n", y, i, sum);
}   
while (y <= year);  // you can compare y > 0 also in case you kept y = 0
printf("Original sum %0.0f at %0.1f rate for %d years:\n\n", sum, interest, year);