Что не так со следующим кодом? - PullRequest
0 голосов
/ 25 января 2011

// Программа, которая вычисляет сумму денег на банковском счете через n лет

#include <stdio.h>

double bank(double money, double apy, int years);

int main() {

double money1, apy1;
int years1;

printf("How much money is currently in your bank account? ");
scanf("%d", &money1);

printf("How many years will this money stay in your account? ");
scanf("%d",&years1); 

printf("What is your APY? ");
scanf("%d", &apy1); 

int bank1 = bank(money1, apy1, years1);

printf("Your grand total after %d will be $%d \n", years1, bank1); 


system ("PAUSE");
return 0;   
}


double bank(double money, double apy, int years) {

 if(years <= 0) 
    return money;

 else
    return bank(money*apy, apy, years-1);

 }

Ответы [ 5 ]

4 голосов
/ 25 января 2011

Изменение:

scanf("%d", &money1);

до

scanf("%lf", &money1);

и изменить:

scanf("%d", &apy1); 

до:

scanf("%lf", &apy1); 

А пока вы можете добавить некоторые printfs, чтобы помочь с отладкой (при условии, что у вас нет отладчика исходного уровня).

4 голосов
/ 25 января 2011

Это:

return bank(money*apy, apy, years-1);

, вероятно, должно быть

return bank(money*(1+apy), apy, years-1);

, поскольку полученные вами проценты должны быть добавлены к существующей сумме.В противном случае ваша общая сумма будет уменьшаться каждый год.

2 голосов
/ 25 января 2011

Еще один:

double bank(double money, double apy, int years);

Возвращает двойное, , но

int bank1 = bank(money1, apy1, years1);

Вы помещаете результат в int.

1 голос
/ 25 января 2011

Вы никогда не должны использовать плавающую точку в финансовых расчетах.

Плавающая точка по своей сути не способна точно представлять 10-базисные значения, что означает, что вы будете страдатьот ошибок округления и неравенств, что недопустимо в финансах (среди прочих).

Это многократно обсуждалось на SO .Проблема не зависит от языка.

0 голосов
/ 25 января 2011

Я думаю, что вы должны вызывать вашу функцию следующим образом:

int bank1 = bank(money1, 1+apy1/100., years1);

В противном случае у вас будет много денег:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...