2017-02-18 2 views
-1

Программа My C должна содержать цикл, который увеличивает процентную ставку, и вложенный цикл, который вычисляет проценты и отображает общую сумму за каждую процентную ставку. Может кто-то указать мне верное направление?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; 
} 
+0

'rate + 0.01' ничего не помогает –

+0

Должен ли пользователь вводить что-либо или нет? Я не понимаю, понять, что вы на самом деле хотите сделать. Каким должен быть результат? –

+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 закончится с годом на пороге, поэтому он немедленно остановится. Вместо использования цикла 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

Смежные вопросы